|
|
1.1 ! root 1: /* Copyright Bell Telephone Laboratories Whippany, N.J. ! 2: ! 3: * ///////////////////////////////////// ! 4: * ///////////////////////////////////// ! 5: * //////////// UNTILCOD.C ///////////// ! 6: * /// J. P. Hawkins WH X4610 8C-001 /// ! 7: * ///// Mon Sep 17 23:06:13 1979 ////// ! 8: * ///////////////////////////////////// ! 9: * ///////////////////////////////////// ! 10: ! 11: * Either execute or skip command lines until specified code (endcod) ! 12: * is reached. ! 13: * If execflg = 1 then execute the command lines, ! 14: * If execflg = 0 then skip over the command lines. ! 15: * This routine terminates if: ! 16: * endcod is encountered ! 17: * end of text is encountered ! 18: * error is encountered ! 19: * ! 20: * This routine is used for the structured "if" for skipping ! 21: * or executing until the "else" or "endif" is encountered. ! 22: */ ! 23: /* "@(#) untilcod.c: V 1.1 12/21/80" */ ! 24: ! 25: #include "bas.h" ! 26: extern int bflag,cflag; /* break & continue flag */ ! 27: extern int esle,fidne; /* else and endif codes */ ! 28: extern int _togo; /* "goto" code */ ! 29: int endfcnt; /* nest count */ ! 30: extern int _fi; ! 31: ! 32: untilcod(endcod,execflg) ! 33: int endcod; /* termination code */ ! 34: int execflg; /* execution flag */ ! 35: { ! 36: extern int stpflg; /* stop flag */ ! 37: extern char *ptr; ! 38: ! 39: if(bflag || cflag) /* if break flag on */ ! 40: { ! 41: endfcnt = 0; /* clean up nest count */ ! 42: return(0); /* UNRAVEL */ ! 43: } ! 44: while(fetch(-1,&ptr) == 0 && stpflg == 0) ! 45: { ! 46: /* ! 47: * ALWAYS terminate if endif encountered and nest = 0 ! 48: */ ! 49: if(inst.thing.opcode.lobyte == fidne && endfcnt == 0) ! 50: break; ! 51: if(execflg) /* EXECUTION PART */ ! 52: { ! 53: if(inst.thing.opcode.lobyte == _togo) ! 54: { ! 55: error(inst.thing.linno, 46); /* GOTO NOT ALLOW */ ! 56: return(-1); ! 57: } ! 58: /* ! 59: * IF TERMINATION CODE REACHED ! 60: */ ! 61: if(inst.thing.opcode.lobyte == endcod) ! 62: break; /* break out */ ! 63: if(bascall(inst.thing.opcode.lobyte) != 0) ! 64: { ! 65: return(-1); ! 66: } ! 67: if(bflag || cflag) /* if break got set */ ! 68: { ! 69: endfcnt = 0; /* zero nest count */ ! 70: return(0); /* UNRAVEL */ ! 71: } ! 72: } ! 73: else /* NON EXECUTION PART */ ! 74: { ! 75: if(inst.thing.opcode.lobyte == fidne && endfcnt > 0) ! 76: { ! 77: endfcnt--; /* dec endif nest count */ ! 78: continue; /* not last "if" when just 0 */ ! 79: } ! 80: else if(inst.thing.opcode.lobyte == _fi) ! 81: { ! 82: endfcnt++; ! 83: } ! 84: if(inst.thing.opcode.lobyte == endcod && endfcnt == 0) ! 85: break; ! 86: } ! 87: } ! 88: return(0); ! 89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.