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