|
|
1.1 ! root 1: #include "head.h" ! 2: #include <a.out.h> ! 3: #include "cdefs.h" ! 4: #include <stdio.h> ! 5: struct user u; ! 6: ! 7: char * ! 8: readline(f) ! 9: FILE *f; { ! 10: static char buff[128]; ! 11: ! 12: register char *p; ! 13: register int i; ! 14: ! 15: p = buff; ! 16: do { ! 17: if ((i = getc(f)) == EOF) { ! 18: *p++ = '\004'; ! 19: *p = '\n'; ! 20: } ! 21: else *p = i; ! 22: } while (*p++ != '\n'); ! 23: ! 24: return(buff); ! 25: } ! 26: ! 27: char * ! 28: cpname(p, q) ! 29: char *p, *q; { ! 30: while(varchar(*q) || number(*q)) ! 31: *p++ = *q++; ! 32: *p = '\0'; ! 33: return(q); ! 34: } ! 35: ! 36: char * ! 37: cpall(p, q) ! 38: char *p, *q; { ! 39: while (*q != '\n') ! 40: *p++ = *q++; ! 41: *p = '\0'; ! 42: return(q); ! 43: } ! 44: ! 45: eqany(c, s) ! 46: char c, *s; { ! 47: while(*s != '\0') ! 48: if (c == *s++) return(1); ! 49: return(0); ! 50: } ! 51: ! 52: error(s) ! 53: char *s; { ! 54: printf("%s\n", s); ! 55: } ! 56: ! 57: char * ! 58: cpstr(p,q) ! 59: char *p, *q; { ! 60: do { ! 61: *p++ = *q++; ! 62: } while (*q != '\0'); ! 63: *p = '\0'; ! 64: } ! 65: L_INT ! 66: round(a,b) ! 67: REG L_INT a, b; ! 68: { ! 69: REG L_INT w; ! 70: w = (a/b)*b; ! 71: IF a!=w THEN w += b; FI ! 72: return(w); ! 73: } ! 74: ! 75: /* error handling */ ! 76: ! 77: chkerr() ! 78: { ! 79: IF errflg ORF mkfault ! 80: THEN error(errflg); ! 81: longjmp(env, 0); ! 82: FI ! 83: } ! 84: ! 85: eqstr(s1, s2) ! 86: REG STRING s1, s2; ! 87: { ! 88: REG STRING es1; ! 89: if (s2 == (STRING) -1) return(0); ! 90: es1 = s1+8; ! 91: WHILE *s1++ == *s2 ! 92: DO IF *s2++ == 0 ORF s1>=es1 ! 93: THEN return(1); ! 94: FI ! 95: OD ! 96: return(0); ! 97: } ! 98: ! 99: longseek(f, a) ! 100: L_INT a; ! 101: { ! 102: return(lseek(f,(long) a,0) != -1); ! 103: } ! 104: ! 105: ! 106: /* descriptor format to length */ ! 107: dtol(d) ! 108: char d; { ! 109: switch(d) { ! 110: ! 111: case 'a': ! 112: case 's': ! 113: return(0); ! 114: ! 115: case 'b': ! 116: case 'c': ! 117: return(1); ! 118: ! 119: case 'h': ! 120: return(2); ! 121: ! 122: case 'l': ! 123: case 'f': ! 124: return(4); ! 125: ! 126: case 'g': ! 127: return(8); ! 128: ! 129: default: ! 130: return(WORDSIZE); ! 131: } ! 132: } ! 133: ! 134: /* ! 135: * checks equality of pattern pat with str, ! 136: * assuming str is tructaed at length 8 ! 137: */ ! 138: eqpat(pat, str) ! 139: char *pat, *str; { ! 140: return(eqpatr(pat, str, 0)); ! 141: } ! 142: ! 143: eqpatr(pat, str, cnt) ! 144: char *pat, *str; { ! 145: register int i; ! 146: register char p, s; ! 147: ! 148: p = pat[0]; ! 149: s = str[0]; ! 150: if (cnt == 8) return(1); ! 151: if (p == '?') { ! 152: if (s == '\0') return(0); ! 153: return(eqpatr(pat+1, str+1, cnt+1)); ! 154: } ! 155: if (p == '*') { ! 156: if (pat[1] == '\0') return(1); ! 157: for(i=1; i<8-cnt; i++) { ! 158: if (eqpatr(pat+1, str+i, cnt+i)) return(1); ! 159: if (str[i] == '\0') return(0); ! 160: } ! 161: return(0); ! 162: } ! 163: if ((eqany(p, ".[->") || p == '\0') && s == '\0') return(1); ! 164: if (p != s) return(0); ! 165: return(eqpatr(pat+1, str+1, cnt+1)); ! 166: } ! 167: ! 168: /* gets indirect address for pointers and subscripts */ ! 169: getindir(class, addr, type) ! 170: ADDR addr; { ! 171: if (ISARY(type)) return(addr); ! 172: if (class == N_RSYM) ! 173: return(*(ADDR *)(((ADDR) &u) + R0 + (WORDSIZE)*addr)); ! 174: return(getval(addr, 'd')); ! 175: } ! 176: ! 177: long ! 178: readint(p) ! 179: char **p; { ! 180: int sign; ! 181: ! 182: if (**p == '-') { ! 183: sign = -1; ! 184: (*p)++; ! 185: } else { ! 186: sign = 1; ! 187: } ! 188: if (**p == '0') { ! 189: (*p)++; ! 190: if (**p == 'x' || **p == 'X') { ! 191: (*p)++; ! 192: return(sign * rint(p, 16, hexdigit, hexconv)); ! 193: } ! 194: else return(sign * rint(p, 8, octdigit, octconv)); ! 195: } ! 196: else return(sign * rint(p, 10, decdigit, decconv)); ! 197: } ! 198: ! 199: long ! 200: rint(p, base, digit, conv) ! 201: char **p; ! 202: int (*digit)(), (*conv)(); { ! 203: long value; ! 204: ! 205: value = 0; ! 206: while ((*digit)(**p)) value = base*value + (*conv)(*(*p)++); ! 207: return(value); ! 208: } ! 209: ! 210: octdigit(c) ! 211: char c; { ! 212: return(c >= '0' && c <= '7'); ! 213: } ! 214: ! 215: octconv(c) ! 216: char c; { ! 217: return(c - '0'); ! 218: } ! 219: ! 220: decdigit(c) ! 221: char c; { ! 222: return(c >= '0' && c <= '9'); ! 223: } ! 224: ! 225: decconv(c) ! 226: char c; { ! 227: return(c - '0'); ! 228: } ! 229: ! 230: hexdigit(c) ! 231: char c; { ! 232: return((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || ! 233: (c >= 'A' && c <= 'F')); ! 234: } ! 235: ! 236: hexconv(c) ! 237: char c; { ! 238: if (c >= '0' && c <= '9') return(c - '0'); ! 239: if (c >= 'a' && c <= 'f') return(c - 'a' + 10); ! 240: if (c >= 'A' && c <= 'F') return(c - 'A' + 10); ! 241: error("hex conversion error"); ! 242: return(0); ! 243: } ! 244: ! 245: /* decodes number, character or variable */ ! 246: long ! 247: argvalue(p) ! 248: char *p; { ! 249: register char ch; ! 250: register long value; ! 251: register ADDR j; ! 252: char var[30]; ! 253: ! 254: ch = *p; ! 255: if (ch == '\'') { ! 256: value = *(p+1); ! 257: } else if ((ch >= '0' && ch <= '9') || ch == '-') { ! 258: value = readint(&p); ! 259: } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ! 260: ch == '_') { ! 261: cpname(var, p); ! 262: j = varaddr(curproc()->pname, var); ! 263: if (j == -1) { ! 264: printf("Unknown variable: %s\n", argsp); ! 265: return(-1); ! 266: } ! 267: value = getval(j, typetodesc(sl_type, 0)[0]); ! 268: do { ! 269: p++; ! 270: } while (varchar(*p) || number(*p)); ! 271: } ! 272: return(value); ! 273: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.