aboutsummaryrefslogtreecommitdiff
path: root/gnu/usr.bin/perl/perl/arg.h
blob: 53e5583b1924ad4ea83f62a4c74d0d69272ad141 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
/* $RCSfile: arg.h,v $$Revision: 1.3 $$Date: 1995/05/30 05:02:49 $
 *
 *    Copyright (c) 1991, Larry Wall
 *
 *    You may distribute under the terms of either the GNU General Public
 *    License or the Artistic License, as specified in the README file.
 *
 * $Log: arg.h,v $
 * Revision 1.3  1995/05/30 05:02:49  rgrimes
 * Remove trailing whitespace.
 *
 * Revision 1.2  1994/09/11  03:17:24  gclarkii
 * Changed AF_LOCAL to AF_LOCAL_XX so as not to conflict with 4.4 socket.h
 * Added casts to shutup warnings in doio.c
 *
 * Revision 1.1.1.1  1994/09/10  06:27:34  gclarkii
 * Initial import of Perl 4.046 bmaked
 *
 * Revision 1.1.1.1  1993/08/23  21:29:34  nate
 * PERL!
 *
 * Revision 4.0.1.3  92/06/08  11:44:06  lwall
 * patch20: O_PIPE conflicted with Atari
 * patch20: clarified debugging output for literals and double-quoted strings
 *
 * Revision 4.0.1.2  91/11/05  15:51:05  lwall
 * patch11: added eval {}
 * patch11: added sort {} LIST
 *
 * Revision 4.0.1.1  91/06/07  10:18:30  lwall
 * patch4: length($`), length($&), length($') now optimized to avoid string copy
 * patch4: new copyright notice
 * patch4: many, many itty-bitty portability fixes
 *
 * Revision 4.0  91/03/20  01:03:09  lwall
 * 4.0 baseline.
 *
 */

