| 1 | /* |
| 2 | * src/interfaces/ecpg/preproc/type.h |
| 3 | */ |
| 4 | #ifndef _ECPG_PREPROC_TYPE_H |
| 5 | #define _ECPG_PREPROC_TYPE_H |
| 6 | |
| 7 | #include "ecpgtype.h" |
| 8 | |
| 9 | struct ECPGtype; |
| 10 | struct ECPGstruct_member |
| 11 | { |
| 12 | char *name; |
| 13 | struct ECPGtype *type; |
| 14 | struct ECPGstruct_member *next; |
| 15 | }; |
| 16 | |
| 17 | struct ECPGtype |
| 18 | { |
| 19 | enum ECPGttype type; |
| 20 | char *type_name; /* For struct and union types it is the struct |
| 21 | * name */ |
| 22 | char *size; /* For array it is the number of elements. For |
| 23 | * varchar it is the maxsize of the area. */ |
| 24 | char *struct_sizeof; /* For a struct this is the sizeof() type as |
| 25 | * string */ |
| 26 | union |
| 27 | { |
| 28 | struct ECPGtype *element; /* For an array this is the type of the |
| 29 | * element */ |
| 30 | struct ECPGstruct_member *members; /* A pointer to a list of members. */ |
| 31 | } u; |
| 32 | int counter; |
| 33 | }; |
| 34 | |
| 35 | /* Everything is malloced. */ |
| 36 | void ECPGmake_struct_member(const char *, struct ECPGtype *, struct ECPGstruct_member **); |
| 37 | struct ECPGtype *ECPGmake_simple_type(enum ECPGttype, char *, int); |
| 38 | struct ECPGtype *ECPGmake_array_type(struct ECPGtype *, char *); |
| 39 | struct ECPGtype *ECPGmake_struct_type(struct ECPGstruct_member *, enum ECPGttype, char *, char *); |
| 40 | struct ECPGstruct_member *ECPGstruct_member_dup(struct ECPGstruct_member *); |
| 41 | |
| 42 | /* Frees a type. */ |
| 43 | void ECPGfree_struct_member(struct ECPGstruct_member *); |
| 44 | void ECPGfree_type(struct ECPGtype *); |
| 45 | |
| 46 | /* Dump a type. |
| 47 | The type is dumped as: |
| 48 | type-tag <comma> reference-to-variable <comma> arrsize <comma> size <comma> |
| 49 | Where: |
| 50 | type-tag is one of the simple types or varchar. |
| 51 | reference-to-variable can be a reference to a struct element. |
| 52 | arrsize is the size of the array in case of array fetches. Otherwise 0. |
| 53 | size is the maxsize in case it is a varchar. Otherwise it is the size of |
| 54 | the variable (required to do array fetches of structs). |
| 55 | */ |
| 56 | void ECPGdump_a_type(FILE *, const char *, struct ECPGtype *, const int, |
| 57 | const char *, struct ECPGtype *, const int, |
| 58 | const char *, const char *, char *, |
| 59 | const char *, const char *); |
| 60 | |
| 61 | /* A simple struct to keep a variable and its type. */ |
| 62 | struct ECPGtemp_type |
| 63 | { |
| 64 | struct ECPGtype *type; |
| 65 | const char *name; |
| 66 | }; |
| 67 | |
| 68 | extern const char *ecpg_type_name(enum ECPGttype type); |
| 69 | |
| 70 | /* some stuff for whenever statements */ |
| 71 | enum WHEN_TYPE |
| 72 | { |
| 73 | W_NOTHING, |
| 74 | W_CONTINUE, |
| 75 | W_BREAK, |
| 76 | W_SQLPRINT, |
| 77 | W_GOTO, |
| 78 | W_DO, |
| 79 | W_STOP |
| 80 | }; |
| 81 | |
| 82 | struct when |
| 83 | { |
| 84 | enum WHEN_TYPE code; |
| 85 | char *command; |
| 86 | char *str; |
| 87 | }; |
| 88 | |
| 89 | struct index |
| 90 | { |
| 91 | char *index1; |
| 92 | char *index2; |
| 93 | char *str; |
| 94 | }; |
| 95 | |
| 96 | struct su_symbol |
| 97 | { |
| 98 | char *su; |
| 99 | char *symbol; |
| 100 | }; |
| 101 | |
| 102 | struct prep |
| 103 | { |
| 104 | char *name; |
| 105 | char *stmt; |
| 106 | char *type; |
| 107 | }; |
| 108 | |
| 109 | struct exec |
| 110 | { |
| 111 | char *name; |
| 112 | char *type; |
| 113 | }; |
| 114 | |
| 115 | struct this_type |
| 116 | { |
| 117 | enum ECPGttype type_enum; |
| 118 | char *type_str; |
| 119 | char *type_dimension; |
| 120 | char *type_index; |
| 121 | char *type_sizeof; |
| 122 | }; |
| 123 | |
| 124 | struct _include_path |
| 125 | { |
| 126 | char *path; |
| 127 | struct _include_path *next; |
| 128 | }; |
| 129 | |
| 130 | struct cursor |
| 131 | { |
| 132 | char *name; |
| 133 | char *function; |
| 134 | char *command; |
| 135 | char *connection; |
| 136 | bool opened; |
| 137 | struct arguments *argsinsert; |
| 138 | struct arguments *argsinsert_oos; |
| 139 | struct arguments *argsresult; |
| 140 | struct arguments *argsresult_oos; |
| 141 | struct cursor *next; |
| 142 | }; |
| 143 | |
| 144 | struct typedefs |
| 145 | { |
| 146 | char *name; |
| 147 | struct this_type *type; |
| 148 | struct ECPGstruct_member *struct_member_list; |
| 149 | int brace_level; |
| 150 | struct typedefs *next; |
| 151 | }; |
| 152 | |
| 153 | struct _defines |
| 154 | { |
| 155 | char *olddef; |
| 156 | char *newdef; |
| 157 | int pertinent; |
| 158 | void *used; |
| 159 | struct _defines *next; |
| 160 | }; |
| 161 | |
| 162 | /* This is a linked list of the variable names and types. */ |
| 163 | struct variable |
| 164 | { |
| 165 | char *name; |
| 166 | struct ECPGtype *type; |
| 167 | int brace_level; |
| 168 | struct variable *next; |
| 169 | }; |
| 170 | |
| 171 | struct arguments |
| 172 | { |
| 173 | struct variable *variable; |
| 174 | struct variable *indicator; |
| 175 | struct arguments *next; |
| 176 | }; |
| 177 | |
| 178 | struct descriptor |
| 179 | { |
| 180 | char *name; |
| 181 | char *connection; |
| 182 | struct descriptor *next; |
| 183 | }; |
| 184 | |
| 185 | struct assignment |
| 186 | { |
| 187 | char *variable; |
| 188 | enum ECPGdtype value; |
| 189 | struct assignment *next; |
| 190 | }; |
| 191 | |
| 192 | enum errortype |
| 193 | { |
| 194 | ET_WARNING, ET_ERROR |
| 195 | }; |
| 196 | |
| 197 | struct fetch_desc |
| 198 | { |
| 199 | char *str; |
| 200 | char *name; |
| 201 | }; |
| 202 | |
| 203 | #endif /* _ECPG_PREPROC_TYPE_H */ |
| 204 | |