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