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