1*47955Sbostic /*- 2*47955Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*47955Sbostic * All rights reserved. 422804Smckusick * 5*47955Sbostic * %sccs.include.proprietary.c% 6*47955Sbostic * 7*47955Sbostic * @(#)data.h 5.2 (Berkeley) 04/12/91 822804Smckusick */ 922804Smckusick 1022804Smckusick /* Forms of data list elements */ 1122804Smckusick 1222804Smckusick #define SIMPLE 1 1322804Smckusick #define NESTED 2 1422804Smckusick 1522804Smckusick 1622804Smckusick /* data expression block types */ 1722804Smckusick 1822804Smckusick #define DVALUE 1 1922804Smckusick #define DVAR 2 2022804Smckusick #define DNAME 3 2122804Smckusick #define DEXPR 4 2222804Smckusick #define DERROR 5 2322804Smckusick 2422804Smckusick 2522804Smckusick /* status codes for integer values */ 2622804Smckusick 2722804Smckusick #define NORMAL 1 2822804Smckusick #define MAXPLUS1 2 2922804Smckusick #define MINLESS1 3 3022804Smckusick #define ERRVAL 4 3122804Smckusick 3222804Smckusick 3322804Smckusick 3422804Smckusick /* data types for data statements */ 3522804Smckusick 3622804Smckusick 3722804Smckusick typedef 3822804Smckusick struct Dvalue 3922804Smckusick { 4022804Smckusick char tag; 4122804Smckusick char status; 4222804Smckusick ftnint value; 4322804Smckusick } 4422804Smckusick dvalue; 4522804Smckusick 4622804Smckusick 4722804Smckusick typedef 4822804Smckusick struct Dvar 4922804Smckusick { 5022804Smckusick char tag; 5122804Smckusick struct Dvalue *valp; 5222804Smckusick } 5322804Smckusick dvar; 5422804Smckusick 5522804Smckusick 5622804Smckusick typedef 5722804Smckusick struct Dname 5822804Smckusick { 5922804Smckusick char tag; 6022804Smckusick int len; 6122804Smckusick char *repr; 6222804Smckusick } 6322804Smckusick dname; 6422804Smckusick 6522804Smckusick 6622804Smckusick typedef 6722804Smckusick struct Dexpr 6822804Smckusick { 6922804Smckusick char tag; 7022804Smckusick char opcode; 7122804Smckusick union Vexpr *left; 7222804Smckusick union Vexpr *right; 7322804Smckusick } 7422804Smckusick dexpr; 7522804Smckusick 7622804Smckusick 7722804Smckusick typedef 7822804Smckusick struct Derror 7922804Smckusick { 8022804Smckusick char tag; 8122804Smckusick } 8222804Smckusick derror; 8322804Smckusick 8422804Smckusick 8522804Smckusick typedef 8622804Smckusick union Vexpr 8722804Smckusick { 8822804Smckusick char tag; 8922804Smckusick struct Dvalue dvalue; 9022804Smckusick struct Dvar dvar; 9122804Smckusick struct Dname dname; 9222804Smckusick struct Dexpr dexpr; 9322804Smckusick struct Derror derror; 9422804Smckusick } 9522804Smckusick vexpr; 9622804Smckusick 9722804Smckusick 9822804Smckusick typedef 9922804Smckusick struct Elist 10022804Smckusick { 10122804Smckusick struct Elist *next; 10222804Smckusick union Delt *elt; 10322804Smckusick } 10422804Smckusick elist; 10522804Smckusick 10622804Smckusick 10722804Smckusick typedef 10822804Smckusick struct Aelt 10922804Smckusick { 11022804Smckusick char tag; 11122804Smckusick Namep var; 11222804Smckusick struct Vlist *subs; 11322804Smckusick struct Rpair *range; 11422804Smckusick } 11522804Smckusick aelt; 11622804Smckusick 11722804Smckusick 11822804Smckusick typedef 11922804Smckusick struct DoList 12022804Smckusick { 12122804Smckusick char tag; 12222804Smckusick struct Elist *elts; 12322804Smckusick union Vexpr *dovar; 12422804Smckusick union Vexpr *init; 12522804Smckusick union Vexpr *limit; 12622804Smckusick union Vexpr *step; 12722804Smckusick } 12822804Smckusick dolist; 12922804Smckusick 13022804Smckusick 13122804Smckusick typedef 13222804Smckusick union Delt 13322804Smckusick { 13422804Smckusick char tag; 13522804Smckusick struct Aelt simple; 13622804Smckusick struct DoList nested; 13722804Smckusick } 13822804Smckusick delt; 13922804Smckusick 14022804Smckusick 14122804Smckusick typedef 14222804Smckusick struct Rpair 14322804Smckusick { 14422804Smckusick union Vexpr *low; 14522804Smckusick union Vexpr *high; 14622804Smckusick } 14722804Smckusick rpair; 14822804Smckusick 14922804Smckusick 15022804Smckusick typedef 15122804Smckusick struct ValList 15222804Smckusick { 15322804Smckusick struct ValList *next; 15422804Smckusick char status; 15522804Smckusick int repl; 15622804Smckusick Constp value; 15722804Smckusick } 15822804Smckusick vallist; 15922804Smckusick 16022804Smckusick 16122804Smckusick typedef 16222804Smckusick struct Vlist 16322804Smckusick { 16422804Smckusick struct Vlist *next; 16522804Smckusick union Vexpr *val; 16622804Smckusick } 16722804Smckusick vlist; 16822804Smckusick 16922804Smckusick 17022804Smckusick typedef 17122804Smckusick struct DoVars 17222804Smckusick { 17322804Smckusick struct DoVars *next; 17422804Smckusick int len; 17522804Smckusick char *repr; 17622804Smckusick dvalue *valp; 17722804Smckusick } 17822804Smckusick dovars; 17922804Smckusick 18022804Smckusick 18122804Smckusick 18222804Smckusick /* Global variables */ 18322804Smckusick 18422804Smckusick extern int badvalue; 18522804Smckusick extern flag overlapflag; 18622804Smckusick 18722804Smckusick 18822804Smckusick /* Global procedures */ 18922804Smckusick 19022804Smckusick extern frvexpr(); 19122804Smckusick extern frvlist(); 19222804Smckusick extern elist *revelist(); 19322804Smckusick extern vlist *revvlist(); 19422804Smckusick extern vlist *prepvexpr(); 19522804Smckusick extern elist *preplval(); 19622804Smckusick extern delt *mkdlval(); 19722804Smckusick extern delt *mkdatado(); 19822804Smckusick extern rpair *mkdrange(); 19922804Smckusick extern vallist *mkdrval(); 20022804Smckusick extern vexpr *evicon(); 20122804Smckusick extern vexpr *mkdname(); 20222804Smckusick extern expptr ivaltoicon(); 20322804Smckusick extern expptr evparam(); 20422804Smckusick extern vexpr *evaldname(); 20522804Smckusick extern vexpr *mkdexpr(); 20622804Smckusick extern vexpr *addivals(); 20722804Smckusick extern vexpr *subivals(); 20822804Smckusick extern vexpr *mulivals(); 20922804Smckusick extern vexpr *divivals(); 21022804Smckusick extern vexpr *powivals(); 21122804Smckusick extern vexpr *negival(); 21222804Smckusick extern expptr convconst(); 21322804Smckusick extern savedata(); 214