|
|
1.1 ! root 1: #include "/usr/lib/a68defs" ! 2: ! 3: ! 4: int mkfault; ! 5: int stdin; ! 6: char readbuf[255]; char *readptr; ! 7: char eof, lastchar; ! 8: ! 9: readchar() ! 10: { ! 11: REG CHAR c; ! 12: ! 13: IF readptr==0 ! 14: THEN newline(); ! 15: FI ! 16: IF eof ORF mkfault ! 17: THEN c=EOF; ! 18: ELIF c = *readptr THEN readptr++; FI ! 19: return(lastchar=c); ! 20: } ! 21: ! 22: newline() ! 23: { ! 24: readptr=readbuf; ! 25: WHILE eof==0 ANDF mkfault==0 ! 26: ANDF ( eof = read(stdin,readptr,1)==0, ! 27: *readptr++!=NL ! 28: ) ! 29: DONE ! 30: *readptr++=0; readptr=readbuf; ! 31: } ! 32: ! 33: error(s1,s2) ! 34: char *s1, *s2; ! 35: { ! 36: prints(s1); prints(s2); ! 37: flushin(); ! 38: } ! 39: ! 40: flushin() ! 41: { ! 42: readptr=0; ! 43: } ! 44: ! 45: peekchar() ! 46: { ! 47: REG CHAR c; ! 48: c=nextchar(); ! 49: backspace(); ! 50: return(c); ! 51: } ! 52: ! 53: nextchar() ! 54: { ! 55: REG CHAR c; ! 56: ! 57: WHILE (c=readchar())==SP ORF c==TB DONE ! 58: return(c); ! 59: } ! 60: ! 61: readint(i) ! 62: int *i; ! 63: { ! 64: REG INT r; ! 65: REG CHAR c; ! 66: REG INT minus; ! 67: INT rc; ! 68: ! 69: IF (c=nextchar())=='-' ! 70: THEN minus=TRUE; c=readchar(); ! 71: ELSE minus=FALSE; ! 72: FI ! 73: IF digit(c) ! 74: THEN r = 0; ! 75: REP r =* 10; r =+ c-'0'; PER digit(c=readchar()) DONE ! 76: IF minus THEN r=(-r); FI ! 77: *i = r; backspace(); ! 78: rc = 1; ! 79: ELSE rc = 0; ! 80: FI ! 81: IF eof ORF mkfault ! 82: THEN return(-1); ! 83: ELSE return(rc); ! 84: FI ! 85: } ! 86: ! 87: readreal(a) ! 88: float *a; ! 89: { ! 90: REAL r; ! 91: INT rc; ! 92: REG INT fr; ! 93: REG CHAR c; ! 94: REG INT minus; ! 95: ! 96: IF (c=nextchar())=='-' ! 97: THEN minus=TRUE; c=readchar(); ! 98: ELSE minus=FALSE; ! 99: FI ! 100: r = 0; rc = 0; ! 101: IF digit(c) ! 102: THEN rc = 1; ! 103: REP r =* 10; r =+ c-'0'; PER digit(c=readchar()) DONE ! 104: FI ! 105: fr = 0; ! 106: IF c=='.' ! 107: THEN WHILE digit(c=readchar()) ! 108: DO r =* 10; r =+ c-'0'; fr++; OD ! 109: IF fr THEN rc = 1; FI ! 110: FI ! 111: WHILE fr-- DO r =/ 10; OD ! 112: IF minus THEN r = (-r); FI ! 113: IF rc THEN backspace(); FI ! 114: *a = r; ! 115: IF eof ORF mkfault ! 116: THEN return(-1); ! 117: ELSE return(rc); ! 118: FI ! 119: } ! 120: ! 121: reads(term, buffer) ! 122: char *term; char buffer[]; ! 123: { ! 124: register char c; ! 125: REG CHAR *ptr; ! 126: ! 127: ptr=buffer; ! 128: WHILE !any(c=readchar(),term) ANDF c ! 129: DO *ptr++ = c; OD ! 130: IF mkfault ORF eof ! 131: THEN return(-1); ! 132: ELIF ptr>buffer ! 133: THEN *ptr++=0; backspace(); ! 134: return(1); ! 135: ELSE return(0); ! 136: FI ! 137: } ! 138: ! 139: backspace() ! 140: { ! 141: IF readptr>readbuf ! 142: THEN readptr--; ! 143: FI ! 144: } ! 145: ! 146: any(c,s) ! 147: char c; ! 148: char *s; ! 149: { ! 150: register char a, b; ! 151: register char *p; ! 152: ! 153: p=s; a=c; ! 154: WHILE b = *p++ ! 155: DO IF b==c THEN return(1); FI OD ! 156: return(0); ! 157: } ! 158: ! 159: digit(c) ! 160: char c; ! 161: { ! 162: return(c>='0' ANDF c<='9'); ! 163: } ! 164: ! 165: lineended() ! 166: { ! 167: return(readptr==0 ORF *readptr==0 ORF peekchar()==NL); ! 168: } ! 169: ! 170: sign(a) ! 171: { ! 172: return(a<0?-1:(a!=0)); ! 173: } ! 174: ! 175: cf(as1, as2) ! 176: char *as1, *as2; ! 177: { ! 178: REG char *s1, *s2; ! 179: ! 180: s1 = as1; ! 181: s2 = as2; ! 182: WHILE *s1++ == *s2 ! 183: DO IF *s2++==0 ! 184: THEN return(0); ! 185: FI ! 186: OD ! 187: return(*--s1 - *s2); ! 188: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.