|
|
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.