|
|
1.1 ! root 1: /* Copyright Bell Telephone Laboratories Whippany, N.J. ! 2: ! 3: * *********************************** ! 4: * *********************************** ! 5: * ***** LINE NUMBER RESEQUENCER ***** ! 6: * *** R. B. Drake WH 8C-005 X4163 *** ! 7: * **** Sun Aug 26 11:23:45 1979 ***** ! 8: * *********************************** ! 9: * *********************************** ! 10: ! 11: */ ! 12: /* "@(#) reseq.c: V 1.1 12/21/80" */ ! 13: ! 14: /* resequence the program buffer */ ! 15: #include "bas.h" ! 16: extern int no; ! 17: extern char temp[]; ! 18: extern char *endob; ! 19: extern int _fi,_togo,subog; ! 20: extern int tsil,tospgo; ! 21: extern int start,finish; ! 22: extern char _string[]; ! 23: static struct REFP ! 24: { ! 25: int whoref; ! 26: int refwhat; ! 27: int newref; ! 28: } *refptr,*savit; ! 29: static int newnum; ! 30: breseq(begin,end) ! 31: int begin,end; ! 32: { ! 33: FILE *fopen(),*fp; ! 34: char *lin,*from,*to,*lp,*ptr,*prncpy(),*hold; ! 35: #ifdef LSX ! 36: static char nam[] = {"/tmp/tmp.b"}; ! 37: #endif ! 38: #ifndef LSX ! 39: static char nam[] = {"tmp.b"}; ! 40: #endif ! 41: int i; ! 42: lnpars(); /* get start and finish. finish will be increment */ ! 43: if(start==0) start=10; ! 44: if(finish==0 || finish == 32767) finish = 10; ! 45: expunge(); ! 46: refptr = (struct REFP *)endob; ! 47: newnum=0; ! 48: if(fetch(0,&lbdptr) < 0) /* get first line */ ! 49: { ! 50: error(0,5); ! 51: return(-1); ! 52: } ! 53: if(inst.thing.linno < begin || inst.thing.linno > end) ! 54: --newnum; ! 55: check(begin,end); /* if it references a line#, record it */ ! 56: while(fetch(-1,&lbdptr) == 0) /* search the remaining lines */ ! 57: { ! 58: if(inst.thing.linno >= begin && inst.thing.linno <= end) ! 59: newnum++; ! 60: check(begin,end); ! 61: } ! 62: fetch(begin,&lbdptr); ! 63: replace(); ! 64: clear(); ! 65: while(fetch(-1,&lbdptr) != -1) ! 66: { ! 67: if(inst.thing.linno > end) break; ! 68: replace(); ! 69: } ! 70: update(); ! 71: if(begin != 0) ! 72: { ! 73: fp=fopen(nam,"w"); ! 74: fetch(0,&lbdptr); ! 75: outit(fp); ! 76: while(fetch(-1,&lbdptr) == 0) ! 77: outit(fp); ! 78: fclose(fp); ! 79: onew(); ! 80: fp=fopen(nam,"r"); ! 81: while(bed(fp) == 0); ! 82: fclose(fp); ! 83: #ifndef LSX ! 84: unlink(nam); ! 85: #endif ! 86: } ! 87: while(refptr != (struct REFP *)endob) ! 88: { ! 89: fetch(refptr->whoref,&lbdptr); ! 90: lin = expand(); ! 91: if(refptr->refwhat < 0) ! 92: { ! 93: strcpy(temp,lin); /* put line refrences into temp */ ! 94: ptr=_string; ! 95: lp=temp; ! 96: i= -1*refptr->refwhat; ! 97: while(1) ! 98: { ! 99: hold=prncpy(ptr,lp); ! 100: if(atoi(ptr) == i) break; ! 101: if(*hold != ',') break; ! 102: lp= ++hold; ! 103: } ! 104: sprintf(ptr,"%d",refptr->newref); ! 105: from= temp; ! 106: to=lin; ! 107: while(*from != '\0') ! 108: { ! 109: if(from == lp) ! 110: { ! 111: while(*from != ',' && *from != '\0') ! 112: from++; ! 113: while(*ptr != '\0') ! 114: *to++ = *ptr++; ! 115: } ! 116: else ! 117: *to++ = *from++; ! 118: } ! 119: *to = '\0'; ! 120: sprintf(_string,"%d %s %s\n",inst.thing.linno,decode(inst.thing.opcode.lobyte),linbuf); ! 121: bed((FILE *)0); ! 122: } ! 123: else ! 124: error(refptr->whoref,0); ! 125: refptr++; ! 126: } ! 127: return(0); ! 128: } ! 129: check(begin,end) ! 130: int begin,end; ! 131: { ! 132: char *lin; ! 133: int oldlin; ! 134: char buffer[80]; ! 135: if(cklist(inst.thing.opcode.lobyte)) ! 136: { ! 137: lin = expand(); ! 138: if(!num(*lin)) return(0); ! 139: while(*lin != '\0') ! 140: { ! 141: lin = prncpy(buffer,lin); ! 142: oldlin=atoi(buffer); ! 143: if(oldlin < begin || oldlin > end) return(0); ! 144: --refptr; ! 145: if(inst.thing.linno >= begin && inst.thing.linno <= end) ! 146: refptr->whoref = start + newnum * finish; ! 147: else refptr->whoref = inst.thing.linno; ! 148: refptr->refwhat = oldlin; ! 149: if(*lin == '\0') break; ! 150: lin++; ! 151: } ! 152: } ! 153: return(0); ! 154: } ! 155: cklist(code) ! 156: int code; ! 157: { ! 158: int i; ! 159: static int *list[] = ! 160: { &_fi, ! 161: &_togo, ! 162: &subog, ! 163: &tsil, ! 164: &no, ! 165: &tospgo, ! 166: 0 }; ! 167: for(i=0;list[i] != 0;i++) ! 168: { ! 169: if(code == *list[i]) ! 170: return(1); ! 171: } ! 172: return(0); ! 173: } ! 174: replace() ! 175: { ! 176: local.thing.linno=start; ! 177: start += finish; ! 178: *curptr++ = local.byte[0]; ! 179: *curptr++ = local.byte[1]; ! 180: savit = refptr; ! 181: while(refptr != (struct REFP *)endob) ! 182: { ! 183: if(inst.thing.linno == refptr->refwhat) ! 184: { ! 185: refptr->refwhat *= -1; ! 186: refptr->newref = local.thing.linno; ! 187: } ! 188: refptr++; ! 189: } ! 190: refptr=savit; ! 191: return(0); ! 192: } ! 193: reseq() ! 194: { ! 195: breseq(0,32767); ! 196: } ! 197: mov() ! 198: { ! 199: extern char *expr; ! 200: char *prncpy(),ary[6]; ! 201: int begin,end; ! 202: expr=prncpy(ary,expr); ! 203: if(*expr++ != ',') ! 204: { ! 205: error(0,42); ! 206: return(0); ! 207: } ! 208: begin=atoi(ary); ! 209: expr=prncpy(ary,expr); ! 210: if(*expr++ != ',') ! 211: { ! 212: error(0,42); ! 213: return(0); ! 214: } ! 215: end=atoi(ary); ! 216: breseq(begin,end); ! 217: return 0; ! 218: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.