|
|
1.1 root 1: #include <signal.h>
2: #include <stdio.h>
3:
4: /* Copyright Bell Telephone Laboratories Whippany, N.J.
5:
6: * *************************************
7: * *************************************
8: * ********* BITE HEADER FILE **********
9: * **** R. B. Drake WH 8C-005 X4163 ****
10: * **************** and ////////////////
11: * /// J. P. Hawkins WH X4610 8C-001 ///
12: * ///// Tue Aug 28 08:04:33 1979 //////
13: * /////////////////////////////////////
14: * /////////////////////////////////////
15:
16: */
17: /* "@(#) bas.h: V 1.6 3/4/81" */
18: /*
19: * MOD for Strings, J.P.Hawkins, 31-JAN-81
20: */
21:
22: #define STRINGS /* Comment out if string handling to be omitted */
23: /*
24: * REMOVE REMARK DEVICES IF COMPILING FOR LSX
25: */
26:
27: /*
28: * classification codes for algebraic expression fields
29: * as returned by routine class()
30: */
31: #ifdef LSX
32: #define PGSIZ 256
33: #define PREC sizeof(float)
34: #endif
35: #ifndef LSX
36: #define PREC sizeof(double)
37: #define PGSIZ 1023 /* cannot exceed 1023 because "loader ld"
38: calculates 1024*32=MINUS it doesn't
39: handle 2's compliment correctly 32K is
40: enough anyway */
41: #endif
42: #define NMPAG 32
43: #define NOMAX 10 /* max size of ascii line number buffer */
44: #define OPMAX 10 /* max size of ascii operation code buffer */
45: #define LINMAX 80 /* max size of a single line buffer */
46: #define MAXDIM 10 /* maximum number of dimensions of array */
47: #define MAXFREE 40 /* Max num of remembered freed spaces for strings */
48:
49: /* These constants used for FIELD TYPE identification by class() */
50:
51: #define OPCLASS 1 /* operator field ^ * / + - ( */
52: #define NMCLASS 2 /* numeric field */
53: #define VRCLASS 3 /* variable name */
54: #define VACLASS 5 /* variable array name */
55: #define FNCLASS 6 /* function name */
56: #define STCLASS 7 /* STRING class */
57: #define SVCLASS 8 /* STRING variable class */
58: #define SFCLASS 9 /* STRING function class */
59: #define SACLASS 10 /* STRING array class */
60:
61: /* string freelist */
62:
63: struct FREELIST {
64: int size; /* size of memory void left by removed str */
65: char *fraddr; /* address of void */
66: };
67:
68: /* command table entry template */
69:
70: struct COMMAND {
71: char *cmdtxt; /* pointer to command test string */
72: int (*function)(); /* pointer to correstponding service rtn */
73: };
74:
75: /* line number and command code structure aligned with 4 bytes for storage*/
76: union bascmd
77: {
78: struct
79: {
80: short linno;
81: struct
82: {
83: char hibyte;
84: char lobyte;
85: } opcode;
86: }thing;
87: char byte[4];
88: };
89:
90: struct pages
91: {
92: int maxlin; /* max line number in a 512 byte page */
93: char *begin; /* pointer to the start of the first line on a page */
94: };
95:
96: /*
97: * FILE SLOT TABLE
98: */
99: struct FILTBL {
100: char mode; /* 'r', 'w' or 'a' */
101: int fildes; /* system assigned "file descriptor" */
102: };
103: /* variable byte alignment for "no holes" storage */
104:
105: union VARIABLE {double var ; char var4th[PREC];};
106:
107: extern union bascmd inst;
108: extern union bascmd local;
109: extern char linbuf[];
110: extern char *expr;
111: extern char txtbuf[];
112: extern char *linptr;
113: extern struct pages index[];
114: extern union VARIABLE varbyts;
115: extern struct COMMAND cmdtbl[];
116: extern char *curptr,*lbdptr;
117: extern int pg,size;
118: /*
119: * //////// BASIC ROUTINE DISPATCHER ////////
120: *
121: * it is really a call indirect for table driven calls.
122: * calling format:
123: * bascall(code);
124: *
125: * where: code = legal BASIC PSEUDO opcode
126: */
127: #define bascall(opcode) ((*cmdtbl[opcode].function)(0))
128: /*
129: *
130: * //// RETURN POINTER TO COMMAND STRING FOR GIVEN OPCODE ////
131: *
132: *
133: * calling format:
134: * ptr = decode(opcode);
135: *
136: * where: ptr = returned pointer to command string
137: * opcode = VALID opcode (integer value)
138: * the opcode is assumed to be valid since
139: * it was "compiled" from the same code referenced
140: *
141: */
142: #define decode(opcode) (cmdtbl[opcode].cmdtxt)
143: /*
144: #define logten(x) ((x) <= 0) ? 0. : (.4342944819 * log(x)))
145: */
146:
147: /* jimmy added */
148:
149: /*
150: * symbol table pointers
151: */
152: char *symtab[26][11];
153: char *asymtab[26][11];
154: char *ssymtab[26][11];
155: char *sasymtab[26][11];
156:
157: extern char scratch[];
158: extern int endfcnt;
159: extern char bpath[];
160: extern int singflg;
161: extern int tv;
162: extern int rem;
163: extern int _sub;
164: extern int tel;
165: extern int stpflg;
166: extern int autflg,aut,inc;
167: extern moreflag[];
168: extern struct FILTBL filtbl[];
169: extern char _string[];
170: extern int pg;
171: extern char temp[];
172: extern int start,finish;
173: extern int line;
174: extern int _comflg; /* common flag */
175: extern int stpflg;
176: extern char *eoexpr;
177: extern int stpflg; /* stop flag for fatal error */
178: char *hicore; /* highest free user location pointer */
179: extern struct FREELIST freelist[];
180: extern char filnam[];
181: extern char *curptr;
182: extern int singflg;
183: extern int rof;
184: extern int singst;
185: extern int nxt,stpflg;
186: extern char filnam[];
187: extern int singflg;
188: extern int singst;
189: extern char *ptr;
190: extern int stpflg;
191: extern int start;
192: extern char *ptr,*curptr;
193: extern int esle,fidne; /* codes for "else" and "endif" */
194: extern char *eoexpr; /* pointer to char after eval expr */
195: extern char ascop[]; /*use for variable name string*/
196: extern int stpflg;
197: extern char linbuf[];
198: extern char linbuf[];
199: extern int aut,autflg,inc;
200: extern char *lbdptr,*curptr;
201: extern char *keyword[];
202: extern int start,finish;
203: extern char filnam[];
204: extern char txtbuf[];
205: extern int stpflg;
206: extern struct FILTBL filtbl[];
207: extern int ticks; /* LTC 1/60th sec counter */
208: extern int atad;
209: extern int no;
210: extern char temp[];
211: extern char *endob;
212: extern int _fi,_togo,subog;
213: extern int tsil,tospgo;
214: extern int start,finish;
215: extern char _string[];
216: extern int stopl();
217: extern int singst;
218: extern int stpflg;
219: extern int endfcnt; /* structured "if" nest count */
220: extern int forflg; /* nested for count */
221: extern int bflag,cflag; /* break count */
222: extern int quit();
223: extern int _comflg; /* common flag */
224: extern char filnam[];
225: extern char linbuf[];
226: extern char _string[];
227: extern int stpflg;
228: extern char *ptr;
229: extern int subog;
230: extern int stpflg;
231: extern char _string[];
232: extern int bflag,cflag; /* break & continue flag */
233: extern int esle,fidne; /* else and endif codes */
234: extern int _togo; /* "goto" code */
235: extern int _fi;
236: extern int stpflg; /* stop flag */
237: extern char *ptr;
238: extern char txtbuf[];
239: #define strcat Strcat
240: char *strcat(), *carcat();
241: char *expand();
242: char *prncpy();
243: #define pause Pause
244: #define rand Rand
245: #define srand Srand
246: long lseek();
247: char *strcpy();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.