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