|
|
1.1 root 1: /* @(#)defs 1.3 (Berkeley) 5/18/81 */
2: #include <stdio.h>
3:
4: #ifdef unix
5: # include <ctype.h>
6: #endif
7:
8: #include "ftypes.h"
9: #include "defines.h"
10: #include "machdefs.h"
11:
12: #define VL 16
13:
14: #define MAXDIM 20
15: #define MAXINCLUDES 10
16: #define MAXLITERALS 30
17: #define MAXCTL 20
18: #define MAXHASH 1009
19: #define MAXSTNO 401
20: #define MAXEXT 200
21: #define MAXEQUIV 150
22: #define MAXLABLIST 256
23: #define MAXDEBUGFLAG 20
24:
25: typedef union Expression *expptr;
26: typedef union Taggedblock *tagptr;
27: typedef struct Chain *chainp;
28: typedef struct Addrblock *Addrp;
29: typedef struct Tempblock *Tempp;
30: typedef struct Constblock *Constp;
31: typedef struct Exprblock *Exprp;
32: typedef struct Nameblock *Namep;
33:
34: extern FILEP infile;
35: extern FILEP diagfile;
36: extern FILEP textfile;
37: extern FILEP asmfile;
38: extern FILEP initfile;
39: extern long int headoffset;
40:
41: extern char token [ ];
42: extern int toklen;
43: extern int lineno;
44: extern char *infname;
45: extern int needkwd;
46: extern struct Labelblock *thislabel;
47:
48: extern int maxctl;
49: extern int maxequiv;
50: extern int maxstno;
51: extern int maxhash;
52: extern int maxext;
53:
54: extern flag profileflag;
55: extern flag optimflag;
56: extern flag nowarnflag;
57: extern flag ftn66flag;
58: extern flag no66flag;
59: extern flag noextflag;
60: extern flag shiftcase;
61: extern flag undeftype;
62: extern flag shortsubs;
63: extern flag onetripflag;
64: extern flag checksubs;
65: extern flag debugflag[];
66: extern flag equivdcl;
67: extern int nerr;
68: extern int nwarn;
69: extern int ndata;
70:
71: extern int parstate;
72: extern flag headerdone;
73: extern int blklevel;
74: extern flag saveall;
75: extern flag substars;
76: extern int impltype[ ];
77: extern int implleng[ ];
78: extern int implstg[ ];
79:
80: extern int tyint;
81: extern int tylogical;
82: extern ftnint typesize[];
83: extern int typealign[];
84: extern int procno;
85: extern int proctype;
86: extern char * procname;
87: extern int rtvlabel[ ];
88: extern int fudgelabel; /* to confuse the pdp11 optimizer */
89: extern Addrp typeaddr;
90: extern Addrp retslot;
91: extern int cxslot;
92: extern int chslot;
93: extern int chlgslot;
94: extern int procclass;
95: extern ftnint procleng;
96: extern int nentry;
97: extern flag multitype;
98: extern int blklevel;
99: extern int lastlabno;
100: extern int lastvarno;
101: extern int lastargslot;
102: extern int argloc;
103: extern ftnint autoleng;
104: extern ftnint bssleng;
105: extern int retlabel;
106: extern int ret0label;
107: extern int dorange;
108: extern int regnum[ ];
109: extern Namep regnamep[ ];
110: extern int maxregvar;
111: extern int highregvar;
112: extern int nregvar;
113: extern ftnint lowbss;
114: extern ftnint highbss;
115: extern int bsslabel;
116: extern flag anyinits;
117: extern flag anylocals;
118:
119: extern chainp templist;
120: extern int maxdim;
121: extern chainp holdtemps;
122: extern struct Entrypoint *entries;
123: extern struct Rplblock *rpllist;
124: extern struct Chain *curdtp;
125: extern ftnint curdtelt;
126: extern flag toomanyinit;
127:
128: extern flag inioctl;
129: extern int iostmt;
130: extern Addrp ioblkp;
131: extern int nioctl;
132: extern int nequiv;
133: extern int eqvstart; /* offset to eqv number to guarantee uniqueness */
134: extern int nintnames;
135:
136: #ifdef SDB
137: extern int dbglabel;
138: extern flag sdbflag;
139: #endif
140:
141: extern int cdatafile;
142: extern int cchkfile;
143: extern int vdatafile;
144: extern int vchkfile;
145:
146: extern char cdatafname[];
147: extern char cchkfname[];
148: extern char vdatafname[];
149: extern char vchkfname[];
150:
151: extern long cdatahwm;
152: extern long vdatahwm;
153:
154:
155: struct Chain
156: {
157: chainp nextp;
158: tagptr datap;
159: };
160:
161: extern chainp chains;
162:
163: struct Headblock
164: {
165: field tag;
166: field vtype;
167: field vclass;
168: field vstg;
169: expptr vleng;
170: } ;
171:
172: struct Ctlframe
173: {
174: unsigned ctltype:8;
175: unsigned dostepsign:8;
176: int ctlabels[4];
177: int dolabel;
178: Namep donamep;
179: expptr domax;
180: expptr dostep;
181: };
182: #define endlabel ctlabels[0]
183: #define elselabel ctlabels[1]
184: #define dobodylabel ctlabels[1]
185: #define doposlabel ctlabels[2]
186: #define doneglabel ctlabels[3]
187: extern struct Ctlframe *ctls;
188: extern struct Ctlframe *ctlstack;
189: extern struct Ctlframe *lastctl;
190:
191: struct Extsym
192: {
193: char extname[XL+1];
194: field extstg;
195: unsigned extsave:1;
196: unsigned extinit:1;
197: chainp extp;
198: ftnint extleng;
199: ftnint maxleng;
200: char init;
201: long initoffset;
202: };
203:
204: extern struct Extsym *extsymtab;
205: extern struct Extsym *nextext;
206: extern struct Extsym *lastext;
207:
208: struct Labelblock
209: {
210: int labelno;
211: unsigned blklevel:8;
212: unsigned labused:1;
213: unsigned labinacc:1;
214: unsigned labdefined:1;
215: unsigned labtype:2;
216: ftnint stateno;
217: };
218:
219: extern struct Labelblock *labeltab;
220: extern struct Labelblock *labtabend;
221: extern struct Labelblock *highlabtab;
222:
223: struct Entrypoint
224: {
225: struct Entrypoint *entnextp;
226: struct Extsym *entryname;
227: chainp arglist;
228: int entrylabel;
229: int typelabel;
230: Namep enamep;
231: };
232:
233: struct Primblock
234: {
235: field tag;
236: field vtype;
237: Namep namep;
238: struct Listblock *argsp;
239: expptr fcharp;
240: expptr lcharp;
241: };
242:
243:
244: struct Hashentry
245: {
246: int hashval;
247: Namep varp;
248: };
249: extern struct Hashentry *hashtab;
250: extern struct Hashentry *lasthash;
251:
252: struct Intrpacked /* bits for intrinsic function description */
253: {
254: unsigned f1:3;
255: unsigned f2:4;
256: unsigned f3:7;
257: };
258:
259: struct Nameblock
260: {
261: field tag;
262: field vtype;
263: field vclass;
264: field vstg;
265: expptr vleng;
266: char varname[VL];
267: unsigned vdovar:1;
268: unsigned vdcldone:1;
269: unsigned vadjdim:1;
270: unsigned vsave:1;
271: unsigned vprocclass:3;
272: unsigned vregno:4;
273: union {
274: int varno;
275: struct Intrpacked intrdesc; /* bits for intrinsic function*/
276: } vardesc;
277: struct Dimblock *vdim;
278: ftnint voffset;
279: union {
280: chainp namelist; /* points to chain of names in */
281: chainp vstfdesc; /* points to (formals, expr) pair */
282: } varxptr;
283: char inlcomm;
284: char init;
285: long initoffset;
286: ftnint varsize;
287: };
288:
289:
290: struct Paramblock
291: {
292: field tag;
293: field vtype;
294: field vclass;
295: field vstg;
296: expptr vleng;
297: char varname[VL];
298: expptr paramval;
299: } ;
300:
301:
302: struct Exprblock
303: {
304: field tag;
305: field vtype;
306: field vclass;
307: field vstg;
308: expptr vleng;
309: unsigned opcode:6;
310: expptr leftp;
311: expptr rightp;
312: };
313:
314:
315: union Constant
316: {
317: char *ccp;
318: ftnint ci;
319: double cd[2];
320: };
321:
322: struct Constblock
323: {
324: field tag;
325: field vtype;
326: field vclass;
327: field vstg;
328: expptr vleng;
329: union Constant const;
330: };
331:
332:
333: struct Listblock
334: {
335: field tag;
336: field vtype;
337: chainp listp;
338: };
339:
340:
341:
342: struct Addrblock
343: {
344: field tag;
345: field vtype;
346: field vclass;
347: field vstg;
348: expptr vleng;
349: int memno;
350: expptr memoffset;
351: unsigned istemp:1;
352: unsigned isarray:1;
353: unsigned ntempelt:10;
354: ftnint varleng;
355: ftnint varsize;
356: };
357:
358:
359:
360: struct Tempblock
361: {
362: field tag;
363: field vtype;
364: field vclass;
365: expptr vleng;
366: Addrp memalloc;
367: unsigned istemp:1;
368: unsigned ntempelt:10;
369: ftnint varleng;
370: };
371:
372:
373:
374: struct Errorblock
375: {
376: field tag;
377: field vtype;
378: };
379:
380:
381: union Expression
382: {
383: field tag;
384: struct Headblock headblock;
385: struct Exprblock exprblock;
386: struct Addrblock addrblock;
387: struct Tempblock tempblock;
388: struct Constblock constblock;
389: struct Errorblock errorblock;
390: struct Listblock listblock;
391: struct Primblock primblock;
392: } ;
393:
394:
395:
396: struct Dimblock
397: {
398: int ndim;
399: expptr nelt;
400: expptr baseoffset;
401: expptr basexpr;
402: struct
403: {
404: expptr dimsize;
405: expptr dimexpr;
406: expptr lb;
407: expptr lbaddr;
408: expptr ub;
409: expptr ubaddr;
410: } dims[1];
411: };
412:
413:
414: struct Impldoblock
415: {
416: field tag;
417: unsigned isactive:1;
418: unsigned isbusy:1;
419: Namep varnp;
420: Constp varvp;
421: chainp impdospec;
422: expptr implb;
423: expptr impub;
424: expptr impstep;
425: ftnint impdiff;
426: ftnint implim;
427: struct Chain *datalist;
428: };
429:
430:
431: struct Rplblock /* name replacement block */
432: {
433: struct Rplblock *rplnextp;
434: Namep rplnp;
435: expptr rplvp;
436: expptr rplxp;
437: int rpltag;
438: };
439:
440:
441:
442: struct Equivblock
443: {
444: struct Eqvchain *equivs;
445: flag eqvinit;
446: long int eqvtop;
447: long int eqvbottom;
448: char inlcomm;
449: char init;
450: long initoffset;
451: } ;
452: #define eqvleng eqvtop
453:
454: extern struct Equivblock *eqvclass;
455:
456:
457: struct Eqvchain
458: {
459: struct Eqvchain *eqvnextp;
460: union
461: {
462: struct Primblock *eqvlhs;
463: Namep eqvname;
464: } eqvitem;
465: long int eqvoffset;
466: } ;
467:
468:
469: union Taggedblock
470: {
471: field tag;
472: struct Headblock headblock;
473: struct Nameblock nameblock;
474: struct Paramblock paramblock;
475: struct Exprblock exprblock;
476: struct Constblock constblock;
477: struct Listblock listblock;
478: struct Addrblock addrblock;
479: struct Tempblock tempblock;
480: struct Errorblock errorblock;
481: struct Primblock primblock;
482: struct Impldoblock impldoblock;
483: } ;
484:
485:
486:
487:
488: struct Literal
489: {
490: short littype;
491: short litnum;
492: union {
493: ftnint litival;
494: double litdval;
495: struct {
496: char litclen; /* small integer */
497: char litcstr[XL];
498: } litcval;
499: } litval;
500: };
501:
502: extern struct Literal litpool[ ];
503: extern int nliterals;
504:
505:
506:
507: /* popular functions with non integer return values */
508:
509:
510: int *ckalloc();
511: char *varstr(), *nounder(), *varunder();
512: char *copyn(), *copys();
513: chainp hookup(), mkchain();
514: ftnint convci();
515: char *convic();
516: char *setdoto();
517: double convcd();
518: Namep mkname();
519: struct Labelblock *mklabel(), *execlab();
520: struct Extsym *mkext(), *newentry();
521: expptr addrof(), call1(), call2(), call3(), call4();
522: Tempp mktmpn();
523: Addrp builtin(), mktemp(), altmpn(), mkaltemp(), mkaltmpn(), autovar();
524: Addrp mkplace(), mkaddr(), putconst(), memversion();
525: expptr mkprim(), mklhs(), mkexpr(), mkconv(), mkfunct(), fixexpr(), fixtype();
526: expptr errnode(), mkintcon();
527: tagptr cpexpr();
528: ftnint lmin(), lmax(), iarrlen();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.