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