1
0
mirror of https://github.com/DoctorWkt/pdp7-unix.git synced 2026-01-11 23:53:23 +00:00

String support and more run-time routines

This is a work in progress.
This commit is contained in:
rswier 2016-03-29 01:49:21 -04:00
parent a36ea820b6
commit 6a40af2f97
4 changed files with 153 additions and 3 deletions

View File

@ -204,6 +204,27 @@ getcc() {
error('cc');
}
getstr() {
auto i, c, d;
i = 1;
loop:
if ((c = mapch('"')) < 0) {
number(2048);
write('*n');
return(i);
}
if ((d = mapch('"')) < 0) {
number(c*512+4);
write('*n');
return(i);
}
number(c*512+d);
write('*n');
i = i+1;
goto loop;
}
mapch(c) {
extrn peekc;
auto a;
@ -262,6 +283,21 @@ case21:
goto loop;
}
if (o==122) { /* string */
write('x ');
write('.+');
write('2*n');
write('t ');
write('2f');
write('*n');
write('.+');
write('1*n');
getstr();
write('2:');
write('*n');
goto loop;
}
if (o==20) { /* name */
if (*csym==0) { /* not seen */
if ((peeksym=symbol())==6) { /* ( */

76
src/other/brtb.b Normal file
View File

@ -0,0 +1,76 @@
/* brtb.b - B run-time library */
char(s, n) {
if (n & 1) return ((s[n/2]/512) & 0777);
return(s[n/2] & 0777);
}
lchar(s, n, c) {
if (n & 1) s[n/2] = (s[n/2] & 0777) | (c*512);
else s[n/2] = (s[n/2] & 0777000) | c;
}
putstr(s) {
auto c, i;
i = 0;
while ((c = char(s,i)) != '*e') {
putchr(c);
i = i+1;
}
}
/*
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) {
if (n > 9) {
putnum(n / 10);
n = n % 10;
}
putchr(n + '0');
}
printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9) {
auto adx, c, i;
i = 0;
adx = &x1;
loop:
while ((c = char(fmt,i)) != '%') {
if (c=='*e')
return;
putchr(c);
i = i+1;
}
i = i+1;
c = char(fmt,i);
if (c=='d') {
if (*adx < 0) {
putchr('-');
*adx = -*adx;
}
putnum(*adx);
} else if (c=='c')
putchr(*adx);
else if (c=='s')
putstr(*adx);
else {
putchr('%');
goto loop;
}
i = i+1;
adx = adx+1;
goto loop;
}

View File

@ -1,8 +1,9 @@
/* test.b - test program for B run-time library brt.s
/* test.b - test program for B run-time library brt.s brtb.b
b test.b test.s
b brtb.b brtb.s
echo abcABC > abc
perl as7 --out test.out brt.s test.s bi.s
perl as7 --out test.out brt.s brtb.s test.s bi.s
perl a7out test.out
*/
@ -10,7 +11,8 @@ main {
extrn fname, fin;
auto ch;
fin = open(fname, 0);
/* fin = open(fname, 0); */
fin = open("abc ", 0);
goto loop;
while (ch != 04) {

View File

@ -260,6 +260,27 @@ void getcc() {
error('cc');
}
getstr() {
auto i, c, d;
i = 1;
loop:
if ((c = mapch('"')) < 0) {
number(2048);
write('\n');
return(i);
}
if ((d = mapch('"')) < 0) {
number(c*512+4);
write('\n');
return(i);
}
number(c*512+d);
write('\n');
i = i+1;
goto loop;
}
mapch(c) {
extern peekc;
auto a;
@ -318,6 +339,21 @@ case21:
goto loop;
}
if (o==122) { /* string */
write('x ');
write('.+');
write('2\n');
write('t ');
write('2f');
write('\n');
write('.+');
write('1\n');
getstr();
write('2:');
write('\n');
goto loop;
}
if (o==20) { /* name */
if (*csym==0) { /* not seen */
if ((peeksym=symbol())==6) { /* ( */