perl 4.0 patch 19: (combined patch)
[p5sagit/p5-mst-13.2.git] / arg.h
diff --git a/arg.h b/arg.h
index 1082142..bd2c43d 100644 (file)
--- a/arg.h
+++ b/arg.h
-/* $Header: arg.h,v 3.0.1.4 90/03/12 16:18:21 lwall Locked $
+/* $RCSfile: arg.h,v $$Revision: 4.0.1.2 $$Date: 91/11/05 15:51:05 $
  *
- *    Copyright (c) 1989, Larry Wall
+ *    Copyright (c) 1991, Larry Wall
  *
- *    You may distribute under the terms of the GNU General Public License
- *    as specified in the README file that comes with the perl 3.0 kit.
+ *    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 3.0.1.4  90/03/12  16:18:21  lwall
- * patch13: added list slice operator (LIST)[LIST]
- * patch13: added splice operator: @oldelems = splice(@array,$offset,$len,LIST)
+ * Revision 4.0.1.2  91/11/05  15:51:05  lwall
+ * patch11: added eval {}
+ * patch11: added sort {} LIST
  * 
- * Revision 3.0.1.3  90/02/28  16:21:55  lwall
- * patch9: added pipe function
+ * 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 3.0.1.2  89/12/21  19:13:14  lwall
- * patch7: send() didn't allow a TO argument
- * 
- * Revision 3.0.1.1  89/10/26  23:02:35  lwall
- * patch1: reverse didn't work
- * 
- * Revision 3.0  89/10/18  15:08:27  lwall
- * 3.0 baseline
+ * Revision 4.0  91/03/20  01:03:09  lwall
+ * 4.0 baseline.
  * 
  */
 
 #define O_NULL 0
