This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl 2.0 patch 1: removed redundant debugging code in regexp.c
[perl5.git] / perl.h
CommitLineData
378cc40b 1/* $Header: perl.h,v 2.0 88/06/05 00:09:21 root Exp $
8d063cd8
LW
2 *
3 * $Log: perl.h,v $
378cc40b
LW
4 * Revision 2.0 88/06/05 00:09:21 root
5 * Baseline version 2.0.
8d063cd8
LW
6 *
7 */
8
378cc40b 9#ifndef lint
8d063cd8 10#define DEBUGGING
378cc40b 11#endif
8d063cd8
LW
12
13#define VOIDUSED 1
14#include "config.h"
15
378cc40b
LW
16#ifdef MEMCPY
17extern char *memcpy(), *memset();
18#define bcopy(s1,s2,l) memcpy(s2,s1,l);
19#define bzero(s,l) memset(s,0,l);
8d063cd8
LW
20#endif
21
22#include <stdio.h>
23#include <ctype.h>
24#include <setjmp.h>
378cc40b
LW
25#include <sys/param.h> /* if this needs types.h we're still wrong */
26
27#ifndef _TYPES_ /* If types.h defines this it's easy. */
28#ifndef major /* Does everyone's types.h define this? */
8d063cd8 29#include <sys/types.h>
378cc40b
LW
30#endif
31#endif
32
8d063cd8 33#include <sys/stat.h>
135863df
AB
34
35#ifdef TMINSYS
36#include <sys/time.h>
37#else
8d063cd8 38#include <time.h>
135863df
AB
39#endif
40
8d063cd8
LW
41#include <sys/times.h>
42
43typedef struct arg ARG;
44typedef struct cmd CMD;
45typedef struct formcmd FCMD;
46typedef struct scanpat SPAT;
47typedef struct stab STAB;
48typedef struct stio STIO;
378cc40b 49typedef struct sub SUBR;
8d063cd8
LW
50typedef struct string STR;
51typedef struct atbl ARRAY;
52typedef struct htbl HASH;
378cc40b 53typedef struct regexp REGEXP;
8d063cd8 54
378cc40b
LW
55#include "handy.h"
56#include "regexp.h"
8d063cd8 57#include "str.h"
378cc40b 58#include "util.h"
8d063cd8
LW
59#include "form.h"
60#include "stab.h"
61#include "spat.h"
62#include "arg.h"
63#include "cmd.h"
64#include "array.h"
65#include "hash.h"
66
135863df
AB
67#ifdef CHARSPRINTF
68 char *sprintf();
69#else
70 int sprintf();
71#endif
72
8d063cd8
LW
73/* A string is TRUE if not "" or "0". */
74#define True(val) (tmps = (val), (*tmps && !(*tmps == '0' && !tmps[1])))
75EXT char *Yes INIT("1");
76EXT char *No INIT("");
77
78#define str_true(str) (Str = (str), (Str->str_pok ? True(Str->str_ptr) : (Str->str_nok ? (Str->str_nval != 0.0) : 0 )))
79
135863df 80#ifdef DEBUGGING
378cc40b 81#define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),(char*)buf) : "" )))
135863df
AB
82#endif
83
8d063cd8
LW
84#define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
85#define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_nval : str_2num(Str)))
86EXT STR *Str;
87
88#define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
89
90CMD *add_label();
91CMD *block_head();
92CMD *append_line();
93CMD *make_acmd();
94CMD *make_ccmd();
95CMD *invert();
96CMD *addcond();
97CMD *addloop();
98CMD *wopt();
378cc40b 99CMD *over();
8d063cd8 100
378cc40b 101SPAT *stab2spat();
8d063cd8
LW
102
103STAB *stabent();
378cc40b 104STAB *genstab();
8d063cd8 105
378cc40b 106ARG *stab2arg();
8d063cd8
LW
107ARG *op_new();
108ARG *make_op();
109ARG *make_lval();
110ARG *make_match();
111ARG *make_split();
112ARG *flipflip();
378cc40b
LW
113ARG *listish();
114ARG *localize();
115ARG *l();
116ARG *mod_match();
117ARG *make_list();
118ARG *cmd_to_arg();
119ARG *addflags();
120ARG *hide_ary();
121ARG *cval_to_arg();
8d063cd8
LW
122
123STR *arg_to_str();
124STR *str_new();
125STR *stab_str();
a559c259
LW
126STR *eval(); /* this evaluates expressions */
127STR *do_eval(); /* this evaluates eval operator */
378cc40b
LW
128STR *do_each();
129STR *do_subr();
130STR *do_match();
131
132SUBR *make_sub();
8d063cd8
LW
133
134FCMD *load_format();
135
136char *scanpat();
137char *scansubst();
138char *scantrans();
139char *scanstr();
140char *scanreg();
141char *reg_get();
142char *str_append_till();
143char *str_gets();
144
8d063cd8
LW
145bool do_open();
146bool do_close();
147bool do_print();
378cc40b
LW
148bool do_aprint();
149bool do_exec();
150bool do_aexec();
8d063cd8
LW
151
152int do_subst();
378cc40b
LW
153int cando();
154int ingroup();
8d063cd8 155
378cc40b
LW
156void str_grow();
157void str_replace();
158void str_inc();
159void str_dec();
8d063cd8
LW
160void str_free();
161void freearg();
378cc40b
LW
162void savelist();
163void restorelist();
164void ajoin();
165void do_join();
166void do_assign();
167void do_sprintf();
168
169EXT line_t line INIT(0);
8d063cd8
LW
170EXT int arybase INIT(0);
171
172struct outrec {
378cc40b
LW
173 line_t o_lines;
174 char *o_str;
175 int o_len;
8d063cd8
LW
176};
177
178EXT struct outrec outrec;
179EXT struct outrec toprec;
180
181EXT STAB *last_in_stab INIT(Nullstab);
182EXT STAB *defstab INIT(Nullstab);
183EXT STAB *argvstab INIT(Nullstab);
184EXT STAB *envstab INIT(Nullstab);
185EXT STAB *sigstab INIT(Nullstab);
186EXT STAB *defoutstab INIT(Nullstab);
187EXT STAB *curoutstab INIT(Nullstab);
188EXT STAB *argvoutstab INIT(Nullstab);
378cc40b 189EXT STAB *incstab INIT(Nullstab);
8d063cd8
LW
190
191EXT STR *freestrroot INIT(Nullstr);
378cc40b 192EXT STR *lastretstr INIT(Nullstr);
8d063cd8 193
378cc40b
LW
194EXT char *filename;
195EXT char *origfilename;
8d063cd8
LW
196EXT FILE *rsfp;
197EXT char buf[1024];
198EXT char *bufptr INIT(buf);
199
200EXT STR *linestr INIT(Nullstr);
201
202EXT char record_separator INIT('\n');
203EXT char *ofs INIT(Nullch);
204EXT char *ors INIT(Nullch);
205EXT char *ofmt INIT(Nullch);
206EXT char *inplace INIT(Nullch);
207
378cc40b
LW
208EXT bool preprocess INIT(FALSE);
209EXT bool minus_n INIT(FALSE);
210EXT bool minus_p INIT(FALSE);
211EXT bool minus_a INIT(FALSE);
212EXT bool doswitches INIT(FALSE);
213EXT bool dowarn INIT(FALSE);
214EXT bool allstabs INIT(FALSE); /* init all customary symbols in symbol table?*/
215EXT bool sawampersand INIT(FALSE); /* must save all match strings */
216EXT bool sawstudy INIT(FALSE); /* do fbminstr on all strings */
217
218#define TMPPATH "/tmp/perl-eXXXXXX"
219EXT char *e_tmpname;
220EXT FILE *e_fp INIT(Nullfp);
221
8d063cd8
LW
222EXT char tokenbuf[256];
223EXT int expectterm INIT(TRUE);
224EXT int lex_newlines INIT(FALSE);
a559c259 225EXT int in_eval INIT(FALSE);
378cc40b
LW
226EXT int multiline INIT(0);
227EXT int forkprocess;
8d063cd8
LW
228
229FILE *popen();
230/* char *str_get(); */
231STR *interp();
232void free_arg();
233STIO *stio_new();
234
235EXT struct stat statbuf;
236EXT struct tms timesbuf;
378cc40b
LW
237EXT int uid;
238EXT int euid;
239UIDTYPE getuid();
240UIDTYPE geteuid();
241GIDTYPE getgid();
242GIDTYPE getegid();
243EXT int unsafe;
8d063cd8
LW
244
245#ifdef DEBUGGING
246EXT int debug INIT(0);
247EXT int dlevel INIT(0);
378cc40b
LW
248EXT char debname[128];
249EXT char debdelim[128];
d96024cf 250#define YYDEBUG 1
8d063cd8
LW
251extern int yydebug;
252#endif
253
378cc40b
LW
254EXT line_t cmdline INIT(NOLINE);
255
8d063cd8
LW
256EXT STR str_no;
257EXT STR str_yes;
258
259/* runtime control stuff */
260
261EXT struct loop {
262 char *loop_label;
263 jmp_buf loop_env;
378cc40b 264} loop_stack[64];
8d063cd8
LW
265
266EXT int loop_ptr INIT(-1);
267
268EXT jmp_buf top_env;
a559c259 269EXT jmp_buf eval_env;
8d063cd8
LW
270
271EXT char *goto_targ INIT(Nullch); /* cmd_exec gets strange when set */
272
378cc40b
LW
273EXT ARRAY *savestack; /* to save non-local values on */
274
275EXT ARRAY *tosave; /* strings to save on recursive subroutine */
276
8d063cd8 277double atof();
378cc40b
LW
278unsigned sleep();
279long time(), times();
8d063cd8 280struct tm *gmtime(), *localtime();
378cc40b
LW
281char *mktemp();
282char *index(), *rindex();
283char *strcpy(), *strcat();
8d063cd8 284
8d063cd8 285#ifdef EUNICE
378cc40b
LW
286#define UNLINK unlnk
287int unlnk();
8d063cd8
LW
288#else
289#define UNLINK unlink
290#endif