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