|
|
1.1 ! root 1: /*% cc -c -O % ! 2: */ ! 3: #include "vars.h" ! 4: bufinit(n) ! 5: int *n; ! 6: { ! 7: struct buffer *bufp; ! 8: register *fend; ! 9: fend=n; ! 10: for(bufp=buffer;bufp!=buffer+NBUFS;bufp++){ ! 11: bufp->zero=fend; ! 12: bufp->dot=fend; ! 13: bufp->dol=fend; ! 14: bufp->cflag = FALSE; ! 15: } ! 16: } ! 17: chngbuf(bb) ! 18: int bb; ! 19: { ! 20: syncbuf(); ! 21: newbuf(bb); ! 22: savedfile = FILE(curbuf-buffer); ! 23: } ! 24: newbuf(bb){ ! 25: curbuf = buffer+bb; ! 26: zero=curbuf->zero; ! 27: dot=curbuf->dot; ! 28: dol=curbuf->dol; ! 29: cflag = curbuf->cflag; ! 30: } ! 31: fixbufs(n) ! 32: register n; ! 33: { ! 34: register struct buffer *bufp; ! 35: lock++; ! 36: for(bufp=curbuf+1;bufp!=buffer+NBUFS;bufp++){ ! 37: bufp->zero+=n; ! 38: bufp->dot+=n; ! 39: bufp->dol+=n; ! 40: } ! 41: unlock(); ! 42: } ! 43: syncbuf() ! 44: { ! 45: /* curbuf->zero = zero; /* we never assign to it, so needn't save */ ! 46: curbuf->dot=dot; ! 47: curbuf->dol=dol; ! 48: curbuf->cflag = cflag!=FALSE; /* Normalize to fit in a char */ ! 49: } ! 50: error(code) ! 51: { ! 52: extern savint; /* error during a ! > < | ?? */ ! 53: unlock(); ! 54: if(code){ ! 55: for(;stackp != stack ;--stackp) ! 56: if(stackp->type == BUF || stackp->type == STRING){ ! 57: putchar('?'); ! 58: if(stackp->type == BUF){ ! 59: putchar('b'); ! 60: putchar(bname[stackp->bufptr - buffer]); ! 61: putlong((long)stackp->lineno); ! 62: putchar('.'); ! 63: }else{ ! 64: putchar('z'); ! 65: putchar(bname[stackp->lineno]); ! 66: } ! 67: putlong((long)stackp->charno); ! 68: putchar(' '); ! 69: } ! 70: putchar('?'); ! 71: putchar(lasterr=(code&~FILERR)); ! 72: if(code&FILERR){ ! 73: putchar(' '); ! 74: putl(string[FILEBUF].str); ! 75: } else ! 76: putchar('\n'); ! 77: } ! 78: if(eflag && code) ! 79: exit(code); ! 80: nestlevel = 0; ! 81: listf = FALSE; ! 82: gflag = FALSE; ! 83: biggflag = FALSE; ! 84: stackp = stack; ! 85: peekc = 0; ! 86: if(code && code!='?'){ /* if '?', system cleared tty input buf */ ! 87: while(lastttyc!='\n' && lastttyc!=EOF){ ! 88: getchar(); ! 89: } ! 90: } ! 91: lseek(0, 0L, 2); ! 92: if (io > 0) { ! 93: close(io); ! 94: io = -1; ! 95: cflag = TRUE; /* well, maybe not, but better be safe */ ! 96: } ! 97: appflag=0; ! 98: if(savint>=0){ ! 99: signal(SIGINT, savint); ! 100: savint= -1; ! 101: } ! 102: reset(); ! 103: } ! 104: init() ! 105: { ! 106: register char *p; ! 107: register pid; ! 108: lock++; ! 109: close(tfile); ! 110: tfname = "/tmp/qxxxxx"; ! 111: pid = getpid(); ! 112: for (p = &tfname[11]; p > &tfname[6];) { ! 113: *--p = (pid%10) + '0'; ! 114: pid /= 10; ! 115: } ! 116: close(creat(tfname, 0600)); ! 117: tfile = open(tfname, 2); ! 118: tfile2 = open(tfname, 2); ! 119: ioctl(tfile, FIOCLEX, 0); ! 120: ioctl(tfile2, FIOCLEX, 0); ! 121: brk(fendcore); ! 122: bufinit(fendcore); ! 123: newbuf(0); ! 124: lastdol=dol; ! 125: endcore = fendcore - 2; ! 126: stackp=stack; ! 127: stackp->type=TTY; ! 128: unlock(); ! 129: } ! 130: comment() ! 131: { ! 132: register c, mesg; ! 133: ! 134: c = getchar(); ! 135: mesg = 0; ! 136: if(c == '\"') { ! 137: mesg++; ! 138: c = getchar(); ! 139: } ! 140: while(c != '\n' && c != '\"') { ! 141: if(mesg) ! 142: putchar(c); ! 143: c = getchar(); ! 144: } ! 145: if(mesg) { ! 146: if(c == '\n') ! 147: putchar(c); ! 148: flush(); ! 149: } ! 150: } ! 151: abs(n) ! 152: register n; ! 153: { ! 154: return(n<0?-n:n); ! 155: } ! 156: /* ! 157: * Slow, but avoids garbage collection ! 158: */ ! 159: settruth(t) ! 160: register t; ! 161: { ! 162: if(atoi(string[TRUTH].str) != t) ! 163: numset(TRUTH, t); ! 164: } ! 165: setcount(c) ! 166: register c; ! 167: { ! 168: if(atoi(string[COUNT].str) != c) ! 169: numset(COUNT, c); ! 170: } ! 171: truth(){ ! 172: return(atoi(string[TRUTH].str) != FALSE); ! 173: } ! 174: modified(){ ! 175: cflag=TRUE; ! 176: eok=FALSE; ! 177: qok=FALSE; ! 178: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.