#define O_NULL 0
#define O_RCAT 1
#define O_ITEM 2
#define O_SCALAR 3
#define O_ITEM2 4
#define O_ITEM3 5
#define O_CONCAT 6
#define O_REPEAT 7
#define O_MATCH 8
#define O_NMATCH 9
#define O_SUBST 10
#define O_NSUBST 11
#define O_ASSIGN 12
#define O_LOCAL 13
#define O_AASSIGN 14
#define O_SASSIGN 15
#define O_CHOP 16
#define O_DEFINED 17
#define O_UNDEF 18
#define O_STUDY 19
#define O_POW 20
#define O_MULTIPLY 21
#define O_DIVIDE 22
#define O_MODULO 23
#define O_ADD 24
#define O_SUBTRACT 25
#define O_LEFT_SHIFT 26
#define O_RIGHT_SHIFT 27
#define O_LT 28
#define O_GT 29
#define O_LE 30
#define O_GE 31
#define O_EQ 32
#define O_NE 33
#define O_NCMP 34
#define O_BIT_AND 35
#define O_XOR 36
#define O_BIT_OR 37
#define O_AND 38
#define O_OR 39
#define O_COND_EXPR 40
#define O_COMMA 41
#define O_NEGATE 42
#define O_NOT 43
#define O_COMPLEMENT 44
#define O_SELECT 45
#define O_WRITE 46
#define O_DBMOPEN 47
#define O_DBMCLOSE 48
#define O_OPEN 49
#define O_TRANS 50
#define O_NTRANS 51
#define O_CLOSE 52
#define O_EACH 53
#define O_VALUES 54
#define O_KEYS 55
#define O_LARRAY 56
#define O_ARRAY 57
#define O_AELEM 58
#define O_DELETE 59
#define O_LHASH 60
#define O_HASH 61
#define O_HELEM 62
#define O_LAELEM 63
#define O_LHELEM 64
#define O_LSLICE 65
#define O_ASLICE 66
#define O_HSLICE 67
#define O_LASLICE 68
#define O_LHSLICE 69
#define O_SPLICE 70
#define O_PUSH 71
#define O_POP 72
#define O_SHIFT 73
#define O_UNPACK 74
#define O_SPLIT 75
#define O_LENGTH 76
#define O_SPRINTF 77
#define O_SUBSTR 78
#define O_PACK 79
#define O_GREP 80
#define O_JOIN 81
#define O_SLT 82
#define O_SGT 83
#define O_SLE 84
#define O_SGE 85
#define O_SEQ 86
#define O_SNE 87
#define O_SCMP 88
#define O_SUBR 89
#define O_DBSUBR 90
#define O_CALLER 91
#define O_SORT 92
#define O_REVERSE 93
#define O_WARN 94
#define O_DIE 95
#define O_PRTF 96
#define O_PRINT 97
#define O_CHDIR 98
#define O_EXIT 99
#define O_RESET 100
#define O_LIST 101
#define O_EOF 102
#define O_GETC 103
#define O_TELL 104
#define O_RECV 105
#define O_READ 106
#define O_SYSREAD 107
#define O_SYSWRITE 108
#define O_SEND 109
#define O_SEEK 110
#define O_RETURN 111
#define O_REDO 112
#define O_NEXT 113
#define O_LAST 114
#define O_DUMP 115
#define O_GOTO 116
#define O_INDEX 117
#define O_RINDEX 118
#define O_TIME 119
#define O_TMS 120
#define O_LOCALTIME 121
#define O_GMTIME 122
#define O_TRUNCATE 123
#define O_LSTAT 124
#define O_STAT 125
#define O_CRYPT 126
#define O_ATAN2 127
#define O_SIN 128
#define O_COS 129
#define O_RAND 130
#define O_SRAND 131
#define O_EXP 132
#define O_LOG 133
#define O_SQRT 134
#define O_INT 135
#define O_ORD 136
#define O_ALARM 137
#define O_SLEEP 138
#define O_RANGE 139
#define O_F_OR_R 140
#define O_FLIP 141
#define O_FLOP 142
#define O_FORK 143
#define O_WAIT 144
#define O_WAITPID 145
#define O_SYSTEM 146
#define O_EXEC_OP 147
#define O_HEX 148
#define O_OCT 149
#define O_CHOWN 150
#define O_KILL 151
#define O_UNLINK 152
#define O_CHMOD 153
#define O_UTIME 154
#define O_UMASK 155
#define O_MSGGET 156
#define O_SHMGET 157
#define O_SEMGET 158
#define O_MSGCTL 159
#define O_SHMCTL 160
#define O_SEMCTL 161
#define O_MSGSND 162
#define O_MSGRCV 163
#define O_SEMOP 164
#define O_SHMREAD 165
#define O_SHMWRITE 166
#define O_RENAME 167
#define O_LINK 168
#define O_MKDIR 169
#define O_RMDIR 170
#define O_GETPPID 171
#define O_GETPGRP 172
#define O_SETPGRP 173
#define O_GETPRIORITY 174
#define O_SETPRIORITY 175
#define O_CHROOT 176
#define O_FCNTL 177
#define O_IOCTL 178
#define O_FLOCK 179
#define O_UNSHIFT 180
#define O_REQUIRE 181
#define O_DOFILE 182
#define O_EVAL 183
#define O_FTRREAD 184
#define O_FTRWRITE 185
#define O_FTREXEC 186
#define O_FTEREAD 187
#define O_FTEWRITE 188
#define O_FTEEXEC 189
#define O_FTIS 190
#define O_FTEOWNED 191
#define O_FTROWNED 192
#define O_FTZERO 193
#define O_FTSIZE 194
#define O_FTMTIME 195
#define O_FTATIME 196
#define O_FTCTIME 197
#define O_FTSOCK 198
#define O_FTCHR 199
#define O_FTBLK 200
#define O_FTFILE 201
#define O_FTDIR 202
#define O_FTPIPE 203
#define O_FTLINK 204
#define O_SYMLINK 205
#define O_READLINK 206
#define O_FTSUID 207
#define O_FTSGID 208
#define O_FTSVTX 209
#define O_FTTTY 210
#define O_FTTEXT 211
#define O_FTBINARY 212
#define O_SOCKET 213
#define O_BIND 214
#define O_CONNECT 215
#define O_LISTEN 216
#define O_ACCEPT 217
#define O_GHBYNAME 218
#define O_GHBYADDR 219
#define O_GHOSTENT 220
#define O_GNBYNAME 221
#define O_GNBYADDR 222
#define O_GNETENT 223
#define O_GPBYNAME 224
#define O_GPBYNUMBER 225
#define O_GPROTOENT 226
#define O_GSBYNAME 227
#define O_GSBYPORT 228
#define O_GSERVENT 229
#define O_SHOSTENT 230
#define O_SNETENT 231
#define O_SPROTOENT 232
#define O_SSERVENT 233
#define O_EHOSTENT 234
#define O_ENETENT 235
#define O_EPROTOENT 236
#define O_ESERVENT 237
#define O_SOCKPAIR 238
#define O_SHUTDOWN 239
#define O_GSOCKOPT 240
#define O_SSOCKOPT 241
#define O_GETSOCKNAME 242
#define O_GETPEERNAME 243
#define O_SSELECT 244
#define O_FILENO 245
#define O_BINMODE 246
#define O_VEC 247
#define O_GPWNAM 248
#define O_GPWUID 249
#define O_GPWENT 250
#define O_SPWENT 251
#define O_EPWENT 252
#define O_GGRNAM 253
#define O_GGRGID 254
#define O_GGRENT 255
#define O_SGRENT 256
#define O_EGRENT 257
#define O_GETLOGIN 258
#define O_OPEN_DIR 259
#define O_READDIR 260
#define O_TELLDIR 261
#define O_SEEKDIR 262
#define O_REWINDDIR 263
#define O_CLOSEDIR 264
#define O_SYSCALL 265
#define O_PIPE_OP 266
#define O_TRY 267
#define O_EVALONCE 268
#define MAXO 269

