Commit | Line | Data |
a559c259 |
1 | /* $Header: perl.h,v 1.0.1.3 88/01/28 10:24:17 root Exp $ |
8d063cd8 |
2 | * |
3 | * $Log: perl.h,v $ |
a559c259 |
4 | * Revision 1.0.1.3 88/01/28 10:24:17 root |
5 | * patch8: added eval operator. |
6 | * |
135863df |
7 | * Revision 1.0.1.2 88/01/24 03:53:47 root |
8 | * patch 2: hid str_peek() in #ifdef DEBUGGING. |
9 | * |
36ce8bec |
10 | * Revision 1.0.1.1 88/01/21 21:29:23 root |
11 | * No longer defines STDSTDIO--gets it from config.h now. |
12 | * |
8d063cd8 |
13 | * Revision 1.0 87/12/18 13:05:38 root |
14 | * Initial revision |
15 | * |
16 | */ |
17 | |
18 | #define DEBUGGING |
8d063cd8 |
19 | |
20 | #define VOIDUSED 1 |
21 | #include "config.h" |
22 | |
23 | #ifndef BCOPY |
24 | # define bcopy(s1,s2,l) memcpy(s2,s1,l); |
25 | # define bzero(s,l) memset(s,0,l); |
26 | #endif |
27 | |
28 | #include <stdio.h> |
29 | #include <ctype.h> |
30 | #include <setjmp.h> |
31 | #include <sys/types.h> |
32 | #include <sys/stat.h> |
135863df |
33 | |
34 | #ifdef TMINSYS |
35 | #include <sys/time.h> |
36 | #else |
8d063cd8 |
37 | #include <time.h> |
135863df |
38 | #endif |
39 | |
8d063cd8 |
40 | #include <sys/times.h> |
41 | |
42 | typedef struct arg ARG; |
43 | typedef struct cmd CMD; |
44 | typedef struct formcmd FCMD; |
45 | typedef struct scanpat SPAT; |
46 | typedef struct stab STAB; |
47 | typedef struct stio STIO; |
48 | typedef struct string STR; |
49 | typedef struct atbl ARRAY; |
50 | typedef struct htbl HASH; |
51 | |
52 | #include "str.h" |
53 | #include "form.h" |
54 | #include "stab.h" |
55 | #include "spat.h" |
56 | #include "arg.h" |
57 | #include "cmd.h" |
58 | #include "array.h" |
59 | #include "hash.h" |
60 | |
135863df |
61 | #ifdef CHARSPRINTF |
62 | char *sprintf(); |
63 | #else |
64 | int sprintf(); |
65 | #endif |
66 | |
8d063cd8 |
67 | /* A string is TRUE if not "" or "0". */ |
68 | #define True(val) (tmps = (val), (*tmps && !(*tmps == '0' && !tmps[1]))) |
69 | EXT char *Yes INIT("1"); |
70 | EXT char *No INIT(""); |
71 | |
72 | #define str_true(str) (Str = (str), (Str->str_pok ? True(Str->str_ptr) : (Str->str_nok ? (Str->str_nval != 0.0) : 0 ))) |
73 | |
135863df |
74 | #ifdef DEBUGGING |
8d063cd8 |
75 | #define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),buf) : "" ))) |
135863df |
76 | #endif |
77 | |
8d063cd8 |
78 | #define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str))) |
79 | #define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_nval : str_2num(Str))) |
80 | EXT STR *Str; |
81 | |
82 | #define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len) |
83 | |
84 | CMD *add_label(); |
85 | CMD *block_head(); |
86 | CMD *append_line(); |
87 | CMD *make_acmd(); |
88 | CMD *make_ccmd(); |
89 | CMD *invert(); |
90 | CMD *addcond(); |
91 | CMD *addloop(); |
92 | CMD *wopt(); |
93 | |
94 | SPAT *stab_to_spat(); |
95 | |
96 | STAB *stabent(); |
97 | |
98 | ARG *stab_to_arg(); |
99 | ARG *op_new(); |
100 | ARG *make_op(); |
101 | ARG *make_lval(); |
102 | ARG *make_match(); |
103 | ARG *make_split(); |
104 | ARG *flipflip(); |
105 | |
106 | STR *arg_to_str(); |
107 | STR *str_new(); |
108 | STR *stab_str(); |
a559c259 |
109 | STR *eval(); /* this evaluates expressions */ |
110 | STR *do_eval(); /* this evaluates eval operator */ |
8d063cd8 |
111 | |
112 | FCMD *load_format(); |
113 | |
114 | char *scanpat(); |
115 | char *scansubst(); |
116 | char *scantrans(); |
117 | char *scanstr(); |
118 | char *scanreg(); |
119 | char *reg_get(); |
120 | char *str_append_till(); |
121 | char *str_gets(); |
122 | |
123 | bool do_match(); |
124 | bool do_open(); |
125 | bool do_close(); |
126 | bool do_print(); |
127 | |
128 | int do_subst(); |
129 | |
130 | void str_free(); |
131 | void freearg(); |
132 | |
133 | EXT int line INIT(0); |
134 | EXT int arybase INIT(0); |
135 | |
136 | struct outrec { |
137 | int o_lines; |
138 | char *o_str; |
139 | int o_len; |
140 | }; |
141 | |
142 | EXT struct outrec outrec; |
143 | EXT struct outrec toprec; |
144 | |
145 | EXT STAB *last_in_stab INIT(Nullstab); |
146 | EXT STAB *defstab INIT(Nullstab); |
147 | EXT STAB *argvstab INIT(Nullstab); |
148 | EXT STAB *envstab INIT(Nullstab); |
149 | EXT STAB *sigstab INIT(Nullstab); |
150 | EXT STAB *defoutstab INIT(Nullstab); |
151 | EXT STAB *curoutstab INIT(Nullstab); |
152 | EXT STAB *argvoutstab INIT(Nullstab); |
153 | |
154 | EXT STR *freestrroot INIT(Nullstr); |
155 | |
156 | EXT FILE *rsfp; |
157 | EXT char buf[1024]; |
158 | EXT char *bufptr INIT(buf); |
159 | |
160 | EXT STR *linestr INIT(Nullstr); |
161 | |
162 | EXT char record_separator INIT('\n'); |
163 | EXT char *ofs INIT(Nullch); |
164 | EXT char *ors INIT(Nullch); |
165 | EXT char *ofmt INIT(Nullch); |
166 | EXT char *inplace INIT(Nullch); |
167 | |
168 | EXT char tokenbuf[256]; |
169 | EXT int expectterm INIT(TRUE); |
170 | EXT int lex_newlines INIT(FALSE); |
a559c259 |
171 | EXT int in_eval INIT(FALSE); |
8d063cd8 |
172 | |
173 | FILE *popen(); |
174 | /* char *str_get(); */ |
175 | STR *interp(); |
176 | void free_arg(); |
177 | STIO *stio_new(); |
178 | |
179 | EXT struct stat statbuf; |
180 | EXT struct tms timesbuf; |
181 | |
182 | #ifdef DEBUGGING |
183 | EXT int debug INIT(0); |
184 | EXT int dlevel INIT(0); |
185 | EXT char debname[40]; |
186 | EXT char debdelim[40]; |
187 | #define YYDEBUG; |
188 | extern int yydebug; |
189 | #endif |
190 | |
191 | EXT STR str_no; |
192 | EXT STR str_yes; |
193 | |
194 | /* runtime control stuff */ |
195 | |
196 | EXT struct loop { |
197 | char *loop_label; |
198 | jmp_buf loop_env; |
199 | } loop_stack[32]; |
200 | |
201 | EXT int loop_ptr INIT(-1); |
202 | |
203 | EXT jmp_buf top_env; |
a559c259 |
204 | EXT jmp_buf eval_env; |
8d063cd8 |
205 | |
206 | EXT char *goto_targ INIT(Nullch); /* cmd_exec gets strange when set */ |
207 | |
208 | double atof(); |
209 | long time(); |
210 | struct tm *gmtime(), *localtime(); |
211 | |
8d063cd8 |
212 | #ifdef EUNICE |
213 | #define UNLINK(f) while (unlink(f) >= 0) |
214 | #else |
215 | #define UNLINK unlink |
216 | #endif |