1*22804Smckusick /* 2*22804Smckusick * Copyright (c) 1980 Regents of the University of California. 3*22804Smckusick * All rights reserved. The Berkeley software License Agreement 4*22804Smckusick * specifies the terms and conditions for redistribution. 5*22804Smckusick * 6*22804Smckusick * @(#)data.h 5.1 (Berkeley) 06/07/85 7*22804Smckusick */ 8*22804Smckusick 9*22804Smckusick /* Forms of data list elements */ 10*22804Smckusick 11*22804Smckusick #define SIMPLE 1 12*22804Smckusick #define NESTED 2 13*22804Smckusick 14*22804Smckusick 15*22804Smckusick /* data expression block types */ 16*22804Smckusick 17*22804Smckusick #define DVALUE 1 18*22804Smckusick #define DVAR 2 19*22804Smckusick #define DNAME 3 20*22804Smckusick #define DEXPR 4 21*22804Smckusick #define DERROR 5 22*22804Smckusick 23*22804Smckusick 24*22804Smckusick /* status codes for integer values */ 25*22804Smckusick 26*22804Smckusick #define NORMAL 1 27*22804Smckusick #define MAXPLUS1 2 28*22804Smckusick #define MINLESS1 3 29*22804Smckusick #define ERRVAL 4 30*22804Smckusick 31*22804Smckusick 32*22804Smckusick 33*22804Smckusick /* data types for data statements */ 34*22804Smckusick 35*22804Smckusick 36*22804Smckusick typedef 37*22804Smckusick struct Dvalue 38*22804Smckusick { 39*22804Smckusick char tag; 40*22804Smckusick char status; 41*22804Smckusick ftnint value; 42*22804Smckusick } 43*22804Smckusick dvalue; 44*22804Smckusick 45*22804Smckusick 46*22804Smckusick typedef 47*22804Smckusick struct Dvar 48*22804Smckusick { 49*22804Smckusick char tag; 50*22804Smckusick struct Dvalue *valp; 51*22804Smckusick } 52*22804Smckusick dvar; 53*22804Smckusick 54*22804Smckusick 55*22804Smckusick typedef 56*22804Smckusick struct Dname 57*22804Smckusick { 58*22804Smckusick char tag; 59*22804Smckusick int len; 60*22804Smckusick char *repr; 61*22804Smckusick } 62*22804Smckusick dname; 63*22804Smckusick 64*22804Smckusick 65*22804Smckusick typedef 66*22804Smckusick struct Dexpr 67*22804Smckusick { 68*22804Smckusick char tag; 69*22804Smckusick char opcode; 70*22804Smckusick union Vexpr *left; 71*22804Smckusick union Vexpr *right; 72*22804Smckusick } 73*22804Smckusick dexpr; 74*22804Smckusick 75*22804Smckusick 76*22804Smckusick typedef 77*22804Smckusick struct Derror 78*22804Smckusick { 79*22804Smckusick char tag; 80*22804Smckusick } 81*22804Smckusick derror; 82*22804Smckusick 83*22804Smckusick 84*22804Smckusick typedef 85*22804Smckusick union Vexpr 86*22804Smckusick { 87*22804Smckusick char tag; 88*22804Smckusick struct Dvalue dvalue; 89*22804Smckusick struct Dvar dvar; 90*22804Smckusick struct Dname dname; 91*22804Smckusick struct Dexpr dexpr; 92*22804Smckusick struct Derror derror; 93*22804Smckusick } 94*22804Smckusick vexpr; 95*22804Smckusick 96*22804Smckusick 97*22804Smckusick typedef 98*22804Smckusick struct Elist 99*22804Smckusick { 100*22804Smckusick struct Elist *next; 101*22804Smckusick union Delt *elt; 102*22804Smckusick } 103*22804Smckusick elist; 104*22804Smckusick 105*22804Smckusick 106*22804Smckusick typedef 107*22804Smckusick struct Aelt 108*22804Smckusick { 109*22804Smckusick char tag; 110*22804Smckusick Namep var; 111*22804Smckusick struct Vlist *subs; 112*22804Smckusick struct Rpair *range; 113*22804Smckusick } 114*22804Smckusick aelt; 115*22804Smckusick 116*22804Smckusick 117*22804Smckusick typedef 118*22804Smckusick struct DoList 119*22804Smckusick { 120*22804Smckusick char tag; 121*22804Smckusick struct Elist *elts; 122*22804Smckusick union Vexpr *dovar; 123*22804Smckusick union Vexpr *init; 124*22804Smckusick union Vexpr *limit; 125*22804Smckusick union Vexpr *step; 126*22804Smckusick } 127*22804Smckusick dolist; 128*22804Smckusick 129*22804Smckusick 130*22804Smckusick typedef 131*22804Smckusick union Delt 132*22804Smckusick { 133*22804Smckusick char tag; 134*22804Smckusick struct Aelt simple; 135*22804Smckusick struct DoList nested; 136*22804Smckusick } 137*22804Smckusick delt; 138*22804Smckusick 139*22804Smckusick 140*22804Smckusick typedef 141*22804Smckusick struct Rpair 142*22804Smckusick { 143*22804Smckusick union Vexpr *low; 144*22804Smckusick union Vexpr *high; 145*22804Smckusick } 146*22804Smckusick rpair; 147*22804Smckusick 148*22804Smckusick 149*22804Smckusick typedef 150*22804Smckusick struct ValList 151*22804Smckusick { 152*22804Smckusick struct ValList *next; 153*22804Smckusick char status; 154*22804Smckusick int repl; 155*22804Smckusick Constp value; 156*22804Smckusick } 157*22804Smckusick vallist; 158*22804Smckusick 159*22804Smckusick 160*22804Smckusick typedef 161*22804Smckusick struct Vlist 162*22804Smckusick { 163*22804Smckusick struct Vlist *next; 164*22804Smckusick union Vexpr *val; 165*22804Smckusick } 166*22804Smckusick vlist; 167*22804Smckusick 168*22804Smckusick 169*22804Smckusick typedef 170*22804Smckusick struct DoVars 171*22804Smckusick { 172*22804Smckusick struct DoVars *next; 173*22804Smckusick int len; 174*22804Smckusick char *repr; 175*22804Smckusick dvalue *valp; 176*22804Smckusick } 177*22804Smckusick dovars; 178*22804Smckusick 179*22804Smckusick 180*22804Smckusick 181*22804Smckusick /* Global variables */ 182*22804Smckusick 183*22804Smckusick extern int badvalue; 184*22804Smckusick extern flag overlapflag; 185*22804Smckusick 186*22804Smckusick 187*22804Smckusick /* Global procedures */ 188*22804Smckusick 189*22804Smckusick extern frvexpr(); 190*22804Smckusick extern frvlist(); 191*22804Smckusick extern elist *revelist(); 192*22804Smckusick extern vlist *revvlist(); 193*22804Smckusick extern vlist *prepvexpr(); 194*22804Smckusick extern elist *preplval(); 195*22804Smckusick extern delt *mkdlval(); 196*22804Smckusick extern delt *mkdatado(); 197*22804Smckusick extern rpair *mkdrange(); 198*22804Smckusick extern vallist *mkdrval(); 199*22804Smckusick extern vexpr *evicon(); 200*22804Smckusick extern vexpr *mkdname(); 201*22804Smckusick extern expptr ivaltoicon(); 202*22804Smckusick extern expptr evparam(); 203*22804Smckusick extern vexpr *evaldname(); 204*22804Smckusick extern vexpr *mkdexpr(); 205*22804Smckusick extern vexpr *addivals(); 206*22804Smckusick extern vexpr *subivals(); 207*22804Smckusick extern vexpr *mulivals(); 208*22804Smckusick extern vexpr *divivals(); 209*22804Smckusick extern vexpr *powivals(); 210*22804Smckusick extern vexpr *negival(); 211*22804Smckusick extern expptr convconst(); 212*22804Smckusick extern savedata(); 213