#ifndef DOINIT
extern char *opname[];
#else
char *opname[] = {
    "NULL",
    "RCAT",
    "ITEM",
    "SCALAR",
    "ITEM2",
    "ITEM3",
    "CONCAT",
    "REPEAT",
    "MATCH",
    "NMATCH",
    "SUBST",
    "NSUBST",
    "ASSIGN",
    "LOCAL",
    "AASSIGN",
    "SASSIGN",
    "CHOP",
    "DEFINED",
    "UNDEF",
    "STUDY",
    "POW",
    "MULTIPLY",
    "DIVIDE",
    "MODULO",
    "ADD",
    "SUBTRACT",
    "LEFT_SHIFT",
    "RIGHT_SHIFT",
    "LT",
    "GT",
    "LE",
    "GE",
    "EQ",
    "NE",
    "NCMP",
    "BIT_AND",
    "XOR",
    "BIT_OR",
    "AND",
    "OR",
    "COND_EXPR",
    "COMMA",
    "NEGATE",
    "NOT",
    "COMPLEMENT",
    "SELECT",
    "WRITE",
    "DBMOPEN",
    "DBMCLOSE",
    "OPEN",
    "TRANS",
    "NTRANS",
    "CLOSE",
    "EACH",
    "VALUES",
    "KEYS",
    "LARRAY",
    "ARRAY",
    "AELEM",
    "DELETE",
    "LHASH",
    "HASH",
    "HELEM",
    "LAELEM",
    "LHELEM",
    "LSLICE",
    "ASLICE",
    "HSLICE",
    "LASLICE",
    "LHSLICE",
    "SPLICE",
    "PUSH",
    "POP",
    "SHIFT",
    "UNPACK",
    "SPLIT",
    "LENGTH",
    "SPRINTF",
    "SUBSTR",
    "PACK",
    "GREP",
    "JOIN",
    "SLT",
    "SGT",
    "SLE",
    "SGE",
    "SEQ",
    "SNE",
    "SCMP",
    "SUBR",
    "DBSUBR",
    "CALLER",
    "SORT",
    "REVERSE",
    "WARN",
    "DIE",
    "PRINTF",
    "PRINT",
    "CHDIR",
    "EXIT",
    "RESET",
    "LIST",
    "EOF",
    "GETC",
    "TELL",
    "RECV",
    "READ",
    "SYSREAD",
    "SYSWRITE",
    "SEND",
    "SEEK",
    "RETURN",
    "REDO",
    "NEXT",
    "LAST",
    "DUMP",
    "GOTO",/* shudder */
    "INDEX",
    "RINDEX",
    "TIME",
    "TIMES",
    "LOCALTIME",
    "GMTIME",
    "TRUNCATE",
    "LSTAT",
    "STAT",
    "CRYPT",
    "ATAN2",
    "SIN",
    "COS",
    "RAND",
    "SRAND",
    "EXP",
    "LOG",
    "SQRT",
    "INT",
    "ORD",
    "ALARM",
    "SLEEP",
    "RANGE",
    "FLIP_OR_RANGE",
    "FLIP",
    "FLOP",
    "FORK",
    "WAIT",
    "WAITPID",
    "SYSTEM",
    "EXEC",
    "HEX",
    "OCT",
    "CHOWN",
    "KILL",
    "UNLINK",
    "CHMOD",
    "UTIME",
    "UMASK",
    "MSGGET",
    "SHMGET",
    "SEMGET",
    "MSGCTL",
    "SHMCTL",
    "SEMCTL",
    "MSGSND",
    "MSGRCV",
    "SEMOP",
    "SHMREAD",
    "SHMWRITE",
    "RENAME",
    "LINK",
    "MKDIR",
    "RMDIR",
    "GETPPID",
    "GETPGRP",
    "SETPGRP",
    "GETPRIORITY",
    "SETPRIORITY",
    "CHROOT",
    "FCNTL",
    "SYSIOCTL",
    "FLOCK",
    "UNSHIFT",
    "REQUIRE",
    "DOFILE",
    "EVAL",
    "FTRREAD",
    "FTRWRITE",
    "FTREXEC",
    "FTEREAD",
    "FTEWRITE",
    "FTEEXEC",
    "FTIS",
    "FTEOWNED",
    "FTROWNED",
    "FTZERO",
    "FTSIZE",
    "FTMTIME",
    "FTATIME",
    "FTCTIME",
    "FTSOCK",
    "FTCHR",
    "FTBLK",
    "FTFILE",
    "FTDIR",
    "FTPIPE",
    "FTLINK",
    "SYMLINK",
    "READLINK",
    "FTSUID",
    "FTSGID",
    "FTSVTX",
    "FTTTY",
    "FTTEXT",
    "FTBINARY",
    "SOCKET",
    "BIND",
    "CONNECT",
    "LISTEN",
    "ACCEPT",
    "GHBYNAME",
    "GHBYADDR",
    "GHOSTENT",
    "GNBYNAME",
    "GNBYADDR",
    "GNETENT",
    "GPBYNAME",
    "GPBYNUMBER",
    "GPROTOENT",
    "GSBYNAME",
    "GSBYPORT",
    "GSERVENT",
    "SHOSTENT",
    "SNETENT",
    "SPROTOENT",
    "SSERVENT",
    "EHOSTENT",
    "ENETENT",
    "EPROTOENT",
    "ESERVENT",
    "SOCKPAIR",
    "SHUTDOWN",
    "GSOCKOPT",
    "SSOCKOPT",
    "GETSOCKNAME",
    "GETPEERNAME",
    "SSELECT",
    "FILENO",
    "BINMODE",
    "VEC",
    "GPWNAM",
    "GPWUID",
    "GPWENT",
    "SPWENT",
    "EPWENT",
    "GGRNAM",
    "GGRGID",
    "GGRENT",
    "SGRENT",
    "EGRENT",
    "GETLOGIN",
    "OPENDIR",
    "READDIR",
    "TELLDIR",
    "SEEKDIR",
    "REWINDDIR",
    "CLOSEDIR",
    "SYSCALL",
    "PIPE",
    "TRY",
    "EVALONCE",
    "269"
};
#endif

