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