* add p cc
[mascara-docs.git] / compilers / pcc / pcc-1.0.0 / f77 / fcom / defs.h
blobaa575a897dfaf253993d9d2e6c039a95023e474b
1 /* $Id: defs.h,v 1.22 2008/12/24 17:40:41 sgk Exp $ */
2 /*
3 * Copyright(C) Caldera International Inc. 2001-2002. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
9 * Redistributions of source code and documentation must retain the above
10 * copyright notice, this list of conditions and the following disclaimer.
11 * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditionsand the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * All advertising materials mentioning features or use of this software
15 * must display the following acknowledgement:
16 * This product includes software developed or owned by Caldera
17 * International, Inc.
18 * Neither the name of Caldera International, Inc. nor the names of other
19 * contributors may be used to endorse or promote products derived from
20 * this software without specific prior written permission.
22 * USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
23 * INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
24 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 * DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE
27 * FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OFLIABILITY, WHETHER IN CONTRACT,
31 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
35 #include <stdio.h>
36 #include <ctype.h>
37 #include <stdlib.h>
39 #define VL 6
40 #define XL 8
42 #define MAXINCLUDES 10
43 #define MAXLITERALS 20
44 #define MAXCTL 20
45 #define MAXHASH 401
46 #define MAXSTNO 1000
47 #define MAXEXT 200
48 #define MAXEQUIV 150
49 #define MAXLABLIST 100
51 typedef struct bigblock *bigptr;
52 typedef union chainedblock *chainp;
54 extern FILE *infile;
55 extern FILE *diagfile;
56 extern long int headoffset;
58 extern char token [ ];
59 extern int toklen;
60 extern int lineno;
61 extern char *infname;
62 extern int needkwd;
63 extern struct labelblock *thislabel;
65 extern int mflag, tflag;
67 extern flag profileflag;
68 extern flag optimflag;
69 extern flag quietflag;
70 extern flag nowarnflag;
71 extern flag ftn66flag;
72 extern flag shiftcase;
73 extern flag undeftype;
74 extern flag shortsubs;
75 extern flag onetripflag;
76 extern flag checksubs;
77 extern flag debugflag;
78 extern int nerr;
79 extern int nwarn;
80 extern int ndata;
82 extern int parstate;
83 extern flag headerdone;
84 extern int blklevel;
85 extern flag saveall;
86 extern flag substars;
87 extern int impltype[ ];
88 extern int implleng[ ];
89 extern int implstg[ ];
91 extern int tyint;
92 extern int tylogical;
93 extern ftnint typesize[];
94 extern int typealign[];
95 extern int procno;
96 extern int proctype;
97 extern char * procname;
98 extern int rtvlabel[ ];
99 extern int fudgelabel; /* to confuse the pdp11 optimizer */
100 extern struct bigblock *typeaddr;
101 extern struct bigblock *retslot;
102 extern int cxslot;
103 extern int chslot;
104 extern int chlgslot;
105 extern int procclass;
106 extern ftnint procleng;
107 extern int nentry;
108 extern flag multitype;
109 extern int blklevel;
110 extern int lastlabno;
111 extern int lastvarno;
112 extern int lastargslot;
113 extern int argloc;
114 extern ftnint autoleng;
115 extern ftnint bssleng;
116 extern int retlabel;
117 extern int ret0label;
118 extern int dorange;
119 extern int regnum[ ];
120 extern bigptr regnamep[ ];
121 extern int maxregvar;
122 extern int highregvar;
124 extern chainp templist;
125 extern chainp holdtemps;
126 extern chainp entries;
127 extern chainp rpllist;
128 extern chainp curdtp;
129 extern ftnint curdtelt;
130 extern flag toomanyinit;
132 extern flag inioctl;
133 extern int iostmt;
134 extern struct bigblock *ioblkp;
135 extern int nioctl;
136 extern int nequiv;
137 extern int nintnames;
138 extern int nextnames;
140 struct chain
142 chainp nextp;
143 bigptr datap;
146 extern chainp chains;
148 struct ctlframe
150 unsigned ctltype:8;
151 unsigned dostepsign:8;
152 int ctlabels[4];
153 int dolabel;
154 struct bigblock *donamep;
155 bigptr domax;
156 bigptr dostep;
158 #define endlabel ctlabels[0]
159 #define elselabel ctlabels[1]
160 #define dobodylabel ctlabels[1]
161 #define doposlabel ctlabels[2]
162 #define doneglabel ctlabels[3]
163 extern struct ctlframe ctls[ ];
164 extern struct ctlframe *ctlstack;
165 extern struct ctlframe *lastctl;
167 struct extsym
169 char extname[XL];
170 unsigned extstg:4;
171 unsigned extsave:1;
172 unsigned extinit:1;
173 chainp extp;
174 ftnint extleng;
175 ftnint maxleng;
178 extern struct extsym extsymtab[ ];
179 extern struct extsym *nextext;
180 extern struct extsym *lastext;
182 struct labelblock
184 int labelno;
185 unsigned blklevel:8;
186 unsigned labused:1;
187 unsigned labinacc:1;
188 unsigned labdefined:1;
189 unsigned labtype:2;
190 ftnint stateno;
193 extern struct labelblock labeltab[ ];
194 extern struct labelblock *labtabend;
195 extern struct labelblock *highlabtab;
197 struct entrypoint
199 chainp nextp;
200 struct extsym *entryname;
201 chainp arglist;
202 int entrylabel;
203 int typelabel;
204 ptr enamep;
207 struct primblock
209 struct bigblock *namep;
210 struct bigblock *argsp;
211 bigptr fcharp;
212 bigptr lcharp;
216 struct hashentry
218 int hashval;
219 struct bigblock *varp;
221 extern struct hashentry hashtab[ ];
222 extern struct hashentry *lasthash;
224 struct intrpacked /* bits for intrinsic function description */
226 unsigned f1:3;
227 unsigned f2:4;
228 unsigned f3:7;
231 struct nameblock
233 char varname[VL];
234 unsigned vdovar:1;
235 unsigned vdcldone:1;
236 unsigned vadjdim:1;
237 unsigned vsave:1;
238 unsigned vprocclass:3;
239 unsigned vregno:4;
240 union {
241 int varno;
242 chainp vstfdesc; /* points to (formals, expr) pair */
243 struct intrpacked intrdesc; /* bits for intrinsic function */
244 } vardesc;
245 struct dimblock *vdim;
246 int voffset;
250 struct paramblock
252 char varname[VL];
253 bigptr paramval;
257 struct exprblock
259 unsigned opcode:6;
260 bigptr leftp;
261 bigptr rightp;
264 struct dcomplex {
265 double dreal, dimag;
268 union constant
270 char *ccp;
271 ftnint ci;
272 double cd[2];
273 struct dcomplex dc;
276 struct constblock
278 union constant fconst;
282 struct listblock
284 chainp listp;
289 struct addrblock
291 int memno;
292 bigptr memoffset;
293 unsigned istemp:1;
294 unsigned ntempelt:10;
299 struct errorblock
301 int pad;
305 struct dimblock
307 int ndim;
308 bigptr nelt;
309 bigptr baseoffset;
310 bigptr basexpr;
311 struct
313 bigptr dimsize;
314 bigptr dimexpr;
315 } dims[1];
319 struct impldoblock /* XXXX */
321 #define isactive vtype
322 #define isbusy vclass
323 struct bigblock *varnp;
324 struct bigblock *varvp;
325 bigptr implb;
326 bigptr impub;
327 bigptr impstep;
328 ftnint impdiff;
329 ftnint implim;
330 chainp datalist;
334 struct rplblock /* name replacement block */
336 chainp nextp;
337 struct bigblock *rplnp;
338 ptr rplvp;
339 struct bigblock *rplxp;
340 int rpltag;
345 struct equivblock
347 ptr equivs;
348 unsigned eqvinit:1;
349 long int eqvtop;
350 long int eqvbottom;
352 #define eqvleng eqvtop
354 extern struct equivblock eqvclass[ ];
357 struct eqvchain
359 chainp nextp;
360 ptr eqvitem;
361 long int eqvoffset;
364 union chainedblock
366 struct chain chain;
367 struct entrypoint entrypoint;
368 struct rplblock rplblock;
369 struct eqvchain eqvchain;
373 struct bigblock {
374 unsigned tag:4;
375 unsigned vtype:4;
376 unsigned vclass:4;
377 unsigned vstg:4;
378 bigptr vleng;
379 union {
380 struct exprblock _expr;
381 struct addrblock _addr;
382 struct constblock _const;
383 struct errorblock _error;
384 struct listblock _list;
385 struct primblock _prim;
386 struct nameblock _name;
387 struct paramblock _param;
388 struct impldoblock _impldo;
389 } _u;
390 #define b_expr _u._expr
391 #define b_addr _u._addr
392 #define b_const _u._const
393 #define b_error _u._error
394 #define b_list _u._list
395 #define b_prim _u._prim
396 #define b_name _u._name
397 #define b_param _u._param
398 #define b_impldo _u._impldo
401 struct literal
403 short littype;
404 short litnum;
405 union {
406 ftnint litival;
407 double litdval;
408 struct {
409 char litclen; /* small integer */
410 char litcstr[XL];
411 } litcval;
412 } litval;
415 extern struct literal litpool[ ];
416 extern int nliterals;
422 /* popular functions with non integer return values */
423 #define expptr bigptr
424 #define tagptr bigptr
426 ptr cpblock(int ,void *);
428 ptr ckalloc(int);
429 char *varstr(int, char *), *nounder(int, char *), *varunder(int, char *);
430 char *copyn(int, char *), *copys(char *);
431 chainp hookup(chainp, chainp), mkchain(bigptr, chainp);
432 ftnint convci(int, char *), iarrlen(struct bigblock *q);
433 ftnint lmin(ftnint, ftnint), lmax(ftnint, ftnint);
434 ftnint simoffset(expptr *);
435 char *memname(int, int), *convic(ftnint), *setdoto(char *);
436 double convcd(int, char *);
437 struct extsym *mkext(char *),
438 *newentry(struct bigblock *),
439 *comblock(int, char *s);
440 struct bigblock *mkname(int, char *);
441 struct labelblock *mklabel(ftnint);
442 struct bigblock *addrof(expptr), *call1(int, char *, expptr),
443 *call2(int, char *, expptr, expptr),
444 *call3(int, char *, expptr, expptr, expptr),
445 *call4(int, char *, expptr, expptr, expptr, expptr);
446 struct bigblock *call0(int, char *), *mkexpr(int, bigptr, bigptr);
447 struct bigblock *callk(int, char *, bigptr);
449 struct bigblock *builtin(int, char *), *fmktemp(int, bigptr),
450 *mktmpn(int, int, bigptr), *nextdata(ftnint *, ftnint *),
451 *autovar(int, int, bigptr), *mklhs(struct bigblock *),
452 *mkaddr(struct bigblock *), *putconst(struct bigblock *),
453 *memversion(struct bigblock *);
454 struct bigblock *mkscalar(struct bigblock *np);
455 struct bigblock *realpart(struct bigblock *p);
456 struct bigblock *imagpart(struct bigblock *p);
458 struct bigblock *mkintcon(ftnint), *mkbitcon(int, int, char *),
459 *mklogcon(int), *mkaddcon(int), *mkrealcon(int, double),
460 *mkstrcon(int, char *), *mkcxcon(bigptr,bigptr);
461 bigptr mkconst(int t);
463 bigptr mklist(chainp p);
464 bigptr mkiodo(chainp, chainp);
467 bigptr mkconv(int, bigptr),
468 mkfunct(struct bigblock *), fixexpr(struct bigblock *),
469 fixtype(bigptr);
472 bigptr cpexpr(bigptr), mkprim(bigptr, struct bigblock *, bigptr, bigptr);
473 struct bigblock *mkarg(int, int);
474 struct bigblock *errnode(void);
475 void initkey(void), prtail(void), puteof(void), done(int);
476 void fileinit(void), procinit(void), endproc(void), doext(void), preven(int);
477 int inilex(char *), yyparse(void), newlabel(void), lengtype(int, int);
478 void err(char *, ...), warn(char *, ...), fatal(char *, ...), enddcl(void);
479 void p2pass(char *s), frexpr(bigptr), execerr(char *, ...);
480 void setimpl(int, ftnint, int, int), setlog(void), newproc(void);
481 void prdbginfo(void), impldcl(struct bigblock *p);
482 void putbracket(void), enddcl(void), doequiv(void);
483 void puthead(char *), startproc(struct extsym *, int);
484 void dclerr(char *s, struct bigblock *v), putforce(int, bigptr);
485 void entrypt(int, int, ftnint, struct extsym *, chainp);
486 void settype(struct bigblock *, int, int), putlabel(int);
487 void putbranch(struct bigblock *p), goret(int), putrbrack(int);
488 void prolog(struct entrypoint *, struct bigblock *), prendproc(void);
489 void prlocvar(char *, ftnint), prext(char *, ftnint, int);
490 void vardcl(struct bigblock *v), frchain(chainp *p);
491 void frtemp(struct bigblock *p), incomm(struct extsym *, struct bigblock *);
492 void setintr(struct bigblock * v), setext(struct bigblock * v);
493 struct uux { expptr lb, ub; };
494 void setbound(struct bigblock *, int, struct uux []);
495 void setfmt(struct labelblock *lp), frdata(chainp), frrpl(void),
496 dataval(struct bigblock *, struct bigblock *),
497 consnegop(struct bigblock *p), exdo(int, chainp), exelse(void),
498 exendif(void), exif(bigptr), exelif(bigptr),
499 exequals(struct bigblock *, bigptr),
500 exassign(struct bigblock *, struct labelblock *),
501 exarif(bigptr, struct labelblock *, struct labelblock *,
502 struct labelblock *);
506 int intrfunct(char s[VL]), eqn(int, char *, char *);
507 int fmtstmt(struct labelblock *lp);
508 int cktype(int, int, int);
509 int yylex(void), inregister(struct bigblock *);
510 int inilex(char *), iocname(void);
511 int maxtype(int, int), flog2(ftnint), hextoi(int);
512 int cmpstr(char *, char *, ftnint, ftnint);
513 int enregister(struct bigblock *np);
514 int conssgn(bigptr p);
515 int fixargs(int, struct bigblock *);
516 int addressable(bigptr p);
518 void prlabel(int);
519 void prconi(FILE *, int, ftnint);
520 void prcona(ftnint);
521 void prconr(FILE *, int, double);
522 void prarif(bigptr, int, int, int);
523 void putstr(char *, ftnint);
524 NODE *putex1(bigptr p);
525 void puteq(bigptr, bigptr);
526 void popstack(chainp *p);
527 void consconv(int, union constant *, int, union constant *);
528 void yyerror(char *s);
529 void enddo(int);
530 void doinclude(char *);
531 void flline(void);
532 void startioctl(void);
533 void endioctl(void), endio(void), ioclause(int, bigptr), doio(chainp);
534 void excall(struct bigblock *, struct bigblock *, int, struct labelblock *[]);
535 void exreturn(expptr p);
536 void exstop(int, expptr);
537 void exgoto(struct labelblock *);
538 void exasgoto(bigptr);
539 void putcmgo(expptr, int, struct labelblock *[]);
540 void putexpr(expptr p);
541 void putif(expptr, int);
542 void putgoto(int);
543 void deregister(struct bigblock *np);
544 NODE *putx(expptr p);
545 void cpn(int, char *, char *);
546 void prcmgoto(expptr, int, int, int);
547 char *lexline(ftnint *n);
548 bigptr suboffset(struct bigblock *p);
549 struct bigblock *intraddr(struct bigblock *np);
550 struct bigblock *intrcall(bigptr, bigptr, int);
551 void setloc(int);
552 void prnloc(char *name);
553 void fprint(bigptr p, int indx);
554 void ckfree(void *p);
556 #undef expptr
557 #undef tagptr
559 #define err1 err
560 #define err2 err
561 #define warn1 warn
562 #define fatal1 fatal