#define A_NULL 0
#define A_EXPR 1
#define A_CMD 2
#define A_STAB 3
#define A_LVAL 4
#define A_SINGLE 5
#define A_DOUBLE 6
#define A_BACKTICK 7
#define A_READ 8
#define A_SPAT 9
#define A_LEXPR 10
#define A_ARYLEN 11
#define A_ARYSTAB 12
#define A_LARYLEN 13
#define A_GLOB 14
#define A_WORD 15
#define A_INDREAD 16
#define A_LARYSTAB 17
#define A_STAR 18
#define A_LSTAR 19
#define A_WANTARRAY 20
#define A_LENSTAB 21

#define A_MASK 31
#define A_DONT 32		/* or this into type to suppress evaluation */

#ifndef DOINIT
extern char *argname[];
#else
char *argname[] = {
    "A_NULL",
    "EXPR",
    "CMD",
    "STAB",
    "LVAL",
    "LITERAL",
    "DOUBLEQUOTE",
    "BACKTICK",
    "READ",
    "SPAT",
    "LEXPR",
    "ARYLEN",
    "ARYSTAB",
    "LARYLEN",
    "GLOB",
    "WORD",
    "INDREAD",
    "LARYSTAB",
    "STAR",
    "LSTAR",
    "WANTARRAY",
    "LENSTAB",
    "22"
};
#endif

