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