-#define O_ITEM 1
-#define O_ITEM2 2
-#define O_ITEM3 3
-#define O_CONCAT 4
-#define O_MATCH 5
-#define O_NMATCH 6
-#define O_SUBST 7
-#define O_NSUBST 8
-#define O_ASSIGN 9
-#define O_MULTIPLY 10
-#define O_DIVIDE 11
-#define O_MODULO 12
-#define O_ADD 13
-#define O_SUBTRACT 14
-#define O_LEFT_SHIFT 15
-#define O_RIGHT_SHIFT 16
-#define O_LT 17
-#define O_GT 18
-#define O_LE 19
-#define O_GE 20
-#define O_EQ 21
-#define O_NE 22
-#define O_BIT_AND 23
-#define O_XOR 24
-#define O_BIT_OR 25
-#define O_AND 26
-#define O_OR 27
-#define O_COND_EXPR 28
-#define O_COMMA 29
-#define O_NEGATE 30
-#define O_NOT 31
-#define O_COMPLEMENT 32
-#define O_WRITE 33
-#define O_OPEN 34
-#define O_TRANS 35
-#define O_NTRANS 36
-#define O_CLOSE 37
-#define O_ARRAY 38
-#define O_HASH 39
-#define O_LARRAY 40
-#define O_LHASH 41
-#define O_PUSH 42
-#define O_POP 43
-#define O_SHIFT 44
-#define O_SPLIT 45
-#define O_LENGTH 46
-#define O_SPRINTF 47
-#define O_SUBSTR 48
-#define O_JOIN 49
-#define O_SLT 50
-#define O_SGT 51
-#define O_SLE 52
-#define O_SGE 53
-#define O_SEQ 54
-#define O_SNE 55
-#define O_SUBR 56
-#define O_PRINT 57
-#define O_CHDIR 58
-#define O_DIE 59
-#define O_EXIT 60
-#define O_RESET 61
-#define O_LIST 62
-#define O_SELECT 63
-#define O_EOF 64
-#define O_TELL 65
-#define O_SEEK 66
-#define O_LAST 67
-#define O_NEXT 68
-#define O_REDO 69
-#define O_GOTO 70
-#define O_INDEX 71
-#define O_TIME 72
-#define O_TMS 73
-#define O_LOCALTIME 74
-#define O_GMTIME 75
-#define O_STAT 76
-#define O_CRYPT 77
-#define O_EXP 78
-#define O_LOG 79
-#define O_SQRT 80
-#define O_INT 81
-#define O_PRTF 82
-#define O_ORD 83
-#define O_SLEEP 84
-#define O_FLIP 85
-#define O_FLOP 86
-#define O_KEYS 87
-#define O_VALUES 88
-#define O_EACH 89
-#define O_CHOP 90
-#define O_FORK 91
-#define O_EXEC 92
-#define O_SYSTEM 93
-#define O_OCT 94
-#define O_HEX 95
-#define O_CHMOD 96
-#define O_CHOWN 97
-#define O_KILL 98
-#define O_RENAME 99
-#define O_UNLINK 100
-#define O_UMASK 101
-#define O_UNSHIFT 102
-#define O_LINK 103
-#define O_REPEAT 104
-#define O_EVAL 105
-#define O_FTEREAD 106
-#define O_FTEWRITE 107
-#define O_FTEEXEC 108
-#define O_FTEOWNED 109
-#define O_FTRREAD 110
-#define O_FTRWRITE 111
-#define O_FTREXEC 112
-#define O_FTROWNED 113
-#define O_FTIS 114
-#define O_FTZERO 115
-#define O_FTSIZE 116
-#define O_FTFILE 117
-#define O_FTDIR 118
-#define O_FTLINK 119
-#define O_SYMLINK 120
-#define O_FTPIPE 121
-#define O_FTSOCK 122
-#define O_FTBLK 123
-#define O_FTCHR 124
-#define O_FTSUID 125
-#define O_FTSGID 126
-#define O_FTSVTX 127
-#define O_FTTTY 128
-#define O_DOFILE 129
-#define O_FTTEXT 130
-#define O_FTBINARY 131
-#define O_UTIME 132
-#define O_WAIT 133
-#define O_SORT 134
-#define O_DELETE 135
-#define O_STUDY 136
-#define O_ATAN2 137
-#define O_SIN 138
-#define O_COS 139
-#define O_RAND 140
-#define O_SRAND 141
-#define O_POW 142
-#define O_RETURN 143
-#define O_GETC 144
-#define O_MKDIR 145
-#define O_RMDIR 146
-#define O_GETPPID 147
-#define O_GETPGRP 148
-#define O_SETPGRP 149
-#define O_GETPRIORITY 150
-#define O_SETPRIORITY 151
-#define O_CHROOT 152
-#define O_IOCTL 153
-#define O_FCNTL 154
-#define O_FLOCK 155
-#define O_RINDEX 156
-#define O_PACK 157
-#define O_UNPACK 158
-#define O_READ 159
-#define O_WARN 160
-#define O_DBMOPEN 161
-#define O_DBMCLOSE 162
-#define O_ASLICE 163
-#define O_HSLICE 164
-#define O_LASLICE 165
-#define O_LHSLICE 166
-#define O_F_OR_R 167
-#define O_RANGE 168
-#define O_RCAT 169
-#define O_AASSIGN 170
-#define O_SASSIGN 171
-#define O_DUMP 172
-#define O_REVERSE 173
-#define O_ADDROF 174
-#define O_SOCKET 175
-#define O_BIND 176
-#define O_CONNECT 177
-#define O_LISTEN 178
-#define O_ACCEPT 179
-#define O_SEND 180
-#define O_RECV 181
-#define O_SSELECT 182
-#define O_SOCKETPAIR 183
-#define O_DBSUBR 184
-#define O_DEFINED 185
-#define O_UNDEF 186
-#define O_READLINK 187
-#define O_LSTAT 188
-#define O_AELEM 189
-#define O_HELEM 190
-#define O_LAELEM 191
-#define O_LHELEM 192
-#define O_LOCAL 193
-#define O_PIPE 194
-#define O_FILENO 195
-#define O_GHBYNAME 196
-#define O_GHBYADDR 197
-#define O_GHOSTENT 198
-#define O_SHOSTENT 199
-#define O_EHOSTENT 200
-#define O_GSBYNAME 201
-#define O_GSBYPORT 202
-#define O_GSERVENT 203
-#define O_SSERVENT 204
-#define O_ESERVENT 205
-#define O_GPBYNAME 206
-#define O_GPBYNUMBER 207
-#define O_GPROTOENT 208
-#define O_SPROTOENT 209
-#define O_EPROTOENT 210
-#define O_GNBYNAME 211
-#define O_GNBYADDR 212
-#define O_GNETENT 213
-#define O_SNETENT 214
-#define O_ENETENT 215
-#define O_VEC 216
-#define O_GREP 217
-#define O_GPWNAM 218
-#define O_GPWUID 219
-#define O_GPWENT 220
-#define O_SPWENT 221
-#define O_EPWENT 222
-#define O_GGRNAM 223
-#define O_GGRGID 224
-#define O_GGRENT 225
-#define O_SGRENT 226
-#define O_EGRENT 227
-#define O_SHUTDOWN 228
-#define O_OPENDIR 229
-#define O_READDIR 230
-#define O_TELLDIR 231
-#define O_SEEKDIR 232
-#define O_REWINDDIR 233
-#define O_CLOSEDIR 234
-#define O_GETLOGIN 235
-#define O_SYSCALL 236
-#define O_GSOCKOPT 237
-#define O_SSOCKOPT 238
-#define O_GETSOCKNAME 239
-#define O_GETPEERNAME 240
-#define O_LSLICE 241
-#define O_SPLICE 242
-#define MAXO 243
+#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 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",
@@ -296,6 +329,7 @@ char *opname[] = {
     "GE",
     "EQ",
     "NE",
+    "NCMP",
     "BIT_AND",
     "XOR",
     "BIT_OR",
@@ -306,22 +340,42 @@ char *opname[] = {
     "NEGATE",
     "NOT",
     "COMPLEMENT",
+    "SELECT",
     "WRITE",
+    "DBMOPEN",
+    "DBMCLOSE",
     "OPEN",
     "TRANS",
     "NTRANS",
     "CLOSE",
-    "ARRAY",
-    "HASH",
+    "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",
@@ -329,168 +383,166 @@ char *opname[] = {
     "SGE",
     "SEQ",
     "SNE",
+    "SCMP",
     "SUBR",
+    "DBSUBR",
+    "CALLER",
+    "SORT",
+    "REVERSE",
+    "WARN",
+    "DIE",
+    "PRINTF",
     "PRINT",
     "CHDIR",
-    "DIE",
     "EXIT",
     "RESET",
     "LIST",
-    "SELECT",
     "EOF",
+    "GETC",
     "TELL",
+    "RECV",
+    "READ",
+    "SYSREAD",
+    "SYSWRITE",
+    "SEND",
     "SEEK",
-    "LAST",
-    "NEXT",
+    "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",
-    "PRINTF",
     "ORD",
+    "ALARM",
     "SLEEP",
+    "RANGE",
+    "FLIP_OR_RANGE",
     "FLIP",
     "FLOP",
-    "KEYS",
-    "VALUES",
-    "EACH",
-    "CHOP",
     "FORK",
-    "EXEC",
+    "WAIT",
+    "WAITPID",
     "SYSTEM",
-    "OCT",
+    "EXEC",
     "HEX",
-    "CHMOD",
+    "OCT",
     "CHOWN",
     "KILL",
-    "RENAME",
     "UNLINK",
+    "CHMOD",
+    "UTIME",
     "UMASK",
-    "UNSHIFT",
+    "MSGGET",
+    "SHMGET",
+    "SEMGET",
+    "MSGCTL",
+    "SHMCTL",
+    "SEMCTL",
+    "MSGSND",
+    "MSGRCV",
+    "SEMOP",
+    "SHMREAD",
+    "SHMWRITE",
+    "RENAME",
     "LINK",
-    "REPEAT",
+    "MKDIR",
+    "RMDIR",
+    "GETPPID",
+    "GETPGRP",
+    "SETPGRP",
+    "GETPRIORITY",
+    "SETPRIORITY",
+    "CHROOT",
+    "FCNTL",
+    "SYSIOCTL",
+    "FLOCK",
+    "UNSHIFT",
+    "REQUIRE",
+    "DOFILE",
     "EVAL",
+    "FTRREAD",
+    "FTRWRITE",
+    "FTREXEC",
     "FTEREAD",
     "FTEWRITE",
     "FTEEXEC",
+    "FTIS",
     "FTEOWNED",
-    "FTRREAD",
-    "FTRWRITE",
-    "FTREXEC",
     "FTROWNED",
-    "FTIS",
     "FTZERO",
     "FTSIZE",
+    "FTMTIME",
+    "FTATIME",
+    "FTCTIME",
+    "FTSOCK",
+    "FTCHR",
+    "FTBLK",
     "FTFILE",
     "FTDIR",
+    "FTPIPE",
     "FTLINK",
     "SYMLINK",
-    "FTPIPE",
-    "FTSOCK",
-    "FTBLK",
-    "FTCHR",
+    "READLINK",
     "FTSUID",
     "FTSGID",
     "FTSVTX",
     "FTTTY",
-    "DOFILE",
     "FTTEXT",
     "FTBINARY",
-    "UTIME",
-    "WAIT",
-    "SORT",
-    "DELETE",
-    "STUDY",
-    "ATAN2",
-    "SIN",
-    "COS",
-    "RAND",
-    "SRAND",
-    "POW",
-    "RETURN",
-    "GETC",
-    "MKDIR",
-    "RMDIR",
-    "GETPPID",
-    "GETPGRP",
-    "SETPGRP",
-    "GETPRIORITY",
-    "SETPRIORITY",
-    "CHROOT",
-    "IOCTL",
-    "FCNTL",
-    "FLOCK",
-    "RINDEX",
-    "PACK",
-    "UNPACK",
-    "READ",
-    "WARN",
-    "DBMOPEN",
-    "DBMCLOSE",
-    "ASLICE",
-    "HSLICE",
-    "LASLICE",
-    "LHSLICE",
-    "FLIP_OR_RANGE",
-    "RANGE",
-    "RCAT",
-    "AASSIGN",
-    "SASSIGN",
-    "DUMP",
-    "REVERSE",
-    "ADDRESS_OF",
     "SOCKET",
     "BIND",
     "CONNECT",
     "LISTEN",
     "ACCEPT",
-    "SEND",
-    "RECV",
-    "SSELECT",
-    "SOCKETPAIR",
-    "DBSUBR",
-    "DEFINED",
-    "UNDEF",
-    "READLINK",
-    "LSTAT",
-    "AELEM",
-    "HELEM",
-    "LAELEM",
-    "LHELEM",
-    "LOCAL",
-    "PIPE",
-    "FILENO",
     "GHBYNAME",
     "GHBYADDR",
     "GHOSTENT",
-    "SHOSTENT",
-    "EHOSTENT",
-    "GSBYNAME",
-    "GSBYPORT",
-    "GSERVENT",
-    "SSERVENT",
-    "ESERVENT",
-    "GPBYNAME",
-    "GPBYNUMBER",
-    "GPROTOENT",
-    "SPROTOENT",
-    "EPROTOENT",
     "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",
-    "GREP",
     "GPWNAM",
     "GPWUID",
     "GPWENT",
@@ -501,22 +553,18 @@ char *opname[] = {
     "GGRENT",
     "SGRENT",
     "EGRENT",
-    "SHUTDOWN",
+    "GETLOGIN",
     "OPENDIR",
     "READDIR",
     "TELLDIR",
     "SEEKDIR",
     "REWINDDIR",
     "CLOSEDIR",
-    "GETLOGIN",
     "SYSCALL",
-    "GSOCKOPT",
-    "SSOCKOPT",
-    "GETSOCKNAME",
-    "GETPEERNAME",
-    "LSLICE",
-    "SPLICE",
-    "243"
+    "PIPE",
+    "TRY",
+    "EVALONCE",
+    "269"
 };
 #endif
 
@@ -541,6 +589,7 @@ char *opname[] = {
 #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 */
@@ -570,7 +619,8 @@ char *argname[] = {
     "STAR",
     "LSTAR",
     "WANTARRAY",
-    "21"
+    "LENSTAB",
+    "22"
 };
 #endif
 
@@ -599,6 +649,7 @@ bool hoistable[] =
    1,  /* STAR */
    1,  /* LSTAR */
    1,  /* WANTARRAY */
+   0,  /* LENSTAB */
    0,  /* 21 */
 };
 #endif
@@ -616,11 +667,8 @@ union argptr {
 struct arg {
     union argptr arg_ptr;
     short      arg_len;
-#ifdef mips
-    short      pad;
-#endif
-    unsigned char arg_type;
-    unsigned char arg_flags;
+    unsigned short arg_type;
+    unsigned short arg_flags;
 };
 
 #define AF_ARYOK 1             /* op can handle multiple values here */
@@ -628,7 +676,7 @@ struct arg {
 #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_UNUSED 32           /*  */
+#define AF_DEPR 32             /* an older form of the construct */
 #define AF_LISTISH 64          /* turn into list if important */
 #define AF_LOCAL 128           /* list of local variables */
 
@@ -645,20 +693,32 @@ struct arg {
 #define Nullarg Null(ARG*)
 
 #ifndef DOINIT
-EXT char opargs[MAXO+1];
+EXT unsigned short opargs[MAXO+1];
 #else
-#define A(e1,e2,e3) (e1+(e2<<2)+(e3<<4))
-char opargs[MAXO+1] = {
+#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 */
@@ -672,6 +732,7 @@ char opargs[MAXO+1] = {
        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 */
@@ -682,22 +743,42 @@ char opargs[MAXO+1] = {
        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),       /* ARRAY */
-       A(0,0,0),       /* HASH */
+       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 */
@@ -705,168 +786,166 @@ char opargs[MAXO+1] = {
        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(0,3,0),       /* DIE */
        A(1,0,0),       /* EXIT */
        A(1,0,0),       /* RESET */
        A(3,0,0),       /* LIST */
-       A(1,0,0),       /* SELECT */
        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,0,0),       /* LAST */
-       A(0,0,0),       /* NEXT */
+       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,0),       /* INDEX */
+       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,3,0),       /* PRINTF */
        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),       /* KEYS */
-       A(0,0,0),       /* VALUES */
-       A(0,0,0),       /* EACH */
-       A(3,0,0),       /* CHOP */
        A(0,0,0),       /* FORK */
-       A(1,3,0),       /* EXEC */
+       A(0,0,0),       /* WAIT */
+       A(1,1,0),       /* WAITPID */
        A(1,3,0),       /* SYSTEM */
-       A(1,0,0),       /* OCT */
+       A(1,3,0),       /* EXEC */
        A(1,0,0),       /* HEX */
-       A(0,3,0),       /* CHMOD */
+       A(1,0,0),       /* OCT */
        A(0,3,0),       /* CHOWN */
        A(0,3,0),       /* KILL */
-       A(1,1,0),       /* RENAME */
        A(0,3,0),       /* UNLINK */
+       A(0,3,0),       /* CHMOD */
+       A(0,3,0),       /* UTIME */
        A(1,0,0),       /* UMASK */
-       A(0,3,0),       /* UNSHIFT */
+       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),       /* REPEAT */
+       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),       /* FTRREAD */
-       A(1,0,0),       /* FTRWRITE */
-       A(1,0,0),       /* FTREXEC */
        A(1,0,0),       /* FTROWNED */
-       A(1,0,0),       /* FTIS */
        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),       /* FTPIPE */
-       A(1,0,0),       /* FTSOCK */
-       A(1,0,0),       /* FTBLK */
-       A(1,0,0),       /* FTCHR */
+       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),       /* DOFILE */
        A(1,0,0),       /* FTTEXT */
        A(1,0,0),       /* FTBINARY */
-       A(0,3,0),       /* UTIME */
-       A(0,0,0),       /* WAIT */
-       A(1,3,0),       /* SORT */
-       A(0,1,0),       /* DELETE */
-       A(1,0,0),       /* STUDY */
-       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,1,0),       /* POW */
-       A(0,3,0),       /* RETURN */
-       A(1,0,0),       /* GETC */
-       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),       /* IOCTL */
-       A(1,1,1),       /* FCNTL */
-       A(1,1,0),       /* FLOCK */
-       A(1,1,0),       /* RINDEX */
-       A(1,3,0),       /* PACK */
-       A(1,1,0),       /* UNPACK */
-       A(1,1,1),       /* READ */
-       A(0,3,0),       /* WARN */
-       A(1,1,1),       /* DBMOPEN */
-       A(1,0,0),       /* DBMCLOSE */
-       A(0,3,0),       /* ASLICE */
-       A(0,3,0),       /* HSLICE */
-       A(0,3,0),       /* LASLICE */
-       A(0,3,0),       /* LHSLICE */
-       A(1,0,0),       /* F_OR_R */
-       A(1,1,0),       /* RANGE */
-       A(1,1,0),       /* RCAT */
-       A(3,3,0),       /* AASSIGN */
-       A(0,0,0),       /* SASSIGN */
-       A(0,0,0),       /* DUMP */
-       A(0,3,0),       /* REVERSE */
-       A(1,0,0),       /* ADDROF */
-       A(1,1,1),       /* SOCKET */
+       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,1,3),       /* SEND */
-       A(1,1,1),       /* RECV */
-       A(1,1,1),       /* SSELECT */
-       A(1,1,1),       /* SOCKETPAIR */
-       A(0,3,0),       /* DBSUBR */
-       A(1,0,0),       /* DEFINED */
-       A(1,0,0),       /* UNDEF */
-       A(1,0,0),       /* READLINK */
-       A(1,0,0),       /* LSTAT */
-       A(0,1,0),       /* AELEM */
-       A(0,1,0),       /* HELEM */
-       A(0,1,0),       /* LAELEM */
-       A(0,1,0),       /* LHELEM */
-       A(1,0,0),       /* LOCAL */
-       A(0,0,0),       /* PIPE */
-       A(1,0,0),       /* FILENO */
        A(1,0,0),       /* GHBYNAME */
        A(1,1,0),       /* GHBYADDR */
        A(0,0,0),       /* GHOSTENT */