#ifndef DOINIT
extern bool hoistable[];
#else
bool hoistable[] =
  {0,	/* A_NULL */
   0,	/* EXPR */
   1,	/* CMD */
   1,	/* STAB */
   0,	/* LVAL */
   1,	/* SINGLE */
   0,	/* DOUBLE */
   0,	/* BACKTICK */
   0,	/* READ */
   0,	/* SPAT */
   0,	/* LEXPR */
   1,	/* ARYLEN */
   1,	/* ARYSTAB */
   0,	/* LARYLEN */
   0,	/* GLOB */
   1,	/* WORD */
   0,	/* INDREAD */
   0,	/* LARYSTAB */
   1,	/* STAR */
   1,	/* LSTAR */
   1,	/* WANTARRAY */
   0,	/* LENSTAB */
   0,	/* 21 */
};
#endif

union argptr {
    ARG		*arg_arg;
    char	*arg_cval;
    STAB	*arg_stab;
    SPAT	*arg_spat;
    CMD		*arg_cmd;
    STR		*arg_str;
    HASH	*arg_hash;
};

struct arg {
    union argptr arg_ptr;
    short	arg_len;
    unsigned short arg_type;
    unsigned short arg_flags;
};

#define AF_ARYOK 1		/* op can handle multiple values here */
#define AF_POST 2		/* post *crement this item */
#define AF_PRE 4		/* pre *crement this item */
#define AF_UP 8			/* increment rather than decrement */
#define AF_COMMON 16		/* left and right have symbols in common */
#define AF_DEPR 32		/* an older form of the construct */
#define AF_LISTISH 64		/* turn into list if important */
#define AF_LOCAL_XX 128		/* list of local variables */

/*
 * Most of the ARG pointers are used as pointers to arrays of ARG.  When
 * so used, the 0th element is special, and represents the operator to
 * use on the list of arguments following.  The arg_len in the 0th element
 * gives the maximum argument number, and the arg_str is used to store
 * the return value in a more-or-less static location.  Sorry it's not
 * re-entrant (yet), but it sure makes it efficient.  The arg_type of the
 * 0th element is an operator (O_*) rather than an argument type (A_*).
 */

#define Nullarg Null(ARG*)

