Commit | Line | Data |
---|---|---|
5303340c | 1 | /* $Header: arg.h,v 3.0.1.8 90/11/10 01:04:36 lwall Locked $ |
a687059c LW |
2 | * |
3 | * Copyright (c) 1989, Larry Wall | |
4 | * | |
5 | * You may distribute under the terms of the GNU General Public License | |
6 | * as specified in the README file that comes with the perl 3.0 kit. | |
8d063cd8 LW |
7 | * |
8 | * $Log: arg.h,v $ | |
5303340c LW |
9 | * Revision 3.0.1.8 90/11/10 01:04:36 lwall |
10 | * patch38: added alarm function | |
11 | * patch38: socket, recv, select, socketpair, setsockopt didn't eval all args | |
12 | * | |
39c3038c LW |
13 | * Revision 3.0.1.7 90/10/15 14:53:59 lwall |
14 | * patch29: added SysV IPC | |
15 | * patch29: added waitpid | |
16 | * patch29: added cmp and <=> | |
17 | * patch29: added caller | |
18 | * patch29: added scalar | |
19 | * patch29: added sysread and syswrite | |
20 | * patch29: added -M, -A and -C | |
21 | * patch29: index and substr now have optional 3rd args | |
22 | * patch29: you can now read into the middle string | |
23 | * patch29: various portability fixes | |
24 | * | |
87250799 LW |
25 | * Revision 3.0.1.6 90/08/09 02:25:14 lwall |
26 | * patch19: added require operator | |
27 | * patch19: added truncate operator | |
28 | * | |
0f85fab0 LW |
29 | * Revision 3.0.1.5 90/03/27 15:29:41 lwall |
30 | * patch16: MSDOS support | |
31 | * | |
ff2452de LW |
32 | * Revision 3.0.1.4 90/03/12 16:18:21 lwall |
33 | * patch13: added list slice operator (LIST)[LIST] | |
34 | * patch13: added splice operator: @oldelems = splice(@array,$offset,$len,LIST) | |
35 | * | |
449aadca LW |
36 | * Revision 3.0.1.3 90/02/28 16:21:55 lwall |
37 | * patch9: added pipe function | |
38 | * | |
d8f2e4cc LW |
39 | * Revision 3.0.1.2 89/12/21 19:13:14 lwall |
40 | * patch7: send() didn't allow a TO argument | |
41 | * | |
03a14243 LW |
42 | * Revision 3.0.1.1 89/10/26 23:02:35 lwall |
43 | * patch1: reverse didn't work | |
44 | * | |
a687059c LW |
45 | * Revision 3.0 89/10/18 15:08:27 lwall |
46 | * 3.0 baseline | |
8d063cd8 LW |
47 | * |
48 | */ | |
49 | ||
50 | #define O_NULL 0 | |
51 | #define O_ITEM 1 | |
52 | #define O_ITEM2 2 | |
53 | #define O_ITEM3 3 | |
54 | #define O_CONCAT 4 | |
55 | #define O_MATCH 5 | |
56 | #define O_NMATCH 6 | |
57 | #define O_SUBST 7 | |
58 | #define O_NSUBST 8 | |
59 | #define O_ASSIGN 9 | |
60 | #define O_MULTIPLY 10 | |
61 | #define O_DIVIDE 11 | |
62 | #define O_MODULO 12 | |
63 | #define O_ADD 13 | |
64 | #define O_SUBTRACT 14 | |
65 | #define O_LEFT_SHIFT 15 | |
66 | #define O_RIGHT_SHIFT 16 | |
67 | #define O_LT 17 | |
68 | #define O_GT 18 | |
69 | #define O_LE 19 | |
70 | #define O_GE 20 | |
71 | #define O_EQ 21 | |
72 | #define O_NE 22 | |
73 | #define O_BIT_AND 23 | |
74 | #define O_XOR 24 | |
75 | #define O_BIT_OR 25 | |
76 | #define O_AND 26 | |
77 | #define O_OR 27 | |
78 | #define O_COND_EXPR 28 | |
79 | #define O_COMMA 29 | |
80 | #define O_NEGATE 30 | |
81 | #define O_NOT 31 | |
82 | #define O_COMPLEMENT 32 | |
83 | #define O_WRITE 33 | |
84 | #define O_OPEN 34 | |
85 | #define O_TRANS 35 | |
86 | #define O_NTRANS 36 | |
87 | #define O_CLOSE 37 | |
88 | #define O_ARRAY 38 | |
89 | #define O_HASH 39 | |
90 | #define O_LARRAY 40 | |
91 | #define O_LHASH 41 | |
92 | #define O_PUSH 42 | |
93 | #define O_POP 43 | |
94 | #define O_SHIFT 44 | |
95 | #define O_SPLIT 45 | |
96 | #define O_LENGTH 46 | |
97 | #define O_SPRINTF 47 | |
98 | #define O_SUBSTR 48 | |
99 | #define O_JOIN 49 | |
100 | #define O_SLT 50 | |
101 | #define O_SGT 51 | |
102 | #define O_SLE 52 | |
103 | #define O_SGE 53 | |
104 | #define O_SEQ 54 | |
105 | #define O_SNE 55 | |
106 | #define O_SUBR 56 | |
107 | #define O_PRINT 57 | |
108 | #define O_CHDIR 58 | |
109 | #define O_DIE 59 | |
110 | #define O_EXIT 60 | |
111 | #define O_RESET 61 | |
112 | #define O_LIST 62 | |
113 | #define O_SELECT 63 | |
114 | #define O_EOF 64 | |
115 | #define O_TELL 65 | |
116 | #define O_SEEK 66 | |
117 | #define O_LAST 67 | |
118 | #define O_NEXT 68 | |
119 | #define O_REDO 69 | |
120 | #define O_GOTO 70 | |
121 | #define O_INDEX 71 | |
122 | #define O_TIME 72 | |
123 | #define O_TMS 73 | |
124 | #define O_LOCALTIME 74 | |
125 | #define O_GMTIME 75 | |
126 | #define O_STAT 76 | |
127 | #define O_CRYPT 77 | |
128 | #define O_EXP 78 | |
129 | #define O_LOG 79 | |
130 | #define O_SQRT 80 | |
131 | #define O_INT 81 | |
132 | #define O_PRTF 82 | |
133 | #define O_ORD 83 | |
134 | #define O_SLEEP 84 | |
135 | #define O_FLIP 85 | |
136 | #define O_FLOP 86 | |
137 | #define O_KEYS 87 | |
138 | #define O_VALUES 88 | |
139 | #define O_EACH 89 | |
140 | #define O_CHOP 90 | |
141 | #define O_FORK 91 | |
39c3038c | 142 | #define O_EXEC_OP 92 |
8d063cd8 LW |
143 | #define O_SYSTEM 93 |
144 | #define O_OCT 94 | |
145 | #define O_HEX 95 | |
146 | #define O_CHMOD 96 | |
147 | #define O_CHOWN 97 | |
148 | #define O_KILL 98 | |
149 | #define O_RENAME 99 | |
150 | #define O_UNLINK 100 | |
151 | #define O_UMASK 101 | |
152 | #define O_UNSHIFT 102 | |
153 | #define O_LINK 103 | |
154 | #define O_REPEAT 104 | |
a559c259 | 155 | #define O_EVAL 105 |
378cc40b LW |
156 | #define O_FTEREAD 106 |
157 | #define O_FTEWRITE 107 | |
158 | #define O_FTEEXEC 108 | |
159 | #define O_FTEOWNED 109 | |
160 | #define O_FTRREAD 110 | |
161 | #define O_FTRWRITE 111 | |
162 | #define O_FTREXEC 112 | |
163 | #define O_FTROWNED 113 | |
164 | #define O_FTIS 114 | |
165 | #define O_FTZERO 115 | |
166 | #define O_FTSIZE 116 | |
167 | #define O_FTFILE 117 | |
168 | #define O_FTDIR 118 | |
169 | #define O_FTLINK 119 | |
170 | #define O_SYMLINK 120 | |
171 | #define O_FTPIPE 121 | |
172 | #define O_FTSOCK 122 | |
173 | #define O_FTBLK 123 | |
174 | #define O_FTCHR 124 | |
175 | #define O_FTSUID 125 | |
176 | #define O_FTSGID 126 | |
177 | #define O_FTSVTX 127 | |
178 | #define O_FTTTY 128 | |
179 | #define O_DOFILE 129 | |
180 | #define O_FTTEXT 130 | |
181 | #define O_FTBINARY 131 | |
182 | #define O_UTIME 132 | |
183 | #define O_WAIT 133 | |
184 | #define O_SORT 134 | |
185 | #define O_DELETE 135 | |
186 | #define O_STUDY 136 | |
a687059c LW |
187 | #define O_ATAN2 137 |
188 | #define O_SIN 138 | |
189 | #define O_COS 139 | |
190 | #define O_RAND 140 | |
191 | #define O_SRAND 141 | |
192 | #define O_POW 142 | |
193 | #define O_RETURN 143 | |
194 | #define O_GETC 144 | |
195 | #define O_MKDIR 145 | |
196 | #define O_RMDIR 146 | |
197 | #define O_GETPPID 147 | |
198 | #define O_GETPGRP 148 | |
199 | #define O_SETPGRP 149 | |
200 | #define O_GETPRIORITY 150 | |
201 | #define O_SETPRIORITY 151 | |
202 | #define O_CHROOT 152 | |
203 | #define O_IOCTL 153 | |
204 | #define O_FCNTL 154 | |
205 | #define O_FLOCK 155 | |
206 | #define O_RINDEX 156 | |
207 | #define O_PACK 157 | |
208 | #define O_UNPACK 158 | |
209 | #define O_READ 159 | |
210 | #define O_WARN 160 | |
211 | #define O_DBMOPEN 161 | |
212 | #define O_DBMCLOSE 162 | |
213 | #define O_ASLICE 163 | |
214 | #define O_HSLICE 164 | |
215 | #define O_LASLICE 165 | |
216 | #define O_LHSLICE 166 | |
217 | #define O_F_OR_R 167 | |
218 | #define O_RANGE 168 | |
219 | #define O_RCAT 169 | |
220 | #define O_AASSIGN 170 | |
221 | #define O_SASSIGN 171 | |
222 | #define O_DUMP 172 | |
223 | #define O_REVERSE 173 | |
224 | #define O_ADDROF 174 | |
225 | #define O_SOCKET 175 | |
226 | #define O_BIND 176 | |
227 | #define O_CONNECT 177 | |
228 | #define O_LISTEN 178 | |
229 | #define O_ACCEPT 179 | |
230 | #define O_SEND 180 | |
231 | #define O_RECV 181 | |
232 | #define O_SSELECT 182 | |
87250799 | 233 | #define O_SOCKPAIR 183 |
a687059c LW |
234 | #define O_DBSUBR 184 |
235 | #define O_DEFINED 185 | |
236 | #define O_UNDEF 186 | |
237 | #define O_READLINK 187 | |
238 | #define O_LSTAT 188 | |
239 | #define O_AELEM 189 | |
240 | #define O_HELEM 190 | |
241 | #define O_LAELEM 191 | |
242 | #define O_LHELEM 192 | |
243 | #define O_LOCAL 193 | |
449aadca | 244 | #define O_PIPE 194 |
a687059c LW |
245 | #define O_FILENO 195 |
246 | #define O_GHBYNAME 196 | |
247 | #define O_GHBYADDR 197 | |
248 | #define O_GHOSTENT 198 | |
249 | #define O_SHOSTENT 199 | |
250 | #define O_EHOSTENT 200 | |
251 | #define O_GSBYNAME 201 | |
252 | #define O_GSBYPORT 202 | |
253 | #define O_GSERVENT 203 | |
254 | #define O_SSERVENT 204 | |
255 | #define O_ESERVENT 205 | |
256 | #define O_GPBYNAME 206 | |
257 | #define O_GPBYNUMBER 207 | |
258 | #define O_GPROTOENT 208 | |
259 | #define O_SPROTOENT 209 | |
260 | #define O_EPROTOENT 210 | |
261 | #define O_GNBYNAME 211 | |
262 | #define O_GNBYADDR 212 | |
263 | #define O_GNETENT 213 | |
264 | #define O_SNETENT 214 | |
265 | #define O_ENETENT 215 | |
266 | #define O_VEC 216 | |
267 | #define O_GREP 217 | |
268 | #define O_GPWNAM 218 | |
269 | #define O_GPWUID 219 | |
270 | #define O_GPWENT 220 | |
271 | #define O_SPWENT 221 | |
272 | #define O_EPWENT 222 | |
273 | #define O_GGRNAM 223 | |
274 | #define O_GGRGID 224 | |
275 | #define O_GGRENT 225 | |
276 | #define O_SGRENT 226 | |
277 | #define O_EGRENT 227 | |
278 | #define O_SHUTDOWN 228 | |
279 | #define O_OPENDIR 229 | |
280 | #define O_READDIR 230 | |
281 | #define O_TELLDIR 231 | |
282 | #define O_SEEKDIR 232 | |
283 | #define O_REWINDDIR 233 | |
284 | #define O_CLOSEDIR 234 | |
285 | #define O_GETLOGIN 235 | |
286 | #define O_SYSCALL 236 | |
287 | #define O_GSOCKOPT 237 | |
288 | #define O_SSOCKOPT 238 | |
289 | #define O_GETSOCKNAME 239 | |
290 | #define O_GETPEERNAME 240 | |
ff2452de LW |
291 | #define O_LSLICE 241 |
292 | #define O_SPLICE 242 | |
0f85fab0 | 293 | #define O_BINMODE 243 |
87250799 LW |
294 | #define O_REQUIRE 244 |
295 | #define O_TRUNCATE 245 | |
39c3038c LW |
296 | #define O_MSGGET 246 |
297 | #define O_MSGCTL 247 | |
298 | #define O_MSGSND 248 | |
299 | #define O_MSGRCV 249 | |
300 | #define O_SEMGET 250 | |
301 | #define O_SEMCTL 251 | |
302 | #define O_SEMOP 252 | |
303 | #define O_SHMGET 253 | |
304 | #define O_SHMCTL 254 | |
305 | #define O_SHMREAD 255 | |
306 | #define O_SHMWRITE 256 | |
307 | #define O_NCMP 257 | |
308 | #define O_SCMP 258 | |
309 | #define O_CALLER 259 | |
310 | #define O_SCALAR 260 | |
311 | #define O_SYSREAD 261 | |
312 | #define O_SYSWRITE 262 | |
313 | #define O_FTMTIME 263 | |
314 | #define O_FTATIME 264 | |
315 | #define O_FTCTIME 265 | |
316 | #define O_WAITPID 266 | |
5303340c LW |
317 | #define O_ALARM 267 |
318 | #define MAXO 268 | |
8d063cd8 LW |
319 | |
320 | #ifndef DOINIT | |
321 | extern char *opname[]; | |
322 | #else | |
323 | char *opname[] = { | |
324 | "NULL", | |
325 | "ITEM", | |
326 | "ITEM2", | |
327 | "ITEM3", | |
328 | "CONCAT", | |
329 | "MATCH", | |
330 | "NMATCH", | |
331 | "SUBST", | |
332 | "NSUBST", | |
333 | "ASSIGN", | |
334 | "MULTIPLY", | |
335 | "DIVIDE", | |
336 | "MODULO", | |
337 | "ADD", | |
338 | "SUBTRACT", | |
339 | "LEFT_SHIFT", | |
340 | "RIGHT_SHIFT", | |
341 | "LT", | |
342 | "GT", | |
343 | "LE", | |
344 | "GE", | |
345 | "EQ", | |
346 | "NE", | |
347 | "BIT_AND", | |
348 | "XOR", | |
349 | "BIT_OR", | |
350 | "AND", | |
351 | "OR", | |
352 | "COND_EXPR", | |
353 | "COMMA", | |
354 | "NEGATE", | |
355 | "NOT", | |
356 | "COMPLEMENT", | |
357 | "WRITE", | |
358 | "OPEN", | |
359 | "TRANS", | |
360 | "NTRANS", | |
361 | "CLOSE", | |
362 | "ARRAY", | |
363 | "HASH", | |
364 | "LARRAY", | |
365 | "LHASH", | |
366 | "PUSH", | |
367 | "POP", | |
368 | "SHIFT", | |
369 | "SPLIT", | |
370 | "LENGTH", | |
371 | "SPRINTF", | |
372 | "SUBSTR", | |
373 | "JOIN", | |
374 | "SLT", | |
375 | "SGT", | |
376 | "SLE", | |
377 | "SGE", | |
378 | "SEQ", | |
379 | "SNE", | |
380 | "SUBR", | |
381 | "PRINT", | |
382 | "CHDIR", | |
383 | "DIE", | |
384 | "EXIT", | |
385 | "RESET", | |
386 | "LIST", | |
387 | "SELECT", | |
388 | "EOF", | |
389 | "TELL", | |
390 | "SEEK", | |
391 | "LAST", | |
392 | "NEXT", | |
393 | "REDO", | |
394 | "GOTO",/* shudder */ | |
395 | "INDEX", | |
396 | "TIME", | |
397 | "TIMES", | |
398 | "LOCALTIME", | |
399 | "GMTIME", | |
400 | "STAT", | |
401 | "CRYPT", | |
402 | "EXP", | |
403 | "LOG", | |
404 | "SQRT", | |
405 | "INT", | |
406 | "PRINTF", | |
407 | "ORD", | |
408 | "SLEEP", | |
409 | "FLIP", | |
410 | "FLOP", | |
411 | "KEYS", | |
412 | "VALUES", | |
413 | "EACH", | |
414 | "CHOP", | |
415 | "FORK", | |
416 | "EXEC", | |
417 | "SYSTEM", | |
418 | "OCT", | |
419 | "HEX", | |
420 | "CHMOD", | |
421 | "CHOWN", | |
422 | "KILL", | |
423 | "RENAME", | |
424 | "UNLINK", | |
425 | "UMASK", | |
426 | "UNSHIFT", | |
427 | "LINK", | |
428 | "REPEAT", | |
a559c259 | 429 | "EVAL", |
378cc40b LW |
430 | "FTEREAD", |
431 | "FTEWRITE", | |
432 | "FTEEXEC", | |
433 | "FTEOWNED", | |
434 | "FTRREAD", | |
435 | "FTRWRITE", | |
436 | "FTREXEC", | |
437 | "FTROWNED", | |
438 | "FTIS", | |
439 | "FTZERO", | |
440 | "FTSIZE", | |
441 | "FTFILE", | |
442 | "FTDIR", | |
443 | "FTLINK", | |
444 | "SYMLINK", | |
445 | "FTPIPE", | |
446 | "FTSOCK", | |
447 | "FTBLK", | |
448 | "FTCHR", | |
449 | "FTSUID", | |
450 | "FTSGID", | |
451 | "FTSVTX", | |
452 | "FTTTY", | |
453 | "DOFILE", | |
454 | "FTTEXT", | |
455 | "FTBINARY", | |
456 | "UTIME", | |
457 | "WAIT", | |
458 | "SORT", | |
459 | "DELETE", | |
460 | "STUDY", | |
a687059c LW |
461 | "ATAN2", |
462 | "SIN", | |
463 | "COS", | |
464 | "RAND", | |
465 | "SRAND", | |
466 | "POW", | |
467 | "RETURN", | |
468 | "GETC", | |
469 | "MKDIR", | |
470 | "RMDIR", | |
471 | "GETPPID", | |
472 | "GETPGRP", | |
473 | "SETPGRP", | |
474 | "GETPRIORITY", | |
475 | "SETPRIORITY", | |
476 | "CHROOT", | |
477 | "IOCTL", | |
478 | "FCNTL", | |
479 | "FLOCK", | |
480 | "RINDEX", | |
481 | "PACK", | |
482 | "UNPACK", | |
483 | "READ", | |
484 | "WARN", | |
485 | "DBMOPEN", | |
486 | "DBMCLOSE", | |
487 | "ASLICE", | |
488 | "HSLICE", | |
489 | "LASLICE", | |
490 | "LHSLICE", | |
491 | "FLIP_OR_RANGE", | |
492 | "RANGE", | |
493 | "RCAT", | |
494 | "AASSIGN", | |
495 | "SASSIGN", | |
496 | "DUMP", | |
497 | "REVERSE", | |
498 | "ADDRESS_OF", | |
499 | "SOCKET", | |
500 | "BIND", | |
501 | "CONNECT", | |
502 | "LISTEN", | |
503 | "ACCEPT", | |
504 | "SEND", | |
505 | "RECV", | |
506 | "SSELECT", | |
87250799 | 507 | "SOCKPAIR", |
a687059c LW |
508 | "DBSUBR", |
509 | "DEFINED", | |
510 | "UNDEF", | |
511 | "READLINK", | |
512 | "LSTAT", | |
513 | "AELEM", | |
514 | "HELEM", | |
515 | "LAELEM", | |
516 | "LHELEM", | |
517 | "LOCAL", | |
449aadca | 518 | "PIPE", |
a687059c LW |
519 | "FILENO", |
520 | "GHBYNAME", | |
521 | "GHBYADDR", | |
522 | "GHOSTENT", | |
523 | "SHOSTENT", | |
524 | "EHOSTENT", | |
525 | "GSBYNAME", | |
526 | "GSBYPORT", | |
527 | "GSERVENT", | |
528 | "SSERVENT", | |
529 | "ESERVENT", | |
530 | "GPBYNAME", | |
531 | "GPBYNUMBER", | |
532 | "GPROTOENT", | |
533 | "SPROTOENT", | |
534 | "EPROTOENT", | |
535 | "GNBYNAME", | |
536 | "GNBYADDR", | |
537 | "GNETENT", | |
538 | "SNETENT", | |
539 | "ENETENT", | |
540 | "VEC", | |
541 | "GREP", | |
542 | "GPWNAM", | |
543 | "GPWUID", | |
544 | "GPWENT", | |
545 | "SPWENT", | |
546 | "EPWENT", | |
547 | "GGRNAM", | |
548 | "GGRGID", | |
549 | "GGRENT", | |
550 | "SGRENT", | |
551 | "EGRENT", | |
552 | "SHUTDOWN", | |
553 | "OPENDIR", | |
554 | "READDIR", | |
555 | "TELLDIR", | |
556 | "SEEKDIR", | |
557 | "REWINDDIR", | |
558 | "CLOSEDIR", | |
559 | "GETLOGIN", | |
560 | "SYSCALL", | |
561 | "GSOCKOPT", | |
562 | "SSOCKOPT", | |
563 | "GETSOCKNAME", | |
564 | "GETPEERNAME", | |
ff2452de LW |
565 | "LSLICE", |
566 | "SPLICE", | |
0f85fab0 | 567 | "BINMODE", |
87250799 LW |
568 | "REQUIRE", |
569 | "TRUNCATE", | |
39c3038c LW |
570 | "MSGGET", |
571 | "MSGCTL", | |
572 | "MSGSND", | |
573 | "MSGRCV", | |
574 | "SEMGET", | |
575 | "SEMCTL", | |
576 | "SEMOP", | |
577 | "SHMGET", | |
578 | "SHMCTL", | |
579 | "SHMREAD", | |
580 | "SHMWRITE", | |
581 | "NCMP", | |
582 | "SCMP", | |
583 | "CALLER", | |
584 | "SCALAR", | |
585 | "SYSREAD", | |
586 | "SYSWRITE", | |
587 | "FTMTIME", | |
588 | "FTATIME", | |
589 | "FTCTIME", | |
590 | "WAITPID", | |
5303340c LW |
591 | "ALARM", |
592 | "268" | |
8d063cd8 LW |
593 | }; |
594 | #endif | |
595 | ||
596 | #define A_NULL 0 | |
597 | #define A_EXPR 1 | |
598 | #define A_CMD 2 | |
599 | #define A_STAB 3 | |
600 | #define A_LVAL 4 | |
601 | #define A_SINGLE 5 | |
602 | #define A_DOUBLE 6 | |
603 | #define A_BACKTICK 7 | |
604 | #define A_READ 8 | |
605 | #define A_SPAT 9 | |
606 | #define A_LEXPR 10 | |
607 | #define A_ARYLEN 11 | |
a687059c | 608 | #define A_ARYSTAB 12 |
378cc40b LW |
609 | #define A_LARYLEN 13 |
610 | #define A_GLOB 14 | |
611 | #define A_WORD 15 | |
612 | #define A_INDREAD 16 | |
a687059c LW |
613 | #define A_LARYSTAB 17 |
614 | #define A_STAR 18 | |
615 | #define A_LSTAR 19 | |
616 | #define A_WANTARRAY 20 | |
617 | ||
618 | #define A_MASK 31 | |
619 | #define A_DONT 32 /* or this into type to suppress evaluation */ | |
8d063cd8 LW |
620 | |
621 | #ifndef DOINIT | |
622 | extern char *argname[]; | |
623 | #else | |
624 | char *argname[] = { | |
625 | "A_NULL", | |
626 | "EXPR", | |
627 | "CMD", | |
628 | "STAB", | |
629 | "LVAL", | |
630 | "SINGLE", | |
631 | "DOUBLE", | |
632 | "BACKTICK", | |
633 | "READ", | |
634 | "SPAT", | |
635 | "LEXPR", | |
636 | "ARYLEN", | |
a687059c | 637 | "ARYSTAB", |
378cc40b LW |
638 | "LARYLEN", |
639 | "GLOB", | |
640 | "WORD", | |
641 | "INDREAD", | |
a687059c LW |
642 | "LARYSTAB", |
643 | "STAR", | |
644 | "LSTAR", | |
645 | "WANTARRAY", | |
646 | "21" | |
8d063cd8 LW |
647 | }; |
648 | #endif | |
649 | ||
650 | #ifndef DOINIT | |
651 | extern bool hoistable[]; | |
652 | #else | |
a687059c LW |
653 | bool hoistable[] = |
654 | {0, /* A_NULL */ | |
655 | 0, /* EXPR */ | |
656 | 1, /* CMD */ | |
657 | 1, /* STAB */ | |
658 | 0, /* LVAL */ | |
659 | 1, /* SINGLE */ | |
660 | 0, /* DOUBLE */ | |
661 | 0, /* BACKTICK */ | |
662 | 0, /* READ */ | |
663 | 0, /* SPAT */ | |
664 | 0, /* LEXPR */ | |
665 | 1, /* ARYLEN */ | |
666 | 1, /* ARYSTAB */ | |
667 | 0, /* LARYLEN */ | |
668 | 0, /* GLOB */ | |
669 | 1, /* WORD */ | |
670 | 0, /* INDREAD */ | |
671 | 0, /* LARYSTAB */ | |
672 | 1, /* STAR */ | |
673 | 1, /* LSTAR */ | |
674 | 1, /* WANTARRAY */ | |
675 | 0, /* 21 */ | |
676 | }; | |
8d063cd8 LW |
677 | #endif |
678 | ||
378cc40b LW |
679 | union argptr { |
680 | ARG *arg_arg; | |
681 | char *arg_cval; | |
682 | STAB *arg_stab; | |
683 | SPAT *arg_spat; | |
684 | CMD *arg_cmd; | |
685 | STR *arg_str; | |
a687059c | 686 | HASH *arg_hash; |
378cc40b LW |
687 | }; |
688 | ||
8d063cd8 | 689 | struct arg { |
378cc40b | 690 | union argptr arg_ptr; |
8d063cd8 | 691 | short arg_len; |
39c3038c LW |
692 | unsigned short arg_type; |
693 | unsigned short arg_flags; | |
8d063cd8 LW |
694 | }; |
695 | ||
a687059c | 696 | #define AF_ARYOK 1 /* op can handle multiple values here */ |
8d063cd8 LW |
697 | #define AF_POST 2 /* post *crement this item */ |
698 | #define AF_PRE 4 /* pre *crement this item */ | |
699 | #define AF_UP 8 /* increment rather than decrement */ | |
700 | #define AF_COMMON 16 /* left and right have symbols in common */ | |
a687059c | 701 | #define AF_UNUSED 32 /* */ |
8d063cd8 | 702 | #define AF_LISTISH 64 /* turn into list if important */ |
378cc40b | 703 | #define AF_LOCAL 128 /* list of local variables */ |
8d063cd8 LW |
704 | |
705 | /* | |
706 | * Most of the ARG pointers are used as pointers to arrays of ARG. When | |
707 | * so used, the 0th element is special, and represents the operator to | |
708 | * use on the list of arguments following. The arg_len in the 0th element | |
709 | * gives the maximum argument number, and the arg_str is used to store | |
710 | * the return value in a more-or-less static location. Sorry it's not | |
a687059c | 711 | * re-entrant (yet), but it sure makes it efficient. The arg_type of the |
8d063cd8 LW |
712 | * 0th element is an operator (O_*) rather than an argument type (A_*). |
713 | */ | |
714 | ||
715 | #define Nullarg Null(ARG*) | |
716 | ||
a687059c | 717 | #ifndef DOINIT |
39c3038c | 718 | EXT unsigned short opargs[MAXO+1]; |
a687059c | 719 | #else |
39c3038c LW |
720 | #define A(e1,e2,e3) (e1+(e2<<2)+(e3<<4)) |
721 | #define A5(e1,e2,e3,e4,e5) (e1+(e2<<2)+(e3<<4)+(e4<<6)+(e5<<8)) | |
722 | unsigned short opargs[MAXO+1] = { | |
a687059c LW |
723 | A(0,0,0), /* NULL */ |
724 | A(1,0,0), /* ITEM */ | |
725 | A(0,0,0), /* ITEM2 */ | |
726 | A(0,0,0), /* ITEM3 */ | |
727 | A(1,1,0), /* CONCAT */ | |
728 | A(1,0,0), /* MATCH */ | |
729 | A(1,0,0), /* NMATCH */ | |
730 | A(1,0,0), /* SUBST */ | |
731 | A(1,0,0), /* NSUBST */ | |
732 | A(1,1,0), /* ASSIGN */ | |
733 | A(1,1,0), /* MULTIPLY */ | |
734 | A(1,1,0), /* DIVIDE */ | |
735 | A(1,1,0), /* MODULO */ | |
736 | A(1,1,0), /* ADD */ | |
737 | A(1,1,0), /* SUBTRACT */ | |
738 | A(1,1,0), /* LEFT_SHIFT */ | |
739 | A(1,1,0), /* RIGHT_SHIFT */ | |
740 | A(1,1,0), /* LT */ | |
741 | A(1,1,0), /* GT */ | |
742 | A(1,1,0), /* LE */ | |
743 | A(1,1,0), /* GE */ | |
744 | A(1,1,0), /* EQ */ | |
745 | A(1,1,0), /* NE */ | |
746 | A(1,1,0), /* BIT_AND */ | |
747 | A(1,1,0), /* XOR */ | |
748 | A(1,1,0), /* BIT_OR */ | |
749 | A(1,0,0), /* AND */ | |
750 | A(1,0,0), /* OR */ | |
751 | A(1,0,0), /* COND_EXPR */ | |
752 | A(1,1,0), /* COMMA */ | |
753 | A(1,0,0), /* NEGATE */ | |
754 | A(1,0,0), /* NOT */ | |
755 | A(1,0,0), /* COMPLEMENT */ | |
756 | A(1,0,0), /* WRITE */ | |
757 | A(1,1,0), /* OPEN */ | |
758 | A(1,0,0), /* TRANS */ | |
759 | A(1,0,0), /* NTRANS */ | |
760 | A(1,0,0), /* CLOSE */ | |
761 | A(0,0,0), /* ARRAY */ | |
762 | A(0,0,0), /* HASH */ | |
763 | A(0,0,0), /* LARRAY */ | |
764 | A(0,0,0), /* LHASH */ | |
765 | A(0,3,0), /* PUSH */ | |
766 | A(0,0,0), /* POP */ | |
767 | A(0,0,0), /* SHIFT */ | |
768 | A(1,0,1), /* SPLIT */ | |
769 | A(1,0,0), /* LENGTH */ | |
770 | A(3,0,0), /* SPRINTF */ | |
771 | A(1,1,1), /* SUBSTR */ | |
772 | A(1,3,0), /* JOIN */ | |
773 | A(1,1,0), /* SLT */ | |
774 | A(1,1,0), /* SGT */ | |
775 | A(1,1,0), /* SLE */ | |
776 | A(1,1,0), /* SGE */ | |
777 | A(1,1,0), /* SEQ */ | |
778 | A(1,1,0), /* SNE */ | |
779 | A(0,3,0), /* SUBR */ | |
780 | A(1,3,0), /* PRINT */ | |
781 | A(1,0,0), /* CHDIR */ | |
782 | A(0,3,0), /* DIE */ | |
783 | A(1,0,0), /* EXIT */ | |
784 | A(1,0,0), /* RESET */ | |
785 | A(3,0,0), /* LIST */ | |
786 | A(1,0,0), /* SELECT */ | |
787 | A(1,0,0), /* EOF */ | |
788 | A(1,0,0), /* TELL */ | |
789 | A(1,1,1), /* SEEK */ | |
790 | A(0,0,0), /* LAST */ | |
791 | A(0,0,0), /* NEXT */ | |
792 | A(0,0,0), /* REDO */ | |
793 | A(0,0,0), /* GOTO */ | |
39c3038c | 794 | A(1,1,1), /* INDEX */ |
a687059c LW |
795 | A(0,0,0), /* TIME */ |
796 | A(0,0,0), /* TIMES */ | |
797 | A(1,0,0), /* LOCALTIME */ | |
798 | A(1,0,0), /* GMTIME */ | |
799 | A(1,0,0), /* STAT */ | |
800 | A(1,1,0), /* CRYPT */ | |
801 | A(1,0,0), /* EXP */ | |
802 | A(1,0,0), /* LOG */ | |
803 | A(1,0,0), /* SQRT */ | |
804 | A(1,0,0), /* INT */ | |
805 | A(1,3,0), /* PRINTF */ | |
806 | A(1,0,0), /* ORD */ | |
807 | A(1,0,0), /* SLEEP */ | |
808 | A(1,0,0), /* FLIP */ | |
809 | A(0,1,0), /* FLOP */ | |
810 | A(0,0,0), /* KEYS */ | |
811 | A(0,0,0), /* VALUES */ | |
812 | A(0,0,0), /* EACH */ | |
813 | A(3,0,0), /* CHOP */ | |
814 | A(0,0,0), /* FORK */ | |
815 | A(1,3,0), /* EXEC */ | |
816 | A(1,3,0), /* SYSTEM */ | |
817 | A(1,0,0), /* OCT */ | |
818 | A(1,0,0), /* HEX */ | |
819 | A(0,3,0), /* CHMOD */ | |
820 | A(0,3,0), /* CHOWN */ | |
821 | A(0,3,0), /* KILL */ | |
822 | A(1,1,0), /* RENAME */ | |
823 | A(0,3,0), /* UNLINK */ | |
824 | A(1,0,0), /* UMASK */ | |
825 | A(0,3,0), /* UNSHIFT */ | |
826 | A(1,1,0), /* LINK */ | |
827 | A(1,1,0), /* REPEAT */ | |
828 | A(1,0,0), /* EVAL */ | |
829 | A(1,0,0), /* FTEREAD */ | |
830 | A(1,0,0), /* FTEWRITE */ | |
831 | A(1,0,0), /* FTEEXEC */ | |
832 | A(1,0,0), /* FTEOWNED */ | |
833 | A(1,0,0), /* FTRREAD */ | |
834 | A(1,0,0), /* FTRWRITE */ | |
835 | A(1,0,0), /* FTREXEC */ | |
836 | A(1,0,0), /* FTROWNED */ | |
837 | A(1,0,0), /* FTIS */ | |
838 | A(1,0,0), /* FTZERO */ | |
839 | A(1,0,0), /* FTSIZE */ | |
840 | A(1,0,0), /* FTFILE */ | |
841 | A(1,0,0), /* FTDIR */ | |
842 | A(1,0,0), /* FTLINK */ | |
843 | A(1,1,0), /* SYMLINK */ | |
844 | A(1,0,0), /* FTPIPE */ | |
845 | A(1,0,0), /* FTSOCK */ | |
846 | A(1,0,0), /* FTBLK */ | |
847 | A(1,0,0), /* FTCHR */ | |
848 | A(1,0,0), /* FTSUID */ | |
849 | A(1,0,0), /* FTSGID */ | |
850 | A(1,0,0), /* FTSVTX */ | |
851 | A(1,0,0), /* FTTTY */ | |
852 | A(1,0,0), /* DOFILE */ | |
853 | A(1,0,0), /* FTTEXT */ | |
854 | A(1,0,0), /* FTBINARY */ | |
855 | A(0,3,0), /* UTIME */ | |
856 | A(0,0,0), /* WAIT */ | |
857 | A(1,3,0), /* SORT */ | |
858 | A(0,1,0), /* DELETE */ | |
859 | A(1,0,0), /* STUDY */ | |
860 | A(1,1,0), /* ATAN2 */ | |
861 | A(1,0,0), /* SIN */ | |
862 | A(1,0,0), /* COS */ | |
863 | A(1,0,0), /* RAND */ | |
864 | A(1,0,0), /* SRAND */ | |
865 | A(1,1,0), /* POW */ | |
866 | A(0,3,0), /* RETURN */ | |
867 | A(1,0,0), /* GETC */ | |
868 | A(1,1,0), /* MKDIR */ | |
869 | A(1,0,0), /* RMDIR */ | |
870 | A(0,0,0), /* GETPPID */ | |
871 | A(1,0,0), /* GETPGRP */ | |
872 | A(1,1,0), /* SETPGRP */ | |
873 | A(1,1,0), /* GETPRIORITY */ | |
874 | A(1,1,1), /* SETPRIORITY */ | |
875 | A(1,0,0), /* CHROOT */ | |
876 | A(1,1,1), /* IOCTL */ | |
877 | A(1,1,1), /* FCNTL */ | |
878 | A(1,1,0), /* FLOCK */ | |
39c3038c | 879 | A(1,1,1), /* RINDEX */ |
a687059c LW |
880 | A(1,3,0), /* PACK */ |
881 | A(1,1,0), /* UNPACK */ | |
39c3038c | 882 | A(1,1,3), /* READ */ |
a687059c LW |
883 | A(0,3,0), /* WARN */ |
884 | A(1,1,1), /* DBMOPEN */ | |
885 | A(1,0,0), /* DBMCLOSE */ | |
886 | A(0,3,0), /* ASLICE */ | |
887 | A(0,3,0), /* HSLICE */ | |
888 | A(0,3,0), /* LASLICE */ | |
889 | A(0,3,0), /* LHSLICE */ | |
890 | A(1,0,0), /* F_OR_R */ | |
891 | A(1,1,0), /* RANGE */ | |
892 | A(1,1,0), /* RCAT */ | |
893 | A(3,3,0), /* AASSIGN */ | |
894 | A(0,0,0), /* SASSIGN */ | |
895 | A(0,0,0), /* DUMP */ | |
03a14243 | 896 | A(0,3,0), /* REVERSE */ |
a687059c | 897 | A(1,0,0), /* ADDROF */ |
5303340c | 898 | A5(1,1,1,1,0), /* SOCKET */ |
a687059c LW |
899 | A(1,1,0), /* BIND */ |
900 | A(1,1,0), /* CONNECT */ | |
901 | A(1,1,0), /* LISTEN */ | |
902 | A(1,1,0), /* ACCEPT */ | |
d8f2e4cc | 903 | A(1,1,3), /* SEND */ |
5303340c LW |
904 | A5(1,1,1,1,0), /* RECV */ |
905 | A5(1,1,1,1,0), /* SSELECT */ | |
906 | A5(1,1,1,1,1), /* SOCKPAIR */ | |
a687059c LW |
907 | A(0,3,0), /* DBSUBR */ |
908 | A(1,0,0), /* DEFINED */ | |
909 | A(1,0,0), /* UNDEF */ | |
910 | A(1,0,0), /* READLINK */ | |
911 | A(1,0,0), /* LSTAT */ | |
912 | A(0,1,0), /* AELEM */ | |
913 | A(0,1,0), /* HELEM */ | |
914 | A(0,1,0), /* LAELEM */ | |
915 | A(0,1,0), /* LHELEM */ | |
916 | A(1,0,0), /* LOCAL */ | |
87250799 | 917 | A(1,1,0), /* PIPE */ |
a687059c LW |
918 | A(1,0,0), /* FILENO */ |
919 | A(1,0,0), /* GHBYNAME */ | |
920 | A(1,1,0), /* GHBYADDR */ | |
921 | A(0,0,0), /* GHOSTENT */ | |
922 | A(1,0,0), /* SHOSTENT */ | |
923 | A(0,0,0), /* EHOSTENT */ | |
924 | A(1,1,0), /* GSBYNAME */ | |
925 | A(1,1,0), /* GSBYPORT */ | |
926 | A(0,0,0), /* GSERVENT */ | |
927 | A(1,0,0), /* SSERVENT */ | |
928 | A(0,0,0), /* ESERVENT */ | |
929 | A(1,0,0), /* GPBYNAME */ | |
930 | A(1,0,0), /* GPBYNUMBER */ | |
931 | A(0,0,0), /* GPROTOENT */ | |
932 | A(1,0,0), /* SPROTOENT */ | |
933 | A(0,0,0), /* EPROTOENT */ | |
934 | A(1,0,0), /* GNBYNAME */ | |
935 | A(1,1,0), /* GNBYADDR */ | |
936 | A(0,0,0), /* GNETENT */ | |
937 | A(1,0,0), /* SNETENT */ | |
938 | A(0,0,0), /* ENETENT */ | |
939 | A(1,1,1), /* VEC */ | |
940 | A(0,3,0), /* GREP */ | |
941 | A(1,0,0), /* GPWNAM */ | |
942 | A(1,0,0), /* GPWUID */ | |
943 | A(0,0,0), /* GPWENT */ | |
944 | A(0,0,0), /* SPWENT */ | |
945 | A(0,0,0), /* EPWENT */ | |
946 | A(1,0,0), /* GGRNAM */ | |
947 | A(1,0,0), /* GGRGID */ | |
948 | A(0,0,0), /* GGRENT */ | |
949 | A(0,0,0), /* SGRENT */ | |
950 | A(0,0,0), /* EGRENT */ | |
951 | A(1,1,0), /* SHUTDOWN */ | |
952 | A(1,1,0), /* OPENDIR */ | |
953 | A(1,0,0), /* READDIR */ | |
954 | A(1,0,0), /* TELLDIR */ | |
955 | A(1,1,0), /* SEEKDIR */ | |
956 | A(1,0,0), /* REWINDDIR */ | |
957 | A(1,0,0), /* CLOSEDIR */ | |
958 | A(0,0,0), /* GETLOGIN */ | |
959 | A(1,3,0), /* SYSCALL */ | |
960 | A(1,1,1), /* GSOCKOPT */ | |
5303340c | 961 | A5(1,1,1,1,0), /* SSOCKOPT */ |
a687059c LW |
962 | A(1,0,0), /* GETSOCKNAME */ |
963 | A(1,0,0), /* GETPEERNAME */ | |
ff2452de LW |
964 | A(0,3,3), /* LSLICE */ |
965 | A(0,3,1), /* SPLICE */ | |
0f85fab0 | 966 | A(1,0,0), /* BINMODE */ |
87250799 LW |
967 | A(1,0,0), /* REQUIRE */ |
968 | A(1,1,0), /* TRUNCATE */ | |
39c3038c LW |
969 | A(1,1,0), /* MSGGET */ |
970 | A(1,1,1), /* MSGCTL */ | |
971 | A(1,1,1), /* MSGSND */ | |
972 | A5(1,1,1,1,1), /* MSGRCV */ | |
973 | A(1,1,1), /* SEMGET */ | |
974 | A5(1,1,1,1,0), /* SEMCTL */ | |
975 | A(1,1,1), /* SEMOP */ | |
976 | A(1,1,1), /* SHMGET */ | |
977 | A(1,1,1), /* SHMCTL */ | |
978 | A5(1,1,1,1,0), /* SHMREAD */ | |
979 | A5(1,1,1,1,0), /* SHMWRITE */ | |
980 | A(1,1,0), /* NCMP */ | |
981 | A(1,1,0), /* SCMP */ | |
982 | A(1,0,0), /* CALLER */ | |
983 | A(1,0,0), /* SCALAR */ | |
984 | A(1,1,3), /* SYSREAD */ | |
985 | A(1,1,3), /* SYSWRITE */ | |
986 | A(1,0,0), /* FTMTIME */ | |
987 | A(1,0,0), /* FTATIME */ | |
988 | A(1,0,0), /* FTCTIME */ | |
989 | A(1,1,0), /* WAITPID */ | |
5303340c | 990 | A(1,0,0), /* ALARM */ |
a687059c LW |
991 | 0 |
992 | }; | |
993 | #undef A | |
39c3038c | 994 | #undef A5 |
a687059c | 995 | #endif |
8d063cd8 LW |
996 | |
997 | int do_trans(); | |
998 | int do_split(); | |
999 | bool do_eof(); | |
1000 | long do_tell(); | |
1001 | bool do_seek(); | |
1002 | int do_tms(); | |
1003 | int do_time(); | |
1004 | int do_stat(); | |
378cc40b LW |
1005 | STR *do_push(); |
1006 | FILE *nextargv(); | |
1007 | STR *do_fttext(); | |
a687059c | 1008 | int do_slice(); |