Working on B printf and argv stuff

This commit is contained in:
rswier
2016-03-30 03:47:36 -04:00
parent 615bdba101
commit 9a8a4bae17
3 changed files with 24 additions and 22 deletions
+3 -2
View File
@@ -231,7 +231,7 @@ flush: 0
initio: 0 initio: 0
lac 017777 i lac 017777 i
sad d4 " sad d4
jmp 2f jmp 2f
sad d8 sad d8
jmp 1f jmp 1f
@@ -270,7 +270,8 @@ initio: 0
dzm oflg dzm oflg
jmp initio i jmp initio i
.argv: 0 .argv: .+1
.=.+10
.fin: 0 .fin: 0
.fout: 1 .fout: 1
eibufp: 0 eibufp: 0
+15 -19
View File
@@ -1,13 +1,13 @@
/* brtb.b - B run-time library */ /* brtb.b - B run-time library */
char(s, n) { char(s, n) {
if (n & 1) return ((s[n/2]/512) & 0777); if (n & 1) return(s[n/2] & 0777);
return(s[n/2] & 0777); return ((s[n/2]/512) & 0777);
} }
lchar(s, n, c) { lchar(s, n, c) {
if (n & 1) s[n/2] = (s[n/2] & 0777) | (c*512); if (n & 1) s[n/2] = (s[n/2] & 0777000) | c;
else s[n/2] = (s[n/2] & 0777000) | c; else s[n/2] = (s[n/2] & 0777) | (c*512);
} }
putstr(s) { putstr(s) {
@@ -20,20 +20,6 @@ putstr(s) {
} }
} }
/*
getstr(s) {
auto c, i;
i = 0;
while ((c = getch()) != '*n' & c != '*e') {
lchar(s,i,c);
i = i+1;
}
lchar(s,i,'*e');
return(s);
}
*/
putnum(n) { putnum(n) {
if (n > 9) { if (n > 9) {
putnum(n / 10); putnum(n / 10);
@@ -42,6 +28,14 @@ putnum(n) {
putchr(n + '0'); putchr(n + '0');
} }
octal(n) {
if (n > 7) {
octal(n / 8);
n = n & 7;
}
putchr(n + '0');
}
printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9) { printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9) {
auto adx, c, i; auto adx, c, i;
@@ -62,7 +56,9 @@ loop:
*adx = -*adx; *adx = -*adx;
} }
putnum(*adx); putnum(*adx);
} else if (c=='c') } else if (c=='o')
octal(*adx);
else if (c=='c')
putchr(*adx); putchr(*adx);
else if (c=='s') else if (c=='s')
putstr(*adx); putstr(*adx);
+6 -1
View File
@@ -9,7 +9,12 @@
main { main {
extrn fname, fin; extrn fname, fin;
auto ch; auto ch,p;
p = 017777;
printf("mem[0%o] = 0%o*n",p,*p);
printf("mem[0%o] = %d*n",*p,**p);
/* fin = open(fname, 0); */ /* fin = open(fname, 0); */
fin = open("abc ", 0); fin = open("abc ", 0);