|
|
1.1 ! root 1: /* Copyright Bell Telephone Laboratories Whippany, N.J. ! 2: ! 3: * ///////////////////////////////////// ! 4: * ///////////////////////////////////// ! 5: * ////////////// input.c ////////////// ! 6: * /// J. P. Hawkins WH X4610 8C-001 /// ! 7: * ///// Sun Aug 26 07:55:00 1979 ////// ! 8: * ///////////////////////////////////// ! 9: * ///////////////////////////////////// ! 10: * ! 11: * BASIC INPUT routine ! 12: * PART OF BITE ! 13: * ! 14: * MOD,J.P.Hawkins,3-FEB-81, String variable handling. ! 15: * MOD,J.P.Hawkins,21-FEB-81, fgetlin moved to seperate module ! 16: * to implement "if more" EOF test. ! 17: * MOD,J.P.Hawkins,28-FEB-81, added string variable array assignment. ! 18: */ ! 19: /* "@(#) input.c: V 1.8 9/9/81" */ ! 20: #include "bas.h" ! 21: __input() ! 22: { ! 23: register char i; ! 24: register char *ptr; /* pointer to program string */ ! 25: char *prncpy(); ! 26: int k; ! 27: int fildes; /* file designator for BASIC */ ! 28: extern char ascop[]; /*use for variable name string*/ ! 29: extern struct FILTBL filtbl[]; ! 30: char linbuf[LINMAX]; /*use for input string*/ ! 31: extern int stpflg; ! 32: int pflg; ! 33: double evalx(); ! 34: int filflg; ! 35: char field[20]; ! 36: int type; /* variable type */ ! 37: char *cptr; /* pointer for class to play with */ ! 38: char armpit[LINMAX]; /* gets buf */ ! 39: ptr = expr; /* point to command operand string */ ! 40: pflg=1; /*prompt flag*/ ! 41: filflg = 0; ! 42: if(*ptr == '_' && (*(ptr+1) >= '0' && *(ptr+1) <= '8')) ! 43: { ! 44: filflg = 1; ! 45: *ptr++; ! 46: fildes = *ptr - '1'; /* get BASIC file desig */ ! 47: *ptr++; ! 48: if(filtbl[fildes].mode != 'r') /* file must be open ! 49: for reading */ ! 50: { ! 51: error(inst.thing.linno, 37); /* FILE NOT OPEN FOR READ */ ! 52: return(-1); ! 53: } ! 54: } ! 55: while(stpflg == 0) ! 56: { ! 57: ptr=prncpy(ascop,ptr); /* get field betw. ',' */ ! 58: cptr=ascop; /* point to varname */ ! 59: type = class(&cptr, field); ! 60: if(pflg==1) ! 61: { ! 62: if(filflg) ! 63: fgetlin(armpit,fildes); ! 64: else ! 65: { ! 66: printf("?"); /* input PROMPT */ ! 67: gets(armpit); ! 68: } ! 69: k = 0; ! 70: pflg=0; ! 71: } ! 72: for(i=0;i<LINMAX;i++) ! 73: { ! 74: linbuf[i]=armpit[k++]; ! 75: if(linbuf[i] == '\0') ! 76: { ! 77: pflg=1; ! 78: linbuf[i]='\0'; ! 79: break; ! 80: } ! 81: if(linbuf[i] == ',') ! 82: { ! 83: linbuf[i]='\0'; ! 84: break; ! 85: } ! 86: if(linbuf[i] == ' ') ! 87: { ! 88: #ifdef STRINGS ! 89: if(type < STCLASS) ! 90: #endif ! 91: i--; ! 92: continue; ! 93: } ! 94: } ! 95: if(linbuf[0]=='s' && type < STCLASS) ! 96: { ! 97: stpflg=1; ! 98: return(0); ! 99: } ! 100: switch(type) ! 101: { ! 102: case VRCLASS: /* regular variable name */ ! 103: putvar(field, evalx(linbuf)); ! 104: break; ! 105: case VACLASS: /* subscripted variable class */ ! 106: aputvar(field, evalx(linbuf)); ! 107: break; ! 108: #ifdef STRINGS ! 109: case SVCLASS: ! 110: sputvar(field,linbuf); ! 111: break; ! 112: case SACLASS: ! 113: saputvar(field,linbuf); ! 114: break; ! 115: #endif ! 116: default: ! 117: break; ! 118: } ! 119: ! 120: if(*ptr == '\0') /* if end of string */ ! 121: { ! 122: if(pflg !=1) ! 123: while(armpit[k++] != '\n'); /* eat up extra */ ! 124: return(0); /* we're done */ ! 125: } ! 126: if(*ptr++ != ',') /* else it better be a , */ ! 127: { ! 128: error(inst.thing.linno, 13); /* delimiter error */ ! 129: return(-1); ! 130: } ! 131: } ! 132: return 0; ! 133: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.