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