-       A(1,0,0),       /* SHOSTENT */
-       A(0,0,0),       /* EHOSTENT */
-       A(1,1,0),       /* GSBYNAME */
-       A(1,1,0),       /* GSBYPORT */
-       A(0,0,0),       /* GSERVENT */
-       A(1,0,0),       /* SSERVENT */
-       A(0,0,0),       /* ESERVENT */
-       A(1,0,0),       /* GPBYNAME */
-       A(1,0,0),       /* GPBYNUMBER */
-       A(0,0,0),       /* GPROTOENT */
-       A(1,0,0),       /* SPROTOENT */
-       A(0,0,0),       /* EPROTOENT */
        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(0,3,0),       /* GREP */
        A(1,0,0),       /* GPWNAM */
        A(1,0,0),       /* GPWUID */
        A(0,0,0),       /* GPWENT */
@@ -877,24 +956,21 @@ char opargs[MAXO+1] = {
        A(0,0,0),       /* GGRENT */
        A(0,0,0),       /* SGRENT */
        A(0,0,0),       /* EGRENT */
-       A(1,1,0),       /* SHUTDOWN */
+       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(0,0,0),       /* GETLOGIN */
        A(1,3,0),       /* SYSCALL */
-       A(1,1,1),       /* GSOCKOPT */
-       A(1,1,1),       /* SSOCKOPT */
-       A(1,0,0),       /* GETSOCKNAME */
-       A(1,0,0),       /* GETPEERNAME */
-       A(0,3,3),       /* LSLICE */
-       A(0,3,1),       /* SPLICE */
+       A(1,1,0),       /* PIPE */
+       A(0,0,0),       /* TRY */
+       A(1,0,0),       /* EVALONCE */
        0
 };
 #undef A
+#undef A5
 #endif
 
 int do_trans();