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