|
|
1.1 root 1: #include "defs"
2:
3:
4: FILEP infile = { stdin };
5: FILEP diagfile = { stderr };
6:
7: FILEP textfile;
8: FILEP asmfile;
9: FILEP initfile;
10: long int headoffset;
11:
12: char token[200];
13: int toklen;
14: int lineno;
15: char *infname;
16: int needkwd;
17: struct Labelblock *thislabel = NULL;
18: flag nowarnflag = NO;
19: flag ftn66flag = NO;
20: flag no66flag = NO;
21: flag noextflag = NO;
22: flag profileflag = NO;
23: flag optimflag = NO;
24: flag shiftcase = YES;
25: flag undeftype = NO;
26: flag shortsubs = YES;
27: flag onetripflag = NO;
28: flag checksubs = NO;
29: flag debugflag = NO;
30: int nerr;
31: int nwarn;
32: int ndata;
33:
34: flag saveall;
35: flag substars;
36: int parstate = OUTSIDE;
37: flag headerdone = NO;
38: int blklevel;
39: int impltype[26];
40: int implleng[26];
41: int implstg[26];
42:
43: int tyint = TYLONG ;
44: int tylogical = TYLONG;
45: ftnint typesize[NTYPES]
46: = { 1, SZADDR, SZSHORT, SZLONG, SZLONG, 2*SZLONG,
47: 2*SZLONG, 4*SZLONG, SZLONG, 1, 1, 1};
48: int typealign[NTYPES]
49: = { 1, ALIADDR, ALISHORT, ALILONG, ALILONG, ALIDOUBLE,
50: ALILONG, ALIDOUBLE, ALILONG, 1, 1, 1};
51: int procno;
52: int proctype = TYUNKNOWN;
53: char *procname;
54: int rtvlabel[NTYPES];
55: int fudgelabel;
56: Addrp typeaddr;
57: Addrp retslot;
58: int cxslot = -1;
59: int chslot = -1;
60: int chlgslot = -1;
61: int procclass = CLUNKNOWN;
62: int nentry;
63: flag multitype;
64: ftnint procleng;
65: int lastlabno = 10;
66: int lastvarno;
67: int lastargslot;
68: int argloc;
69: ftnint autoleng;
70: ftnint bssleng = 0;
71: int retlabel;
72: int ret0label;
73:
74: int maxctl = MAXCTL;
75: struct Ctlframe *ctls;
76: struct Ctlframe *ctlstack;
77: struct Ctlframe *lastctl;
78:
79: Namep regnamep[MAXREGVAR];
80: int highregvar;
81: int nregvar;
82:
83: int maxext = MAXEXT;
84: struct Extsym *extsymtab;
85: struct Extsym *nextext;
86: struct Extsym *lastext;
87:
88: int maxequiv = MAXEQUIV;
89: struct Equivblock *eqvclass;
90:
91: int maxhash = MAXHASH;
92: struct Hashentry *hashtab;
93: struct Hashentry *lasthash;
94:
95: int maxstno = MAXSTNO;
96: struct Labelblock *labeltab;
97: struct Labelblock *labtabend;
98: struct Labelblock *highlabtab;
99:
100: int maxdim = MAXDIM;
101: struct Rplblock *rpllist = NULL;
102: struct Chain *curdtp = NULL;
103: flag toomanyinit;
104: ftnint curdtelt;
105: chainp templist = NULL;
106: chainp holdtemps = NULL;
107: int dorange = 0;
108: struct Entrypoint *entries = NULL;
109:
110: chainp chains = NULL;
111:
112: flag inioctl;
113: Addrp ioblkp;
114: int iostmt;
115: int nioctl;
116: int nequiv = 0;
117: int eqvstart = 0;
118: int nintnames = 0;
119:
120: #ifdef SDB
121: int dbglabel = 0;
122: flag sdbflag = NO;
123: #endif
124:
125: struct Literal litpool[MAXLITERALS];
126: int nliterals;
127:
128:
129:
130: fileinit()
131: {
132: procno = 0;
133: lastlabno = 10;
134: lastvarno = 0;
135: nliterals = 0;
136: nerr = 0;
137: ndata = 0;
138:
139: ctls = ALLOCN(maxctl, Ctlframe);
140: extsymtab = ALLOCN(maxext, Extsym);
141: eqvclass = ALLOCN(maxequiv, Equivblock);
142: hashtab = ALLOCN(maxhash, Hashentry);
143: labeltab = ALLOCN(maxstno, Labelblock);
144:
145: ctlstack = ctls - 1;
146: lastctl = ctls + maxctl;
147: nextext = extsymtab;
148: lastext = extsymtab + maxext;
149: lasthash = hashtab + maxhash;
150: labtabend = labeltab + maxstno;
151: highlabtab = labeltab;
152: }
153:
154:
155:
156:
157:
158: procinit()
159: {
160: register Namep p;
161: register struct Dimblock *q;
162: register struct Hashentry *hp;
163: register struct Labelblock *lp;
164: struct Chain *cp;
165: int i;
166:
167: pruse(asmfile, USECONST);
168: #if FAMILY == PCC
169: p2pass(USETEXT);
170: #endif
171: parstate = OUTSIDE;
172: headerdone = NO;
173: blklevel = 1;
174: saveall = NO;
175: substars = NO;
176: nwarn = 0;
177: thislabel = NULL;
178: needkwd = 0;
179:
180: ++procno;
181: proctype = TYUNKNOWN;
182: procname = "MAIN_ ";
183: procclass = CLUNKNOWN;
184: nentry = 0;
185: multitype = NO;
186: typeaddr = NULL;
187: retslot = NULL;
188: cxslot = -1;
189: chslot = -1;
190: chlgslot = -1;
191: procleng = 0;
192: blklevel = 1;
193: lastargslot = 0;
194: #if TARGET==PDP11
195: autoleng = 6;
196: #else
197: autoleng = 0;
198: #endif
199:
200: for(lp = labeltab ; lp < labtabend ; ++lp)
201: lp->stateno = 0;
202:
203: for(hp = hashtab ; hp < lasthash ; ++hp)
204: if(p = hp->varp)
205: {
206: frexpr(p->vleng);
207: if(q = p->vdim)
208: {
209: for(i = 0 ; i < q->ndim ; ++i)
210: {
211: frexpr(q->dims[i].dimsize);
212: frexpr(q->dims[i].dimexpr);
213: }
214: frexpr(q->nelt);
215: frexpr(q->baseoffset);
216: frexpr(q->basexpr);
217: free( (charptr) q);
218: }
219: if(p->vclass == CLNAMELIST)
220: frchain( &(p->varxptr.namelist) );
221: free( (charptr) p);
222: hp->varp = NULL;
223: }
224: nintnames = 0;
225: highlabtab = labeltab;
226:
227: ctlstack = ctls - 1;
228: for(cp = templist ; cp ; cp = cp->nextp)
229: free( (charptr) (cp->datap) );
230: frchain(&templist);
231: holdtemps = NULL;
232: dorange = 0;
233: nregvar = 0;
234: highregvar = 0;
235: entries = NULL;
236: rpllist = NULL;
237: inioctl = NO;
238: ioblkp = NULL;
239: eqvstart += nequiv;
240: nequiv = 0;
241:
242: for(i = 0 ; i<NTYPES ; ++i)
243: rtvlabel[i] = 0;
244: fudgelabel = 0;
245:
246: if(undeftype)
247: setimpl(TYUNKNOWN, (ftnint) 0, 'a', 'z');
248: else
249: {
250: setimpl(TYREAL, (ftnint) 0, 'a', 'z');
251: setimpl(tyint, (ftnint) 0, 'i', 'n');
252: }
253: setimpl(-STGBSS, (ftnint) 0, 'a', 'z'); /* set class */
254: setlog();
255: }
256:
257:
258:
259:
260: setimpl(type, length, c1, c2)
261: int type;
262: ftnint length;
263: int c1, c2;
264: {
265: int i;
266: char buff[100];
267:
268: if(c1==0 || c2==0)
269: return;
270:
271: if(c1 > c2)
272: {
273: sprintf(buff, "characters out of order in implicit:%c-%c", c1, c2);
274: err(buff);
275: }
276: else
277: if(type < 0)
278: for(i = c1 ; i<=c2 ; ++i)
279: implstg[i-'a'] = - type;
280: else
281: {
282: type = lengtype(type, (int) length);
283: if(type != TYCHAR)
284: length = 0;
285: for(i = c1 ; i<=c2 ; ++i)
286: {
287: impltype[i-'a'] = type;
288: implleng[i-'a'] = length;
289: }
290: }
291: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.