perl 1.0 patch 8: perl needed an eval operator and a symbolic debugger
[p5sagit/p5-mst-13.2.git] / perl.h
1 /* $Header: perl.h,v 1.0.1.3 88/01/28 10:24:17 root Exp $
2  *
3  * $Log:        perl.h,v $
4  * Revision 1.0.1.3  88/01/28  10:24:17  root
5  * patch8: added eval operator.
6  * 
7  * Revision 1.0.1.2  88/01/24  03:53:47  root
8  * patch 2: hid str_peek() in #ifdef DEBUGGING.
9  * 
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  * 
13  * Revision 1.0  87/12/18  13:05:38  root
14  * Initial revision
15  * 
16  */
17
18 #define DEBUGGING
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>
33
34 #ifdef TMINSYS
35 #include <sys/time.h>
36 #else
37 #include <time.h>
38 #endif
39
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
61 #ifdef CHARSPRINTF
62     char *sprintf();
63 #else
64     int sprintf();
65 #endif
66
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
74 #ifdef DEBUGGING
75 #define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),buf) : "" )))
76 #endif
77
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();
109 STR *eval();            /* this evaluates expressions */
110 STR *do_eval();         /* this evaluates eval operator */
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);
171 EXT int in_eval INIT(FALSE);
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;
204 EXT jmp_buf eval_env;
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
212 #ifdef EUNICE
213 #define UNLINK(f) while (unlink(f) >= 0)
214 #else
215 #define UNLINK unlink
216 #endif