#ifndef DOINIT
EXT unsigned short opargs[MAXO+1];
#else
#define A(e1,e2,e3)        (e1+(e2<<2)+(e3<<4))
#define A5(e1,e2,e3,e4,e5) (e1+(e2<<2)+(e3<<4)+(e4<<6)+(e5<<8))
unsigned short opargs[MAXO+1] = {
	A(0,0,0),	/* NULL */
	A(1,1,0),	/* RCAT */
	A(1,0,0),	/* ITEM */
	A(1,0,0),	/* SCALAR */
	A(0,0,0),	/* ITEM2 */
	A(0,0,0),	/* ITEM3 */
	A(1,1,0),	/* CONCAT */
	A(3,1,0),	/* REPEAT */
	A(1,0,0),	/* MATCH */
	A(1,0,0),	/* NMATCH */
	A(1,0,0),	/* SUBST */
	A(1,0,0),	/* NSUBST */
	A(1,1,0),	/* ASSIGN */
	A(1,0,0),	/* LOCAL */
	A(3,3,0),	/* AASSIGN */
	A(0,0,0),	/* SASSIGN */
	A(3,0,0),	/* CHOP */
	A(1,0,0),	/* DEFINED */
	A(1,0,0),	/* UNDEF */
	A(1,0,0),	/* STUDY */
	A(1,1,0),	/* POW */
	A(1,1,0),	/* MULTIPLY */
	A(1,1,0),	/* DIVIDE */
	A(1,1,0),	/* MODULO */
	A(1,1,0),	/* ADD */
	A(1,1,0),	/* SUBTRACT */
	A(1,1,0),	/* LEFT_SHIFT */
	A(1,1,0),	/* RIGHT_SHIFT */
	A(1,1,0),	/* LT */
	A(1,1,0),	/* GT */
	A(1,1,0),	/* LE */
	A(1,1,0),	/* GE */
	A(1,1,0),	/* EQ */
	A(1,1,0),	/* NE */
	A(1,1,0),	/* NCMP */
	A(1,1,0),	/* BIT_AND */
	A(1,1,0),	/* XOR */
	A(1,1,0),	/* BIT_OR */
	A(1,0,0),	/* AND */
	A(1,0,0),	/* OR */
	A(1,0,0),	/* COND_EXPR */
	A(1,1,0),	/* COMMA */
	A(1,0,0),	/* NEGATE */
	A(1,0,0),	/* NOT */
	A(1,0,0),	/* COMPLEMENT */
	A(1,0,0),	/* SELECT */
	A(1,0,0),	/* WRITE */
	A(1,1,1),	/* DBMOPEN */
	A(1,0,0),	/* DBMCLOSE */
	A(1,1,0),	/* OPEN */
	A(1,0,0),	/* TRANS */
	A(1,0,0),	/* NTRANS */
	A(1,0,0),	/* CLOSE */
	A(0,0,0),	/* EACH */
	A(0,0,0),	/* VALUES */
	A(0,0,0),	/* KEYS */
	A(0,0,0),	/* LARRAY */
	A(0,0,0),	/* ARRAY */
	A(0,1,0),	/* AELEM */
	A(0,1,0),	/* DELETE */
	A(0,0,0),	/* LHASH */
	A(0,0,0),	/* HASH */
	A(0,1,0),	/* HELEM */
	A(0,1,0),	/* LAELEM */
	A(0,1,0),	/* LHELEM */
	A(0,3,3),	/* LSLICE */
	A(0,3,0),	/* ASLICE */
	A(0,3,0),	/* HSLICE */
	A(0,3,0),	/* LASLICE */
	A(0,3,0),	/* LHSLICE */
	A(0,3,1),	/* SPLICE */
	A(0,3,0),	/* PUSH */
	A(0,0,0),	/* POP */
	A(0,0,0),	/* SHIFT */
	A(1,1,0),	/* UNPACK */
	A(1,0,1),	/* SPLIT */
	A(1,0,0),	/* LENGTH */
	A(3,0,0),	/* SPRINTF */
	A(1,1,1),	/* SUBSTR */
	A(1,3,0),	/* PACK */
	A(0,3,0),	/* GREP */
	A(1,3,0),	/* JOIN */
	A(1,1,0),	/* SLT */
	A(1,1,0),	/* SGT */
	A(1,1,0),	/* SLE */
	A(1,1,0),	/* SGE */
	A(1,1,0),	/* SEQ */
	A(1,1,0),	/* SNE */
	A(1,1,0),	/* SCMP */
	A(0,3,0),	/* SUBR */
	A(0,3,0),	/* DBSUBR */
	A(1,0,0),	/* CALLER */
	A(1,3,0),	/* SORT */
	A(0,3,0),	/* REVERSE */
	A(0,3,0),	/* WARN */
	A(0,3,0),	/* DIE */
	A(1,3,0),	/* PRINTF */
	A(1,3,0),	/* PRINT */
	A(1,0,0),	/* CHDIR */
	A(1,0,0),	/* EXIT */
	A(1,0,0),	/* RESET */
	A(3,0,0),	/* LIST */
	A(1,0,0),	/* EOF */
	A(1,0,0),	/* GETC */
	A(1,0,0),	/* TELL */
	A5(1,1,1,1,0),	/* RECV */
	A(1,1,3),	/* READ */
	A(1,1,3),	/* SYSREAD */
	A(1,1,3),	/* SYSWRITE */
	A(1,1,3),	/* SEND */
	A(1,1,1),	/* SEEK */
	A(0,3,0),	/* RETURN */
	A(0,0,0),	/* REDO */
	A(0,0,0),	/* NEXT */
	A(0,0,0),	/* LAST */
	A(0,0,0),	/* DUMP */
	A(0,0,0),	/* GOTO */
	A(1,1,1),	/* INDEX */
	A(1,1,1),	/* RINDEX */
	A(0,0,0),	/* TIME */
	A(0,0,0),	/* TIMES */
	A(1,0,0),	/* LOCALTIME */
	A(1,0,0),	/* GMTIME */
	A(1,1,0),	/* TRUNCATE */
	A(1,0,0),	/* LSTAT */
	A(1,0,0),	/* STAT */
	A(1,1,0),	/* CRYPT */
	A(1,1,0),	/* ATAN2 */
	A(1,0,0),	/* SIN */
	A(1,0,0),	/* COS */
	A(1,0,0),	/* RAND */
	A(1,0,0),	/* SRAND */
	A(1,0,0),	/* EXP */
	A(1,0,0),	/* LOG */
	A(1,0,0),	/* SQRT */
	A(1,0,0),	/* INT */
	A(1,0,0),	/* ORD */
	A(1,0,0),	/* ALARM */
	A(1,0,0),	/* SLEEP */
	A(1,1,0),	/* RANGE */
	A(1,0,0),	/* F_OR_R */
	A(1,0,0),	/* FLIP */
	A(0,1,0),	/* FLOP */
	A(0,0,0),	/* FORK */
	A(0,0,0),	/* WAIT */
	A(1,1,0),	/* WAITPID */
	A(1,3,0),	/* SYSTEM */
	A(1,3,0),	/* EXEC */
	A(1,0,0),	/* HEX */
	A(1,0,0),	/* OCT */
	A(0,3,0),	/* CHOWN */
	A(0,3,0),	/* KILL */
	A(0,3,0),	/* UNLINK */
	A(0,3,0),	/* CHMOD */
	A(0,3,0),	/* UTIME */
	A(1,0,0),	/* UMASK */
	A(1,1,0),	/* MSGGET */
	A(1,1,1),	/* SHMGET */
	A(1,1,1),	/* SEMGET */
	A(1,1,1),	/* MSGCTL */
	A(1,1,1),	/* SHMCTL */
	A5(1,1,1,1,0),	/* SEMCTL */
	A(1,1,1),	/* MSGSND */
	A5(1,1,1,1,1),	/* MSGRCV */
	A(1,1,1),	/* SEMOP */
	A5(1,1,1,1,0),	/* SHMREAD */
	A5(1,1,1,1,0),	/* SHMWRITE */
	A(1,1,0),	/* RENAME */
	A(1,1,0),	/* LINK */
	A(1,1,0),	/* MKDIR */
	A(1,0,0),	/* RMDIR */
	A(0,0,0),	/* GETPPID */
	A(1,0,0),	/* GETPGRP */
	A(1,1,0),	/* SETPGRP */
	A(1,1,0),	/* GETPRIORITY */
	A(1,1,1),	/* SETPRIORITY */
	A(1,0,0),	/* CHROOT */
	A(1,1,1),	/* FCNTL */
	A(1,1,1),	/* SYSIOCTL */
	A(1,1,0),	/* FLOCK */
	A(0,3,0),	/* UNSHIFT */
	A(1,0,0),	/* REQUIRE */
	A(1,0,0),	/* DOFILE */
	A(1,0,0),	/* EVAL */
	A(1,0,0),	/* FTRREAD */
	A(1,0,0),	/* FTRWRITE */
	A(1,0,0),	/* FTREXEC */
	A(1,0,0),	/* FTEREAD */
	A(1,0,0),	/* FTEWRITE */
	A(1,0,0),	/* FTEEXEC */
	A(1,0,0),	/* FTIS */
	A(1,0,0),	/* FTEOWNED */
	A(1,0,0),	/* FTROWNED */
	A(1,0,0),	/* FTZERO */
	A(1,0,0),	/* FTSIZE */
	A(1,0,0),	/* FTMTIME */
	A(1,0,0),	/* FTATIME */
	A(1,0,0),	/* FTCTIME */
	A(1,0,0),	/* FTSOCK */
	A(1,0,0),	/* FTCHR */
	A(1,0,0),	/* FTBLK */
	A(1,0,0),	/* FTFILE */
	A(1,0,0),	/* FTDIR */
	A(1,0,0),	/* FTPIPE */
	A(1,0,0),	/* FTLINK */
	A(1,1,0),	/* SYMLINK */
	A(1,0,0),	/* READLINK */
	A(1,0,0),	/* FTSUID */
	A(1,0,0),	/* FTSGID */
	A(1,0,0),	/* FTSVTX */
	A(1,0,0),	/* FTTTY */
	A(1,0,0),	/* FTTEXT */
	A(1,0,0),	/* FTBINARY */
	A5(1,1,1,1,0),	/* SOCKET */
	A(1,1,0),	/* BIND */
	A(1,1,0),	/* CONNECT */
	A(1,1,0),	/* LISTEN */
	A(1,1,0),	/* ACCEPT */
	A(1,0,0),	/* GHBYNAME */
	A(1,1,0),	/* GHBYADDR */
	A(0,0,0),	/* GHOSTENT */
	A(1,0,0),	/* GNBYNAME */
	A(1,1,0),	/* GNBYADDR */
	A(0,0,0),	/* GNETENT */
	A(1,0,0),	/* GPBYNAME */
	A(1,0,0),	/* GPBYNUMBER */
	A(0,0,0),	/* GPROTOENT */
	A(1,1,0),	/* GSBYNAME */
	A(1,1,0),	/* GSBYPORT */
	A(0,0,0),	/* GSERVENT */
	A(1,0,0),	/* SHOSTENT */
	A(1,0,0),	/* SNETENT */
	A(1,0,0),	/* SPROTOENT */
	A(1,0,0),	/* SSERVENT */
	A(0,0,0),	/* EHOSTENT */
	A(0,0,0),	/* ENETENT */
	A(0,0,0),	/* EPROTOENT */
	A(0,0,0),	/* ESERVENT */
	A5(1,1,1,1,1),	/* SOCKPAIR */
	A(1,1,0),	/* SHUTDOWN */
	A(1,1,1),	/* GSOCKOPT */
	A5(1,1,1,1,0),	/* SSOCKOPT */
	A(1,0,0),	/* GETSOCKNAME */
	A(1,0,0),	/* GETPEERNAME */
	A5(1,1,1,1,0),	/* SSELECT */
	A(1,0,0),	/* FILENO */
	A(1,0,0),	/* BINMODE */
	A(1,1,1),	/* VEC */
	A(1,0,0),	/* GPWNAM */
	A(1,0,0),	/* GPWUID */
	A(0,0,0),	/* GPWENT */
	A(0,0,0),	/* SPWENT */
	A(0,0,0),	/* EPWENT */
	A(1,0,0),	/* GGRNAM */
	A(1,0,0),	/* GGRGID */
	A(0,0,0),	/* GGRENT */
	A(0,0,0),	/* SGRENT */
	A(0,0,0),	/* EGRENT */
	A(0,0,0),	/* GETLOGIN */
	A(1,1,0),	/* OPENDIR */
	A(1,0,0),	/* READDIR */
	A(1,0,0),	/* TELLDIR */
	A(1,1,0),	/* SEEKDIR */
	A(1,0,0),	/* REWINDDIR */
	A(1,0,0),	/* CLOSEDIR */
	A(1,3,0),	/* SYSCALL */
	A(1,1,0),	/* PIPE */
	A(0,0,0),	/* TRY */
	A(1,0,0),	/* EVALONCE */
	0
};
#undef A
#undef A5
#endif

int do_trans();
int do_split();
bool do_eof();
long do_tell();
bool do_seek();
int do_tms();
int do_time();
int do_stat();
STR *do_push();
FILE *nextargv();
STR *do_fttext();
int do_slice();