perl 1.0 patch 8: perl needed an eval operator and a symbolic debugger
[p5sagit/p5-mst-13.2.git] / perl.h
CommitLineData
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
42typedef struct arg ARG;
43typedef struct cmd CMD;
44typedef struct formcmd FCMD;
45typedef struct scanpat SPAT;
46typedef struct stab STAB;
47typedef struct stio STIO;
48typedef struct string STR;
49typedef struct atbl ARRAY;
50typedef 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])))
69EXT char *Yes INIT("1");
70EXT 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)))
80EXT STR *Str;
81
82#define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
83
84CMD *add_label();
85CMD *block_head();
86CMD *append_line();
87CMD *make_acmd();
88CMD *make_ccmd();
89CMD *invert();
90CMD *addcond();
91CMD *addloop();
92CMD *wopt();
93
94SPAT *stab_to_spat();
95
96STAB *stabent();
97
98ARG *stab_to_arg();
99ARG *op_new();
100ARG *make_op();
101ARG *make_lval();
102ARG *make_match();
103ARG *make_split();
104ARG *flipflip();
105
106STR *arg_to_str();
107STR *str_new();
108STR *stab_str();
a559c259 109STR *eval(); /* this evaluates expressions */
110STR *do_eval(); /* this evaluates eval operator */
8d063cd8 111
112FCMD *load_format();
113
114char *scanpat();
115char *scansubst();
116char *scantrans();
117char *scanstr();
118char *scanreg();
119char *reg_get();
120char *str_append_till();
121char *str_gets();
122
123bool do_match();
124bool do_open();
125bool do_close();
126bool do_print();
127
128int do_subst();
129
130void str_free();
131void freearg();
132
133EXT int line INIT(0);
134EXT int arybase INIT(0);
135
136struct outrec {
137 int o_lines;
138 char *o_str;
139 int o_len;
140};
141
142EXT struct outrec outrec;
143EXT struct outrec toprec;
144
145EXT STAB *last_in_stab INIT(Nullstab);
146EXT STAB *defstab INIT(Nullstab);
147EXT STAB *argvstab INIT(Nullstab);
148EXT STAB *envstab INIT(Nullstab);
149EXT STAB *sigstab INIT(Nullstab);
150EXT STAB *defoutstab INIT(Nullstab);
151EXT STAB *curoutstab INIT(Nullstab);
152EXT STAB *argvoutstab INIT(Nullstab);
153
154EXT STR *freestrroot INIT(Nullstr);
155
156EXT FILE *rsfp;
157EXT char buf[1024];
158EXT char *bufptr INIT(buf);
159
160EXT STR *linestr INIT(Nullstr);
161
162EXT char record_separator INIT('\n');
163EXT char *ofs INIT(Nullch);
164EXT char *ors INIT(Nullch);
165EXT char *ofmt INIT(Nullch);
166EXT char *inplace INIT(Nullch);
167
168EXT char tokenbuf[256];
169EXT int expectterm INIT(TRUE);
170EXT int lex_newlines INIT(FALSE);
a559c259 171EXT int in_eval INIT(FALSE);
8d063cd8 172
173FILE *popen();
174/* char *str_get(); */
175STR *interp();
176void free_arg();
177STIO *stio_new();
178
179EXT struct stat statbuf;
180EXT struct tms timesbuf;
181
182#ifdef DEBUGGING
183EXT int debug INIT(0);
184EXT int dlevel INIT(0);
185EXT char debname[40];
186EXT char debdelim[40];
187#define YYDEBUG;
188extern int yydebug;
189#endif
190
191EXT STR str_no;
192EXT STR str_yes;
193
194/* runtime control stuff */
195
196EXT struct loop {
197 char *loop_label;
198 jmp_buf loop_env;
199} loop_stack[32];
200
201EXT int loop_ptr INIT(-1);
202
203EXT jmp_buf top_env;
a559c259 204EXT jmp_buf eval_env;
8d063cd8 205
206EXT char *goto_targ INIT(Nullch); /* cmd_exec gets strange when set */
207
208double atof();
209long time();
210struct tm *gmtime(), *localtime();
211
8d063cd8 212#ifdef EUNICE
213#define UNLINK(f) while (unlink(f) >= 0)
214#else
215#define UNLINK unlink
216#endif