|
|
1.1 ! root 1: /* Copyright Bell Telephone Laboratories Whippany, N.J. ! 2: ! 3: * *********************************************** ! 4: * *********************************************** ! 5: * *** READ INFORMATION FROM 'data' STATEMENTS *** ! 6: * ********* R. B. Drake WH 8C-005 X4163 ********* ! 7: * ********** Sun Aug 26 11:19:29 1979 *********** ! 8: * *********************************************** ! 9: * *********************************************** ! 10: * "read" locates the next item of information in a 'data' sttement ! 11: * and places it in variables defined by a list following the read ! 12: * command. ! 13: ! 14: */ ! 15: /* "@(#) read.c: V 1.4 3/4/81" */ ! 16: ! 17: #include "bas.h" ! 18: static char *daptr; ! 19: static char *itmptr; ! 20: extern int atad; ! 21: double evalx(); ! 22: char *prncpy(); ! 23: int arflg; ! 24: getnext() ! 25: { ! 26: while(fetch(-1, &daptr) == 0) ! 27: { ! 28: if(inst.thing.opcode.lobyte == atad) ! 29: { ! 30: itmptr = expr; ! 31: return(0); ! 32: } ! 33: } ! 34: error(inst.thing.linno,33); ! 35: return(-1); ! 36: } ! 37: __read() ! 38: { ! 39: char *ptr; ! 40: int flg; ! 41: #ifdef STRINGS ! 42: char *savptr; ! 43: char field[40]; ! 44: char result[80]; ! 45: #endif ! 46: char ascop[80],ascno[80]; ! 47: ptr = expr; ! 48: if(daptr == 0) ! 49: { ! 50: if(fetch(0, &daptr) != 0) ! 51: { ! 52: error(inst.thing.linno,33); ! 53: return(0); ! 54: } ! 55: if(inst.thing.opcode.lobyte == atad) ! 56: itmptr = expr; ! 57: else ! 58: if(getnext() < 0) ! 59: return(0); ! 60: } ! 61: while(1) ! 62: { ! 63: flg = 0; ! 64: ptr = prncpy(ascop,ptr); ! 65: if(arflg == 1) ! 66: flg = 1; ! 67: switch(*itmptr) ! 68: { ! 69: case '\0': ! 70: if(getnext() < 0) ! 71: return(0); ! 72: break; ! 73: case ',': ! 74: itmptr++; ! 75: if(*itmptr == '\0') ! 76: if(getnext() < 0) ! 77: return(0); ! 78: } ! 79: itmptr = prncpy(ascno,itmptr); ! 80: #ifdef STRINGS ! 81: savptr = ascno; ! 82: if(class(&savptr,field) < STCLASS) ! 83: { ! 84: #endif ! 85: if(flg==1) ! 86: aputvar(ascop,evalx(ascno)); ! 87: else ! 88: putvar(ascop,evalx(ascno)); ! 89: #ifdef STRINGS ! 90: } ! 91: else ! 92: { ! 93: evals(ascno,result); ! 94: savptr=ascop; ! 95: if(class(&savptr,field) == SACLASS) ! 96: saputvar(field,result); ! 97: else ! 98: sputvar(field,result); ! 99: } ! 100: #endif ! 101: if(*ptr++ == '\0') ! 102: return(0); ! 103: } ! 104: } ! 105: restore() ! 106: { ! 107: daptr = 0; ! 108: return(0); ! 109: } ! 110: char *prncpy(to,from) ! 111: char register *to,*from; ! 112: { ! 113: int prncnt,i; ! 114: prncnt = 0; ! 115: arflg = 0; ! 116: for(i=0;*from != '\0';i++) ! 117: { ! 118: if(*from == ',' && prncnt == 0) break; ! 119: to[i] = *from++; ! 120: switch(to[i]) ! 121: { ! 122: case '(': ! 123: prncnt += 1; ! 124: arflg = 1; ! 125: break; ! 126: case ')': ! 127: prncnt -= 1; ! 128: } ! 129: } ! 130: to[i] = '\0'; ! 131: return(from); ! 132: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.