home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / PERL4036.ZIP / arg.h next >
C/C++ Source or Header  |  1993-02-08  |  20KB  |  992 lines

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