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