aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Criswell <criswell@uiuc.edu>2004-02-17 22:21:17 +0000
committerJohn Criswell <criswell@uiuc.edu>2004-02-17 22:21:17 +0000
commitfcd14a825b8403fe4e11aa76397dd2a65475582d (patch)
treef675a63f79f22ff293f6c560aaa4333dcdd74751
parent977297a1e50f5a38c59ac8df989454d8531a7628 (diff)
Initial commit of the perl Malloc Benchmark. I've cheated a little by
generating the yacc output files and committing them directly, but it was easier than disabling the Bison Voodoo that gets executed by default. git-svn-id: https://llvm.org/svn/llvm-project/test-suite/trunk@11568 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/EXTERN.h25
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/INTERN.h25
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/LICENSE.TXT9
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/Makefile15
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/arg.h974
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/array.c269
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/array.h39
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/cmd.c1223
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/cmd.h170
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/config.h823
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/config.sh256
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/cons.c1408
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/consarg.c1197
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/cscope.out195242
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/doarg.c1578
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/doio.c2733
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/dolist.c1765
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/dump.c354
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/eval.c2907
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/form.c369
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/form.h47
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/handy.h121
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/hash.c695
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/hash.h70
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/malloc.c412
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/patch-malloc.c33
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/patchlevel.h1
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/perl.c1225
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/perl.h829
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/perly.c3026
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/perly.h86
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/regcomp.c1407
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/regcomp.h199
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/regexec.c897
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/regexp.h39
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/spat.h43
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/stab.c890
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/stab.h118
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/str.c1517
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/str.h140
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/toke.c2531
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/tperly.c2199
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/usersub.c188
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/util.c1547
-rw-r--r--MultiSource/Benchmarks/MallocBench/perl/util.h47
45 files changed, 229688 insertions, 0 deletions
diff --git a/MultiSource/Benchmarks/MallocBench/perl/EXTERN.h b/MultiSource/Benchmarks/MallocBench/perl/EXTERN.h
new file mode 100644
index 00000000..504eb43e
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/EXTERN.h
@@ -0,0 +1,25 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 00:58:26 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#undef EXT
+#define EXT extern
+
+#undef INIT
+#define INIT(x)
+
+#undef DOINIT
diff --git a/MultiSource/Benchmarks/MallocBench/perl/INTERN.h b/MultiSource/Benchmarks/MallocBench/perl/INTERN.h
new file mode 100644
index 00000000..0b1e331b
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/INTERN.h
@@ -0,0 +1,25 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 00:58:35 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#undef EXT
+#define EXT
+
+#undef INIT
+#define INIT(x) = x
+
+#define DOINIT
diff --git a/MultiSource/Benchmarks/MallocBench/perl/LICENSE.TXT b/MultiSource/Benchmarks/MallocBench/perl/LICENSE.TXT
new file mode 100644
index 00000000..c4491820
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/LICENSE.TXT
@@ -0,0 +1,9 @@
+perl - Part of the Malloc Benchmark Suite
+-------------------------------------------------------------------------------
+All files are licensed under the LLVM license with the following additions:
+
+These files are licensed to you under the GNU General Public License.
+Redistribution must follow the additional restrictions required by the GPL.
+
+Please see individiual files for additional copyright information.
+
diff --git a/MultiSource/Benchmarks/MallocBench/perl/Makefile b/MultiSource/Benchmarks/MallocBench/perl/Makefile
new file mode 100644
index 00000000..0c0daa2b
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/Makefile
@@ -0,0 +1,15 @@
+LEVEL = ../../../../../..
+PROG = perl
+REQUIRES_EH_SUPPORT = 1
+CPPFLAGS += -DHAS_STRERROR -DHAS_MKDIR -DHAS_RMDIR -U_POSIX_SOURCE -D__USE_MISC
+LIBS += -lm -lcrypt
+LDFLAGS += -lm -lcrypt
+
+Source := array.c doarg.c eval.c regexec.c \
+ cmd.c doio.c form.c perl.c stab.c usersub.c \
+ cons.c dolist.c hash.c perly.c str.c util.c \
+ consarg.c dump.c malloc.c regcomp.c toke.c
+
+RUN_OPTIONS = $(BUILD_SRC_DIR)/INPUT/endsort.perl $(BUILD_SRC_DIR)/INPUT/endsort.perl
+include ../../../Makefile.multisrc
+
diff --git a/MultiSource/Benchmarks/MallocBench/perl/arg.h b/MultiSource/Benchmarks/MallocBench/perl/arg.h
new file mode 100644
index 00000000..d9a50721
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/arg.h
@@ -0,0 +1,974 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * 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_OPENDIR 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 MAXO 267
+
+#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",
+ "267"
+};
+#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_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",
+ "SINGLE",
+ "DOUBLE",
+ "BACKTICK",
+ "READ",
+ "SPAT",
+ "LEXPR",
+ "ARYLEN",
+ "ARYSTAB",
+ "LARYLEN",
+ "GLOB",
+ "WORD",
+ "INDREAD",
+ "LARYSTAB",
+ "STAR",
+ "LSTAR",
+ "WANTARRAY",
+ "21"
+};
+#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, /* 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 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 */
+ 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();
diff --git a/MultiSource/Benchmarks/MallocBench/perl/array.c b/MultiSource/Benchmarks/MallocBench/perl/array.c
new file mode 100644
index 00000000..572426e7
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/array.c
@@ -0,0 +1,269 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:03:32 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+STR *
+afetch(ar,key,lval)
+register ARRAY *ar;
+int key;
+int lval;
+{
+ STR *str;
+
+ if (key < 0 || key > ar->ary_fill) {
+ if (lval && key >= 0) {
+ if (ar->ary_flags & ARF_REAL)
+ str = Str_new(5,0);
+ else
+ str = str_mortal(&str_undef);
+ (void)astore(ar,key,str);
+ return str;
+ }
+ else
+ return &str_undef;
+ }
+ if (!ar->ary_array[key]) {
+ if (lval) {
+ str = Str_new(6,0);
+ (void)astore(ar,key,str);
+ return str;
+ }
+ return &str_undef;
+ }
+ return ar->ary_array[key];
+}
+
+bool
+astore(ar,key,val)
+register ARRAY *ar;
+int key;
+STR *val;
+{
+ int retval;
+
+ if (key < 0)
+ return FALSE;
+ if (key > ar->ary_max) {
+ int newmax;
+
+ if (ar->ary_alloc != ar->ary_array) {
+ retval = ar->ary_array - ar->ary_alloc;
+ Copy(ar->ary_array, ar->ary_alloc, ar->ary_max+1, STR*);
+ Zero(ar->ary_alloc+ar->ary_max+1, retval, STR*);
+ ar->ary_max += retval;
+ ar->ary_array -= retval;
+ if (key > ar->ary_max - 10) {
+ newmax = key + ar->ary_max;
+ goto resize;
+ }
+ }
+ else {
+ if (ar->ary_alloc) {
+ newmax = key + ar->ary_max / 5;
+ resize:
+ Renew(ar->ary_alloc,newmax+1, STR*);
+ Zero(&ar->ary_alloc[ar->ary_max+1], newmax - ar->ary_max, STR*);
+ }
+ else {
+ newmax = key < 4 ? 4 : key;
+ Newz(2,ar->ary_alloc, newmax+1, STR*);
+ }
+ ar->ary_array = ar->ary_alloc;
+ ar->ary_max = newmax;
+ }
+ }
+ if ((ar->ary_flags & ARF_REAL) && ar->ary_fill < key) {
+ while (++ar->ary_fill < key) {
+ if (ar->ary_array[ar->ary_fill] != Nullstr) {
+ str_free(ar->ary_array[ar->ary_fill]);
+ ar->ary_array[ar->ary_fill] = Nullstr;
+ }
+ }
+ }
+ retval = (ar->ary_array[key] != Nullstr);
+ if (retval && (ar->ary_flags & ARF_REAL))
+ str_free(ar->ary_array[key]);
+ ar->ary_array[key] = val;
+ return retval;
+}
+
+ARRAY *
+anew(stab)
+STAB *stab;
+{
+ register ARRAY *ar;
+
+ New(1,ar,1,ARRAY);
+ ar->ary_magic = Str_new(7,0);
+ ar->ary_alloc = ar->ary_array = 0;
+ str_magic(ar->ary_magic, stab, '#', Nullch, 0);
+ ar->ary_max = ar->ary_fill = -1;
+ ar->ary_flags = ARF_REAL;
+ return ar;
+}
+
+ARRAY *
+afake(stab,size,strp)
+STAB *stab;
+register int size;
+register STR **strp;
+{
+ register ARRAY *ar;
+
+ New(3,ar,1,ARRAY);
+ New(4,ar->ary_alloc,size+1,STR*);
+ Copy(strp,ar->ary_alloc,size,STR*);
+ ar->ary_array = ar->ary_alloc;
+ ar->ary_magic = Str_new(8,0);
+ str_magic(ar->ary_magic, stab, '#', Nullch, 0);
+ ar->ary_fill = size - 1;
+ ar->ary_max = size - 1;
+ ar->ary_flags = 0;
+ while (size--) {
+ (*strp++)->str_pok &= ~SP_TEMP;
+ }
+ return ar;
+}
+
+void
+aclear(ar)
+register ARRAY *ar;
+{
+ register int key;
+
+ if (!ar || !(ar->ary_flags & ARF_REAL) || ar->ary_max < 0)
+ return;
+ if (key = ar->ary_array - ar->ary_alloc) {
+ ar->ary_max += key;
+ ar->ary_array -= key;
+ }
+ for (key = 0; key <= ar->ary_max; key++)
+ str_free(ar->ary_array[key]);
+ ar->ary_fill = -1;
+ Zero(ar->ary_array, ar->ary_max+1, STR*);
+}
+
+void
+afree(ar)
+register ARRAY *ar;
+{
+ register int key;
+
+ if (!ar)
+ return;
+ if (key = ar->ary_array - ar->ary_alloc) {
+ ar->ary_max += key;
+ ar->ary_array -= key;
+ }
+ if (ar->ary_flags & ARF_REAL) {
+ for (key = 0; key <= ar->ary_max; key++)
+ str_free(ar->ary_array[key]);
+ }
+ str_free(ar->ary_magic);
+ Safefree(ar->ary_alloc);
+ Safefree(ar);
+}
+
+bool
+apush(ar,val)
+register ARRAY *ar;
+STR *val;
+{
+ return astore(ar,++(ar->ary_fill),val);
+}
+
+STR *
+apop(ar)
+register ARRAY *ar;
+{
+ STR *retval;
+
+ if (ar->ary_fill < 0)
+ return Nullstr;
+ retval = ar->ary_array[ar->ary_fill];
+ ar->ary_array[ar->ary_fill--] = Nullstr;
+ return retval;
+}
+
+aunshift(ar,num)
+register ARRAY *ar;
+register int num;
+{
+ register int i;
+ register STR **sstr,**dstr;
+
+ if (num <= 0)
+ return;
+ if (ar->ary_array - ar->ary_alloc >= num) {
+ ar->ary_max += num;
+ ar->ary_fill += num;
+ while (num--)
+ *--ar->ary_array = Nullstr;
+ }
+ else {
+ (void)astore(ar,ar->ary_fill+num,(STR*)0); /* maybe extend array */
+ dstr = ar->ary_array + ar->ary_fill;
+ sstr = dstr - num;
+#ifdef BUGGY_MSC5
+ # pragma loop_opt(off) /* don't loop-optimize the following code */
+#endif /* BUGGY_MSC5 */
+ for (i = ar->ary_fill; i >= 0; i--) {
+ *dstr-- = *sstr--;
+#ifdef BUGGY_MSC5
+ # pragma loop_opt() /* loop-optimization back to command-line setting */
+#endif /* BUGGY_MSC5 */
+ }
+ Zero(ar->ary_array, num, STR*);
+ }
+}
+
+STR *
+ashift(ar)
+register ARRAY *ar;
+{
+ STR *retval;
+
+ if (ar->ary_fill < 0)
+ return Nullstr;
+ retval = *ar->ary_array;
+ *(ar->ary_array++) = Nullstr;
+ ar->ary_max--;
+ ar->ary_fill--;
+ return retval;
+}
+
+int
+alen(ar)
+register ARRAY *ar;
+{
+ return ar->ary_fill;
+}
+
+afill(ar, fill)
+register ARRAY *ar;
+int fill;
+{
+ if (fill < 0)
+ fill = -1;
+ if (fill <= ar->ary_max)
+ ar->ary_fill = fill;
+ else
+ (void)astore(ar,fill,Nullstr);
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/array.h b/MultiSource/Benchmarks/MallocBench/perl/array.h
new file mode 100644
index 00000000..ef71249b
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/array.h
@@ -0,0 +1,39 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:03:44 lwall
+ * 4.0 baseline.
+ *
+ */
+
+struct atbl {
+ STR **ary_array;
+ STR **ary_alloc;
+ STR *ary_magic;
+ int ary_max;
+ int ary_fill;
+ char ary_flags;
+};
+
+#define ARF_REAL 1 /* free old entries */
+
+STR *afetch();
+bool astore();
+STR *apop();
+STR *ashift();
+void afree();
+void aclear();
+bool apush();
+int alen();
+ARRAY *anew();
+ARRAY *afake();
diff --git a/MultiSource/Benchmarks/MallocBench/perl/cmd.c b/MultiSource/Benchmarks/MallocBench/perl/cmd.c
new file mode 100644
index 00000000..b4c4b1ac
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/cmd.c
@@ -0,0 +1,1223 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/11 17:36:16 lwall
+ * patch1: you may now use "die" and "caller" in a signal handler
+ *
+ * Revision 4.0 91/03/20 01:04:18 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+#ifdef I_VARARGS
+# include <varargs.h>
+#endif
+
+static STR str_chop;
+
+void grow_dlevel();
+
+/* do longjmps() clobber register variables? */
+
+#if defined(cray) || defined(__STDC__)
+#define JMPCLOBBER
+#endif
+
+/* This is the main command loop. We try to spend as much time in this loop
+ * as possible, so lots of optimizations do their activities in here. This
+ * means things get a little sloppy.
+ */
+
+int
+cmd_exec(cmdparm,gimme,sp)
+CMD *VOLATILE cmdparm;
+VOLATILE int gimme;
+VOLATILE int sp;
+{
+ register CMD *cmd = cmdparm;
+ SPAT *VOLATILE oldspat;
+ VOLATILE int firstsave = savestack->ary_fill;
+ VOLATILE int oldsave;
+ VOLATILE int aryoptsave;
+#ifdef DEBUGGING
+ VOLATILE int olddlevel;
+ VOLATILE int entdlevel;
+#endif
+ register STR *retstr = &str_undef;
+ register char *tmps;
+ register int cmdflags;
+ register int match;
+ register char *go_to = goto_targ;
+ register int newsp = -2;
+ register STR **st = stack->ary_array;
+ FILE *VOLATILE fp;
+ ARRAY *VOLATILE ar;
+
+ lastsize = 0;
+#ifdef DEBUGGING
+ entdlevel = dlevel;
+#endif
+tail_recursion_entry:
+#ifdef DEBUGGING
+ dlevel = entdlevel;
+#endif
+#ifdef TAINT
+ tainted = 0; /* Each statement is presumed innocent */
+#endif
+ if (cmd == Nullcmd) {
+ if (gimme == G_ARRAY && newsp > -2)
+ return newsp;
+ else {
+ st[++sp] = retstr;
+ return sp;
+ }
+ }
+ cmdflags = cmd->c_flags; /* hopefully load register */
+ if (go_to) {
+ if (cmd->c_label && strEQ(go_to,cmd->c_label))
+ goto_targ = go_to = Nullch; /* here at last */
+ else {
+ switch (cmd->c_type) {
+ case C_IF:
+ oldspat = curspat;
+ oldsave = savestack->ary_fill;
+#ifdef DEBUGGING
+ olddlevel = dlevel;
+#endif
+ retstr = &str_yes;
+ newsp = -2;
+ if (cmd->ucmd.ccmd.cc_true) {
+#ifdef DEBUGGING
+ if (debug) {
+ debname[dlevel] = 't';
+ debdelim[dlevel] = '_';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+ newsp = cmd_exec(cmd->ucmd.ccmd.cc_true,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ if (!goto_targ)
+ go_to = Nullch;
+ curspat = oldspat;
+ if (savestack->ary_fill > oldsave)
+ restorelist(oldsave);
+#ifdef DEBUGGING
+ dlevel = olddlevel;
+#endif
+ cmd = cmd->ucmd.ccmd.cc_alt;
+ goto tail_recursion_entry;
+ case C_ELSE:
+ oldspat = curspat;
+ oldsave = savestack->ary_fill;
+#ifdef DEBUGGING
+ olddlevel = dlevel;
+#endif
+ retstr = &str_undef;
+ newsp = -2;
+ if (cmd->ucmd.ccmd.cc_true) {
+#ifdef DEBUGGING
+ if (debug) {
+ debname[dlevel] = 'e';
+ debdelim[dlevel] = '_';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+ newsp = cmd_exec(cmd->ucmd.ccmd.cc_true,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ if (!goto_targ)
+ go_to = Nullch;
+ curspat = oldspat;
+ if (savestack->ary_fill > oldsave)
+ restorelist(oldsave);
+#ifdef DEBUGGING
+ dlevel = olddlevel;
+#endif
+ break;
+ case C_BLOCK:
+ case C_WHILE:
+ if (!(cmdflags & CF_ONCE)) {
+ cmdflags |= CF_ONCE;
+ if (++loop_ptr >= loop_max) {
+ loop_max += 128;
+ Renew(loop_stack, loop_max, struct loop);
+ }
+ loop_stack[loop_ptr].loop_label = cmd->c_label;
+ loop_stack[loop_ptr].loop_sp = sp;
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Pushing label #%d %s)\n",
+ loop_ptr, cmd->c_label ? cmd->c_label : "");
+ }
+#endif
+ }
+#ifdef JMPCLOBBER
+ cmdparm = cmd;
+#endif
+ match = setjmp(loop_stack[loop_ptr].loop_env);
+ if (match) {
+ st = stack->ary_array; /* possibly reallocated */
+#ifdef JMPCLOBBER
+ cmd = cmdparm;
+ cmdflags = cmd->c_flags|CF_ONCE;
+#endif
+ if (savestack->ary_fill > oldsave)
+ restorelist(oldsave);
+ switch (match) {
+ default:
+ fatal("longjmp returned bad value (%d)",match);
+ case O_LAST: /* not done unless go_to found */
+ go_to = Nullch;
+ if (lastretstr) {
+ retstr = lastretstr;
+ newsp = -2;
+ }
+ else {
+ newsp = sp + lastsize;
+ retstr = st[newsp];
+ }
+#ifdef DEBUGGING
+ olddlevel = dlevel;
+#endif
+ curspat = oldspat;
+ goto next_cmd;
+ case O_NEXT: /* not done unless go_to found */
+ go_to = Nullch;
+#ifdef JMPCLOBBER
+ newsp = -2;
+ retstr = &str_undef;
+#endif
+ goto next_iter;
+ case O_REDO: /* not done unless go_to found */
+ go_to = Nullch;
+#ifdef JMPCLOBBER
+ newsp = -2;
+ retstr = &str_undef;
+#endif
+ goto doit;
+ }
+ }
+ oldspat = curspat;
+ oldsave = savestack->ary_fill;
+#ifdef DEBUGGING
+ olddlevel = dlevel;
+#endif
+ if (cmd->ucmd.ccmd.cc_true) {
+#ifdef DEBUGGING
+ if (debug) {
+ debname[dlevel] = 't';
+ debdelim[dlevel] = '_';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+ newsp = cmd_exec(cmd->ucmd.ccmd.cc_true,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ if (!goto_targ) {
+ go_to = Nullch;
+ goto next_iter;
+ }
+#ifdef DEBUGGING
+ dlevel = olddlevel;
+#endif
+ if (cmd->ucmd.ccmd.cc_alt) {
+#ifdef DEBUGGING
+ if (debug) {
+ debname[dlevel] = 'a';
+ debdelim[dlevel] = '_';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+ newsp = cmd_exec(cmd->ucmd.ccmd.cc_alt,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ if (goto_targ)
+ break;
+ go_to = Nullch;
+ goto finish_while;
+ }
+ cmd = cmd->c_next;
+ if (cmd && cmd->c_head == cmd)
+ /* reached end of while loop */
+ return sp; /* targ isn't in this block */
+ if (cmdflags & CF_ONCE) {
+#ifdef DEBUGGING
+ if (debug & 4) {
+ tmps = loop_stack[loop_ptr].loop_label;
+ deb("(Popping label #%d %s)\n",loop_ptr,
+ tmps ? tmps : "" );
+ }
+#endif
+ loop_ptr--;
+ }
+ goto tail_recursion_entry;
+ }
+ }
+
+until_loop:
+
+ /* Set line number so run-time errors can be located */
+
+ curcmd = cmd;
+
+#ifdef DEBUGGING
+ if (debug) {
+ if (debug & 2) {
+ deb("%s (%lx) r%lx t%lx a%lx n%lx cs%lx\n",
+ cmdname[cmd->c_type],cmd,cmd->c_expr,
+ cmd->ucmd.ccmd.cc_true,cmd->ucmd.ccmd.cc_alt,cmd->c_next,
+ curspat);
+ }
+ debname[dlevel] = cmdname[cmd->c_type][0];
+ debdelim[dlevel] = '!';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+
+ /* Here is some common optimization */
+
+ if (cmdflags & CF_COND) {
+ switch (cmdflags & CF_OPTIMIZE) {
+
+ case CFT_FALSE:
+ retstr = cmd->c_short;
+ newsp = -2;
+ match = FALSE;
+ if (cmdflags & CF_NESURE)
+ goto maybe;
+ break;
+ case CFT_TRUE:
+ retstr = cmd->c_short;
+ newsp = -2;
+ match = TRUE;
+ if (cmdflags & CF_EQSURE)
+ goto flipmaybe;
+ break;
+
+ case CFT_REG:
+ retstr = STAB_STR(cmd->c_stab);
+ newsp = -2;
+ match = str_true(retstr); /* => retstr = retstr, c2 should fix */
+ if (cmdflags & (match ? CF_EQSURE : CF_NESURE))
+ goto flipmaybe;
+ break;
+
+ case CFT_ANCHOR: /* /^pat/ optimization */
+ if (multiline) {
+ if (*cmd->c_short->str_ptr && !(cmdflags & CF_EQSURE))
+ goto scanner; /* just unanchor it */
+ else
+ break; /* must evaluate */
+ }
+ /* FALL THROUGH */
+ case CFT_STROP: /* string op optimization */
+ retstr = STAB_STR(cmd->c_stab);
+ newsp = -2;
+#ifndef I286
+ if (*cmd->c_short->str_ptr == *str_get(retstr) &&
+ bcmp(cmd->c_short->str_ptr, str_get(retstr),
+ cmd->c_slen) == 0 ) {
+ if (cmdflags & CF_EQSURE) {
+ if (sawampersand && (cmdflags & CF_OPTIMIZE) != CFT_STROP) {
+ curspat = Nullspat;
+ if (leftstab)
+ str_nset(stab_val(leftstab),"",0);
+ if (amperstab)
+ str_sset(stab_val(amperstab),cmd->c_short);
+ if (rightstab)
+ str_nset(stab_val(rightstab),
+ retstr->str_ptr + cmd->c_slen,
+ retstr->str_cur - cmd->c_slen);
+ }
+ if (cmd->c_spat)
+ lastspat = cmd->c_spat;
+ match = !(cmdflags & CF_FIRSTNEG);
+ retstr = &str_yes;
+ goto flipmaybe;
+ }
+ }
+ else if (cmdflags & CF_NESURE) {
+ match = cmdflags & CF_FIRSTNEG;
+ retstr = &str_no;
+ goto flipmaybe;
+ }
+#else
+ {
+ char *zap1, *zap2, zap1c, zap2c;
+ int zaplen;
+
+ zap1 = cmd->c_short->str_ptr;
+ zap2 = str_get(retstr);
+ zap1c = *zap1;
+ zap2c = *zap2;
+ zaplen = cmd->c_slen;
+ if ((zap1c == zap2c) && (bcmp(zap1, zap2, zaplen) == 0)) {
+ if (cmdflags & CF_EQSURE) {
+ if (sawampersand &&
+ (cmdflags & CF_OPTIMIZE) != CFT_STROP) {
+ curspat = Nullspat;
+ if (leftstab)
+ str_nset(stab_val(leftstab),"",0);
+ if (amperstab)
+ str_sset(stab_val(amperstab),cmd->c_short);
+ if (rightstab)
+ str_nset(stab_val(rightstab),
+ retstr->str_ptr + cmd->c_slen,
+ retstr->str_cur - cmd->c_slen);
+ }
+ if (cmd->c_spat)
+ lastspat = cmd->c_spat;
+ match = !(cmdflags & CF_FIRSTNEG);
+ retstr = &str_yes;
+ goto flipmaybe;
+ }
+ }
+ else if (cmdflags & CF_NESURE) {
+ match = cmdflags & CF_FIRSTNEG;
+ retstr = &str_no;
+ goto flipmaybe;
+ }
+ }
+#endif
+ break; /* must evaluate */
+
+ case CFT_SCAN: /* non-anchored search */
+ scanner:
+ retstr = STAB_STR(cmd->c_stab);
+ newsp = -2;
+ if (retstr->str_pok & SP_STUDIED)
+ if (screamfirst[cmd->c_short->str_rare] >= 0)
+ tmps = screaminstr(retstr, cmd->c_short);
+ else
+ tmps = Nullch;
+ else {
+ tmps = str_get(retstr); /* make sure it's pok */
+#ifndef lint
+ tmps = fbminstr((unsigned char*)tmps,
+ (unsigned char*)tmps + retstr->str_cur, cmd->c_short);
+#endif
+ }
+ if (tmps) {
+ if (cmdflags & CF_EQSURE) {
+ ++cmd->c_short->str_u.str_useful;
+ if (sawampersand) {
+ curspat = Nullspat;
+ if (leftstab)
+ str_nset(stab_val(leftstab),retstr->str_ptr,
+ tmps - retstr->str_ptr);
+ if (amperstab)
+ str_nset(stab_val(amperstab),
+ tmps, cmd->c_short->str_cur);
+ if (rightstab)
+ str_nset(stab_val(rightstab),
+ tmps + cmd->c_short->str_cur,
+ retstr->str_cur - (tmps - retstr->str_ptr) -
+ cmd->c_short->str_cur);
+ }
+ lastspat = cmd->c_spat;
+ match = !(cmdflags & CF_FIRSTNEG);
+ retstr = &str_yes;
+ goto flipmaybe;
+ }
+ else
+ hint = tmps;
+ }
+ else {
+ if (cmdflags & CF_NESURE) {
+ ++cmd->c_short->str_u.str_useful;
+ match = cmdflags & CF_FIRSTNEG;
+ retstr = &str_no;
+ goto flipmaybe;
+ }
+ }
+ if (--cmd->c_short->str_u.str_useful < 0) {
+ cmdflags &= ~CF_OPTIMIZE;
+ cmdflags |= CFT_EVAL; /* never try this optimization again */
+ cmd->c_flags = (cmdflags & ~CF_ONCE);
+ }
+ break; /* must evaluate */
+
+ case CFT_NUMOP: /* numeric op optimization */
+ retstr = STAB_STR(cmd->c_stab);
+ newsp = -2;
+ switch (cmd->c_slen) {
+ case O_EQ:
+ if (dowarn) {
+ if ((!retstr->str_nok && !looks_like_number(retstr)))
+ warn("Possible use of == on string value");
+ }
+ match = (str_gnum(retstr) == cmd->c_short->str_u.str_nval);
+ break;
+ case O_NE:
+ match = (str_gnum(retstr) != cmd->c_short->str_u.str_nval);
+ break;
+ case O_LT:
+ match = (str_gnum(retstr) < cmd->c_short->str_u.str_nval);
+ break;
+ case O_LE:
+ match = (str_gnum(retstr) <= cmd->c_short->str_u.str_nval);
+ break;
+ case O_GT:
+ match = (str_gnum(retstr) > cmd->c_short->str_u.str_nval);
+ break;
+ case O_GE:
+ match = (str_gnum(retstr) >= cmd->c_short->str_u.str_nval);
+ break;
+ }
+ if (match) {
+ if (cmdflags & CF_EQSURE) {
+ retstr = &str_yes;
+ goto flipmaybe;
+ }
+ }
+ else if (cmdflags & CF_NESURE) {
+ retstr = &str_no;
+ goto flipmaybe;
+ }
+ break; /* must evaluate */
+
+ case CFT_INDGETS: /* while (<$foo>) */
+ last_in_stab = stabent(str_get(STAB_STR(cmd->c_stab)),TRUE);
+ if (!stab_io(last_in_stab))
+ stab_io(last_in_stab) = stio_new();
+ goto dogets;
+ case CFT_GETS: /* really a while (<file>) */
+ last_in_stab = cmd->c_stab;
+ dogets:
+ fp = stab_io(last_in_stab)->ifp;
+ retstr = stab_val(defstab);
+ newsp = -2;
+ keepgoing:
+ if (fp && str_gets(retstr, fp, 0)) {
+ if (*retstr->str_ptr == '0' && retstr->str_cur == 1)
+ match = FALSE;
+ else
+ match = TRUE;
+ stab_io(last_in_stab)->lines++;
+ }
+ else if (stab_io(last_in_stab)->flags & IOF_ARGV) {
+ if (!fp)
+ goto doeval; /* first time through */
+ fp = nextargv(last_in_stab);
+ if (fp)
+ goto keepgoing;
+ (void)do_close(last_in_stab,FALSE);
+ stab_io(last_in_stab)->flags |= IOF_START;
+ retstr = &str_undef;
+ match = FALSE;
+ }
+ else {
+ retstr = &str_undef;
+ match = FALSE;
+ }
+ goto flipmaybe;
+ case CFT_EVAL:
+ break;
+ case CFT_UNFLIP:
+ while (tmps_max > tmps_base) { /* clean up after last eval */
+ str_free(tmps_list[tmps_max]);
+ tmps_list[tmps_max--] = Nullstr;
+ }
+ newsp = eval(cmd->c_expr,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ match = str_true(retstr);
+ if (cmd->c_expr->arg_type == O_FLIP) /* undid itself? */
+ cmdflags = copyopt(cmd,cmd->c_expr[3].arg_ptr.arg_cmd);
+ goto maybe;
+ case CFT_CHOP:
+ retstr = stab_val(cmd->c_stab);
+ newsp = -2;
+ match = (retstr->str_cur != 0);
+ tmps = str_get(retstr);
+ tmps += retstr->str_cur - match;
+ str_nset(&str_chop,tmps,match);
+ *tmps = '\0';
+ retstr->str_nok = 0;
+ retstr->str_cur = tmps - retstr->str_ptr;
+ STABSET(retstr);
+ retstr = &str_chop;
+ goto flipmaybe;
+ case CFT_ARRAY:
+ match = cmd->c_short->str_u.str_useful; /* just to get register */
+
+ if (match < 0) { /* first time through here? */
+ ar = stab_array(cmd->c_expr[1].arg_ptr.arg_stab);
+ aryoptsave = savestack->ary_fill;
+ savesptr(&stab_val(cmd->c_stab));
+ savelong(&cmd->c_short->str_u.str_useful);
+ }
+ else {
+ ar = stab_xarray(cmd->c_expr[1].arg_ptr.arg_stab);
+ if (cmd->c_type != C_WHILE && savestack->ary_fill > firstsave)
+ restorelist(firstsave);
+ }
+
+ if (match >= ar->ary_fill) { /* we're in LAST, probably */
+ retstr = &str_undef;
+ cmd->c_short->str_u.str_useful = -1; /* actually redundant */
+ match = FALSE;
+ }
+ else {
+ match++;
+ if (!(retstr = ar->ary_array[match]))
+ retstr = afetch(ar,match,TRUE);
+ stab_val(cmd->c_stab) = retstr;
+ cmd->c_short->str_u.str_useful = match;
+ match = TRUE;
+ }
+ newsp = -2;
+ goto maybe;
+ case CFT_D1:
+ break;
+ case CFT_D0:
+ if (DBsingle->str_u.str_nval != 0)
+ break;
+ if (DBsignal->str_u.str_nval != 0)
+ break;
+ if (DBtrace->str_u.str_nval != 0)
+ break;
+ goto next_cmd;
+ }
+
+ /* we have tried to make this normal case as abnormal as possible */
+
+ doeval:
+ if (gimme == G_ARRAY) {
+ lastretstr = Nullstr;
+ lastspbase = sp;
+ lastsize = newsp - sp;
+ if (lastsize < 0)
+ lastsize = 0;
+ }
+ else
+ lastretstr = retstr;
+ while (tmps_max > tmps_base) { /* clean up after last eval */
+ str_free(tmps_list[tmps_max]);
+ tmps_list[tmps_max--] = Nullstr;
+ }
+ newsp = eval(cmd->c_expr,
+ gimme && (cmdflags & CF_TERM) && cmd->c_type == C_EXPR &&
+ !cmd->ucmd.acmd.ac_expr,
+ sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ if (newsp > sp && retstr)
+ match = str_true(retstr);
+ else
+ match = FALSE;
+ goto maybe;
+
+ /* if flipflop was true, flop it */
+
+ flipmaybe:
+ if (match && cmdflags & CF_FLIP) {
+ while (tmps_max > tmps_base) { /* clean up after last eval */
+ str_free(tmps_list[tmps_max]);
+ tmps_list[tmps_max--] = Nullstr;
+ }
+ if (cmd->c_expr->arg_type == O_FLOP) { /* currently toggled? */
+ newsp = eval(cmd->c_expr,G_SCALAR,sp);/*let eval undo it*/
+ cmdflags = copyopt(cmd,cmd->c_expr[3].arg_ptr.arg_cmd);
+ }
+ else {
+ newsp = eval(cmd->c_expr,G_SCALAR,sp);/* let eval do it */
+ if (cmd->c_expr->arg_type == O_FLOP) /* still toggled? */
+ cmdflags = copyopt(cmd,cmd->c_expr[4].arg_ptr.arg_cmd);
+ }
+ }
+ else if (cmdflags & CF_FLIP) {
+ if (cmd->c_expr->arg_type == O_FLOP) { /* currently toggled? */
+ match = TRUE; /* force on */
+ }
+ }
+
+ /* at this point, match says whether our expression was true */
+
+ maybe:
+ if (cmdflags & CF_INVERT)
+ match = !match;
+ if (!match)
+ goto next_cmd;
+ }
+#ifdef TAINT
+ tainted = 0; /* modifier doesn't affect regular expression */
+#endif
+
+ /* now to do the actual command, if any */
+
+ switch (cmd->c_type) {
+ case C_NULL:
+ fatal("panic: cmd_exec");
+ case C_EXPR: /* evaluated for side effects */
+ if (cmd->ucmd.acmd.ac_expr) { /* more to do? */
+ if (gimme == G_ARRAY) {
+ lastretstr = Nullstr;
+ lastspbase = sp;
+ lastsize = newsp - sp;
+ if (lastsize < 0)
+ lastsize = 0;
+ }
+ else
+ lastretstr = retstr;
+ while (tmps_max > tmps_base) { /* clean up after last eval */
+ str_free(tmps_list[tmps_max]);
+ tmps_list[tmps_max--] = Nullstr;
+ }
+ newsp = eval(cmd->ucmd.acmd.ac_expr,gimme && (cmdflags&CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ break;
+ case C_NSWITCH:
+ {
+ double value = str_gnum(STAB_STR(cmd->c_stab));
+
+ match = (int)value;
+ if (value < 0.0) {
+ if (((double)match) > value)
+ --match; /* was fractional--truncate other way */
+ }
+ }
+ goto doswitch;
+ case C_CSWITCH:
+ match = *(str_get(STAB_STR(cmd->c_stab))) & 255;
+ doswitch:
+ match -= cmd->ucmd.scmd.sc_offset;
+ if (match < 0)
+ match = 0;
+ else if (match > cmd->ucmd.scmd.sc_max)
+ match = cmd->ucmd.scmd.sc_max;
+ cmd = cmd->ucmd.scmd.sc_next[match];
+ goto tail_recursion_entry;
+ case C_NEXT:
+ cmd = cmd->ucmd.ccmd.cc_alt;
+ goto tail_recursion_entry;
+ case C_ELSIF:
+ fatal("panic: ELSIF");
+ case C_IF:
+ oldspat = curspat;
+ oldsave = savestack->ary_fill;
+#ifdef DEBUGGING
+ olddlevel = dlevel;
+#endif
+ retstr = &str_yes;
+ newsp = -2;
+ if (cmd->ucmd.ccmd.cc_true) {
+#ifdef DEBUGGING
+ if (debug) {
+ debname[dlevel] = 't';
+ debdelim[dlevel] = '_';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+ newsp = cmd_exec(cmd->ucmd.ccmd.cc_true,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ curspat = oldspat;
+ if (savestack->ary_fill > oldsave)
+ restorelist(oldsave);
+#ifdef DEBUGGING
+ dlevel = olddlevel;
+#endif
+ cmd = cmd->ucmd.ccmd.cc_alt;
+ goto tail_recursion_entry;
+ case C_ELSE:
+ oldspat = curspat;
+ oldsave = savestack->ary_fill;
+#ifdef DEBUGGING
+ olddlevel = dlevel;
+#endif
+ retstr = &str_undef;
+ newsp = -2;
+ if (cmd->ucmd.ccmd.cc_true) {
+#ifdef DEBUGGING
+ if (debug) {
+ debname[dlevel] = 'e';
+ debdelim[dlevel] = '_';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+ newsp = cmd_exec(cmd->ucmd.ccmd.cc_true,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ curspat = oldspat;
+ if (savestack->ary_fill > oldsave)
+ restorelist(oldsave);
+#ifdef DEBUGGING
+ dlevel = olddlevel;
+#endif
+ break;
+ case C_BLOCK:
+ case C_WHILE:
+ if (!(cmdflags & CF_ONCE)) { /* first time through here? */
+ cmdflags |= CF_ONCE;
+ if (++loop_ptr >= loop_max) {
+ loop_max += 128;
+ Renew(loop_stack, loop_max, struct loop);
+ }
+ loop_stack[loop_ptr].loop_label = cmd->c_label;
+ loop_stack[loop_ptr].loop_sp = sp;
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Pushing label #%d %s)\n",
+ loop_ptr, cmd->c_label ? cmd->c_label : "");
+ }
+#endif
+ }
+#ifdef JMPCLOBBER
+ cmdparm = cmd;
+#endif
+ match = setjmp(loop_stack[loop_ptr].loop_env);
+ if (match) {
+ st = stack->ary_array; /* possibly reallocated */
+#ifdef JMPCLOBBER
+ cmd = cmdparm;
+ cmdflags = cmd->c_flags|CF_ONCE;
+ go_to = goto_targ;
+#endif
+ if (savestack->ary_fill > oldsave)
+ restorelist(oldsave);
+ switch (match) {
+ default:
+ fatal("longjmp returned bad value (%d)",match);
+ case O_LAST:
+ if (lastretstr) {
+ retstr = lastretstr;
+ newsp = -2;
+ }
+ else {
+ newsp = sp + lastsize;
+ retstr = st[newsp];
+ }
+ curspat = oldspat;
+ goto next_cmd;
+ case O_NEXT:
+#ifdef JMPCLOBBER
+ newsp = -2;
+ retstr = &str_undef;
+#endif
+ goto next_iter;
+ case O_REDO:
+#ifdef DEBUGGING
+ dlevel = olddlevel;
+#endif
+#ifdef JMPCLOBBER
+ newsp = -2;
+ retstr = &str_undef;
+#endif
+ goto doit;
+ }
+ }
+ oldspat = curspat;
+ oldsave = savestack->ary_fill;
+#ifdef DEBUGGING
+ olddlevel = dlevel;
+#endif
+ doit:
+ if (cmd->ucmd.ccmd.cc_true) {
+#ifdef DEBUGGING
+ if (debug) {
+ debname[dlevel] = 't';
+ debdelim[dlevel] = '_';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+ newsp = cmd_exec(cmd->ucmd.ccmd.cc_true,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ /* actually, this spot is rarely reached anymore since the above
+ * cmd_exec() returns through longjmp(). Hooray for structure.
+ */
+ next_iter:
+#ifdef DEBUGGING
+ dlevel = olddlevel;
+#endif
+ if (cmd->ucmd.ccmd.cc_alt) {
+#ifdef DEBUGGING
+ if (debug) {
+ debname[dlevel] = 'a';
+ debdelim[dlevel] = '_';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+ newsp = cmd_exec(cmd->ucmd.ccmd.cc_alt,gimme && (cmdflags & CF_TERM),sp);
+ st = stack->ary_array; /* possibly reallocated */
+ retstr = st[newsp];
+ }
+ finish_while:
+ curspat = oldspat;
+ if (savestack->ary_fill > oldsave) {
+ if (cmdflags & CF_TERM) {
+ for (match = sp + 1; match <= newsp; match++)
+ st[match] = str_mortal(st[match]);
+ retstr = st[newsp];
+ }
+ restorelist(oldsave);
+ }
+#ifdef DEBUGGING
+ dlevel = olddlevel - 1;
+#endif
+ if (cmd->c_type != C_BLOCK)
+ goto until_loop; /* go back and evaluate conditional again */
+ }
+ if (cmdflags & CF_LOOP) {
+ cmdflags |= CF_COND; /* now test the condition */
+#ifdef DEBUGGING
+ dlevel = entdlevel;
+#endif
+ goto until_loop;
+ }
+ next_cmd:
+ if (cmdflags & CF_ONCE) {
+#ifdef DEBUGGING
+ if (debug & 4) {
+ tmps = loop_stack[loop_ptr].loop_label;
+ deb("(Popping label #%d %s)\n",loop_ptr, tmps ? tmps : "");
+ }
+#endif
+ loop_ptr--;
+ if ((cmdflags & CF_OPTIMIZE) == CFT_ARRAY &&
+ savestack->ary_fill > aryoptsave)
+ restorelist(aryoptsave);
+ }
+ cmd = cmd->c_next;
+ goto tail_recursion_entry;
+}
+
+#ifdef DEBUGGING
+# ifndef I_VARARGS
+/*VARARGS1*/
+deb(pat,a1,a2,a3,a4,a5,a6,a7,a8)
+char *pat;
+{
+ register int i;
+
+ fprintf(stderr,"%-4ld",(long)curcmd->c_line);
+ for (i=0; i<dlevel; i++)
+ fprintf(stderr,"%c%c ",debname[i],debdelim[i]);
+ fprintf(stderr,pat,a1,a2,a3,a4,a5,a6,a7,a8);
+}
+# else
+/*VARARGS1*/
+deb(va_alist)
+va_dcl
+{
+ va_list args;
+ char *pat;
+ register int i;
+
+ va_start(args);
+ fprintf(stderr,"%-4ld",(long)curcmd->c_line);
+ for (i=0; i<dlevel; i++)
+ fprintf(stderr,"%c%c ",debname[i],debdelim[i]);
+
+ pat = va_arg(args, char *);
+ (void) vfprintf(stderr,pat,args);
+ va_end( args );
+}
+# endif
+#endif
+
+copyopt(cmd,which)
+register CMD *cmd;
+register CMD *which;
+{
+ cmd->c_flags &= CF_ONCE|CF_COND|CF_LOOP;
+ cmd->c_flags |= which->c_flags;
+ cmd->c_short = which->c_short;
+ cmd->c_slen = which->c_slen;
+ cmd->c_stab = which->c_stab;
+ return cmd->c_flags;
+}
+
+ARRAY *
+saveary(stab)
+STAB *stab;
+{
+ register STR *str;
+
+ str = Str_new(10,0);
+ str->str_state = SS_SARY;
+ str->str_u.str_stab = stab;
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_ptr = Nullch;
+ str->str_len = 0;
+ }
+ str->str_ptr = (char*)stab_array(stab);
+ (void)apush(savestack,str); /* save array ptr */
+ stab_xarray(stab) = Null(ARRAY*);
+ return stab_xarray(aadd(stab));
+}
+
+HASH *
+savehash(stab)
+STAB *stab;
+{
+ register STR *str;
+
+ str = Str_new(11,0);
+ str->str_state = SS_SHASH;
+ str->str_u.str_stab = stab;
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_ptr = Nullch;
+ str->str_len = 0;
+ }
+ str->str_ptr = (char*)stab_hash(stab);
+ (void)apush(savestack,str); /* save hash ptr */
+ stab_xhash(stab) = Null(HASH*);
+ return stab_xhash(hadd(stab));
+}
+
+void
+saveitem(item)
+register STR *item;
+{
+ register STR *str;
+
+ (void)apush(savestack,item); /* remember the pointer */
+ str = Str_new(12,0);
+ str_sset(str,item);
+ (void)apush(savestack,str); /* remember the value */
+}
+
+void
+saveint(intp)
+int *intp;
+{
+ register STR *str;
+
+ str = Str_new(13,0);
+ str->str_state = SS_SINT;
+ str->str_u.str_useful = (long)*intp; /* remember value */
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_len = 0;
+ }
+ str->str_ptr = (char*)intp; /* remember pointer */
+ (void)apush(savestack,str);
+}
+
+void
+savelong(longp)
+long *longp;
+{
+ register STR *str;
+
+ str = Str_new(14,0);
+ str->str_state = SS_SLONG;
+ str->str_u.str_useful = *longp; /* remember value */
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_len = 0;
+ }
+ str->str_ptr = (char*)longp; /* remember pointer */
+ (void)apush(savestack,str);
+}
+
+void
+savesptr(sptr)
+STR **sptr;
+{
+ register STR *str;
+
+ str = Str_new(15,0);
+ str->str_state = SS_SSTRP;
+ str->str_magic = *sptr; /* remember value */
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_len = 0;
+ }
+ str->str_ptr = (char*)sptr; /* remember pointer */
+ (void)apush(savestack,str);
+}
+
+void
+savenostab(stab)
+STAB *stab;
+{
+ register STR *str;
+
+ str = Str_new(16,0);
+ str->str_state = SS_SNSTAB;
+ str->str_magic = (STR*)stab; /* remember which stab to free */
+ (void)apush(savestack,str);
+}
+
+void
+savehptr(hptr)
+HASH **hptr;
+{
+ register STR *str;
+
+ str = Str_new(17,0);
+ str->str_state = SS_SHPTR;
+ str->str_u.str_hash = *hptr; /* remember value */
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_len = 0;
+ }
+ str->str_ptr = (char*)hptr; /* remember pointer */
+ (void)apush(savestack,str);
+}
+
+void
+saveaptr(aptr)
+ARRAY **aptr;
+{
+ register STR *str;
+
+ str = Str_new(17,0);
+ str->str_state = SS_SAPTR;
+ str->str_u.str_array = *aptr; /* remember value */
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_len = 0;
+ }
+ str->str_ptr = (char*)aptr; /* remember pointer */
+ (void)apush(savestack,str);
+}
+
+void
+savelist(sarg,maxsarg)
+register STR **sarg;
+int maxsarg;
+{
+ register STR *str;
+ register int i;
+
+ for (i = 1; i <= maxsarg; i++) {
+ (void)apush(savestack,sarg[i]); /* remember the pointer */
+ str = Str_new(18,0);
+ str_sset(str,sarg[i]);
+ (void)apush(savestack,str); /* remember the value */
+ sarg[i]->str_u.str_useful = -1;
+ }
+}
+
+void
+restorelist(base)
+int base;
+{
+ register STR *str;
+ register STR *value;
+ register STAB *stab;
+
+ if (base < -1)
+ fatal("panic: corrupt saved stack index");
+ while (savestack->ary_fill > base) {
+ value = apop(savestack);
+ switch (value->str_state) {
+ case SS_NORM: /* normal string */
+ case SS_INCR:
+ str = apop(savestack);
+ str_replace(str,value);
+ STABSET(str);
+ break;
+ case SS_SARY: /* array reference */
+ stab = value->str_u.str_stab;
+ afree(stab_xarray(stab));
+ stab_xarray(stab) = (ARRAY*)value->str_ptr;
+ value->str_ptr = Nullch;
+ str_free(value);
+ break;
+ case SS_SHASH: /* hash reference */
+ stab = value->str_u.str_stab;
+ (void)hfree(stab_xhash(stab), FALSE);
+ stab_xhash(stab) = (HASH*)value->str_ptr;
+ value->str_ptr = Nullch;
+ str_free(value);
+ break;
+ case SS_SINT: /* int reference */
+ *((int*)value->str_ptr) = (int)value->str_u.str_useful;
+ value->str_ptr = Nullch;
+ str_free(value);
+ break;
+ case SS_SLONG: /* long reference */
+ *((long*)value->str_ptr) = value->str_u.str_useful;
+ value->str_ptr = Nullch;
+ str_free(value);
+ break;
+ case SS_SSTRP: /* STR* reference */
+ *((STR**)value->str_ptr) = value->str_magic;
+ value->str_magic = Nullstr;
+ value->str_ptr = Nullch;
+ str_free(value);
+ break;
+ case SS_SHPTR: /* HASH* reference */
+ *((HASH**)value->str_ptr) = value->str_u.str_hash;
+ value->str_ptr = Nullch;
+ str_free(value);
+ break;
+ case SS_SAPTR: /* ARRAY* reference */
+ *((ARRAY**)value->str_ptr) = value->str_u.str_array;
+ value->str_ptr = Nullch;
+ str_free(value);
+ break;
+ case SS_SNSTAB:
+ stab = (STAB*)value->str_magic;
+ value->str_magic = Nullstr;
+ (void)stab_clear(stab);
+ str_free(value);
+ break;
+ case SS_SCSV: /* callsave structure */
+ {
+ CSV *csv = (CSV*) value->str_ptr;
+
+ curcmd = csv->curcmd;
+ curcsv = csv->curcsv;
+ csv->sub->depth = csv->depth;
+ if (csv->hasargs) { /* put back old @_ */
+ afree(csv->argarray);
+ stab_xarray(defstab) = csv->savearray;
+ }
+ str_free(value);
+ }
+ break;
+ default:
+ fatal("panic: restorelist inconsistency");
+ }
+ }
+}
+
+#ifdef DEBUGGING
+void
+grow_dlevel()
+{
+ dlmax += 128;
+ Renew(debname, dlmax, char);
+ Renew(debdelim, dlmax, char);
+}
+#endif
diff --git a/MultiSource/Benchmarks/MallocBench/perl/cmd.h b/MultiSource/Benchmarks/MallocBench/perl/cmd.h
new file mode 100644
index 00000000..56dc2d85
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/cmd.h
@@ -0,0 +1,170 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:04:34 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#define C_NULL 0
+#define C_IF 1
+#define C_ELSE 2
+#define C_WHILE 3
+#define C_BLOCK 4
+#define C_EXPR 5
+#define C_NEXT 6
+#define C_ELSIF 7 /* temporary--turns into an IF + ELSE */
+#define C_CSWITCH 8 /* created by switch optimization in block_head() */
+#define C_NSWITCH 9 /* likewise */
+
+#ifdef DEBUGGING
+#ifndef DOINIT
+extern char *cmdname[];
+#else
+char *cmdname[] = {
+ "NULL",
+ "IF",
+ "ELSE",
+ "WHILE",
+ "BLOCK",
+ "EXPR",
+ "NEXT",
+ "ELSIF",
+ "CSWITCH",
+ "NSWITCH",
+ "10"
+};
+#endif
+#endif /* DEBUGGING */
+
+#define CF_OPTIMIZE 077 /* type of optimization */
+#define CF_FIRSTNEG 0100/* conditional is ($register NE 'string') */
+#define CF_NESURE 0200 /* if short doesn't match we're sure */
+#define CF_EQSURE 0400 /* if short does match we're sure */
+#define CF_COND 01000 /* test c_expr as conditional first, if not null. */
+ /* Set for everything except do {} while currently */
+#define CF_LOOP 02000 /* loop on the c_expr conditional (loop modifiers) */
+#define CF_INVERT 04000 /* it's an "unless" or an "until" */
+#define CF_ONCE 010000 /* we've already pushed the label on the stack */
+#define CF_FLIP 020000 /* on a match do flipflop */
+#define CF_TERM 040000 /* value of this cmd might be returned */
+#define CF_DBSUB 0100000 /* this is an inserted cmd for debugging */
+
+#define CFT_FALSE 0 /* c_expr is always false */
+#define CFT_TRUE 1 /* c_expr is always true */
+#define CFT_REG 2 /* c_expr is a simple register */
+#define CFT_ANCHOR 3 /* c_expr is an anchored search /^.../ */
+#define CFT_STROP 4 /* c_expr is a string comparison */
+#define CFT_SCAN 5 /* c_expr is an unanchored search /.../ */
+#define CFT_GETS 6 /* c_expr is <filehandle> */
+#define CFT_EVAL 7 /* c_expr is not optimized, so call eval() */
+#define CFT_UNFLIP 8 /* 2nd half of range not optimized */
+#define CFT_CHOP 9 /* c_expr is a chop on a register */
+#define CFT_ARRAY 10 /* this is a foreach loop */
+#define CFT_INDGETS 11 /* c_expr is <$variable> */
+#define CFT_NUMOP 12 /* c_expr is a numeric comparison */
+#define CFT_CCLASS 13 /* c_expr must start with one of these characters */
+#define CFT_D0 14 /* no special breakpoint at this line */
+#define CFT_D1 15 /* possible special breakpoint at this line */
+
+#ifdef DEBUGGING
+#ifndef DOINIT
+extern char *cmdopt[];
+#else
+char *cmdopt[] = {
+ "FALSE",
+ "TRUE",
+ "REG",
+ "ANCHOR",
+ "STROP",
+ "SCAN",
+ "GETS",
+ "EVAL",
+ "UNFLIP",
+ "CHOP",
+ "ARRAY",
+ "INDGETS",
+ "NUMOP",
+ "CCLASS",
+ "14"
+};
+#endif
+#endif /* DEBUGGING */
+
+struct acmd {
+ STAB *ac_stab; /* a symbol table entry */
+ ARG *ac_expr; /* any associated expression */
+};
+
+struct ccmd {
+ CMD *cc_true; /* normal code to do on if and while */
+ CMD *cc_alt; /* else cmd ptr or continue code */
+};
+
+struct scmd {
+ CMD **sc_next; /* array of pointers to commands */
+ short sc_offset; /* first value - 1 */
+ short sc_max; /* last value + 1 */
+};
+
+struct cmd {
+ CMD *c_next; /* the next command at this level */
+ ARG *c_expr; /* conditional expression */
+ CMD *c_head; /* head of this command list */
+ STR *c_short; /* string to match as shortcut */
+ STAB *c_stab; /* a symbol table entry, mostly for fp */
+ SPAT *c_spat; /* pattern used by optimization */
+ char *c_label; /* label for this construct */
+ union ucmd {
+ struct acmd acmd; /* normal command */
+ struct ccmd ccmd; /* compound command */
+ struct scmd scmd; /* switch command */
+ } ucmd;
+ short c_slen; /* len of c_short, if not null */
+ VOLATILE short c_flags; /* optimization flags--see above */
+ HASH *c_stash; /* package line was compiled in */
+ STAB *c_filestab; /* file the following line # is from */
+ line_t c_line; /* line # of this command */
+ char c_type; /* what this command does */
+};
+
+#define Nullcmd Null(CMD*)
+#define Nullcsv Null(CSV*)
+
+EXT CMD * VOLATILE main_root INIT(Nullcmd);
+EXT CMD * VOLATILE eval_root INIT(Nullcmd);
+
+EXT CMD compiling;
+EXT CMD * VOLATILE curcmd INIT(&compiling);
+EXT CSV * VOLATILE curcsv INIT(Nullcsv);
+
+struct callsave {
+ SUBR *sub;
+ STAB *stab;
+ CSV *curcsv;
+ CMD *curcmd;
+ ARRAY *savearray;
+ ARRAY *argarray;
+ long depth;
+ int wantarray;
+ char hasargs;
+};
+
+struct compcmd {
+ CMD *comp_true;
+ CMD *comp_alt;
+};
+
+void opt_arg();
+void evalstatic();
+int cmd_exec();
diff --git a/MultiSource/Benchmarks/MallocBench/perl/config.h b/MultiSource/Benchmarks/MallocBench/perl/config.h
new file mode 100644
index 00000000..5a4b23a7
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/config.h
@@ -0,0 +1,823 @@
+#ifndef config_h
+#define config_h
+/* config.h
+ * This file was produced by running the config.h.SH script, which
+ * gets its values from config.sh, which is generally produced by
+ * running Configure.
+ *
+ * Feel free to modify any of this as the need arises. Note, however,
+ * that running config.h.SH again will wipe out any changes you've made.
+ * For a more permanent change edit config.sh and rerun config.h.SH.
+ */
+
+
+/* EUNICE
+ * This symbol, if defined, indicates that the program is being compiled
+ * under the EUNICE package under VMS. The program will need to handle
+ * things like files that don't go away the first time you unlink them,
+ * due to version numbering. It will also need to compensate for lack
+ * of a respectable link() command.
+ */
+/* VMS
+ * This symbol, if defined, indicates that the program is running under
+ * VMS. It is currently only set in conjunction with the EUNICE symbol.
+ */
+/*#undef EUNICE /**/
+/*#undef VMS /**/
+
+/* ALIGNBYTES
+ * This symbol contains the number of bytes required to align a double.
+ * Usual values are 2, 4, and 8.
+ */
+#define ALIGNBYTES 8 /**/
+
+/* BIN
+ * This symbol holds the name of the directory in which the user wants
+ * to keep publicly executable images for the package in question. It
+ * is most often a local directory such as /usr/local/bin.
+ */
+#define BIN "/usr/local/bin" /**/
+
+/* BYTEORDER
+ * This symbol contains an encoding of the order of bytes in a long.
+ * Usual values (in octal) are 01234, 04321, 02143, 03412...
+ */
+#define BYTEORDER 0x4321 /**/
+
+/* CPPSTDIN
+ * This symbol contains the first part of the string which will invoke
+ * the C preprocessor on the standard input and produce to standard
+ * output. Typical value of "cc -E" or "/lib/cpp".
+ */
+/* CPPMINUS
+ * This symbol contains the second part of the string which will invoke
+ * the C preprocessor on the standard input and produce to standard
+ * output. This symbol will have the value "-" if CPPSTDIN needs a minus
+ * to specify standard input, otherwise the value is "".
+ */
+#define CPPSTDIN "/usr/local/lib/gcc-cpp"
+#define CPPMINUS ""
+
+/* HAS_BCMP
+ * This symbol, if defined, indicates that the bcmp routine is available
+ * to compare blocks of memory. If undefined, use memcmp. If that's
+ * not available, roll your own.
+ */
+#define HAS_BCMP /**/
+
+/* HAS_BCOPY
+ * This symbol, if defined, indicates that the bcopy routine is available
+ * to copy blocks of memory. Otherwise you should probably use memcpy().
+ */
+#define HAS_BCOPY /**/
+
+/* HAS_BZERO
+ * This symbol, if defined, indicates that the bzero routine is available
+ * to zero blocks of memory. Otherwise you should probably use memset()
+ * or roll your own.
+ */
+#define HAS_BZERO /**/
+
+/* CASTNEGFLOAT
+ * This symbol, if defined, indicates that this C compiler knows how to
+ * cast negative or large floating point numbers to unsigned longs, ints
+ * and shorts.
+ */
+/* CASTFLAGS
+ * This symbol contains flags that say what difficulties the compiler
+ * has casting odd floating values to unsigned long:
+ * 1 = couldn't cast < 0
+ * 2 = couldn't cast >= 0x80000000
+ */
+#define CASTNEGFLOAT /**/
+#define CASTFLAGS 0 /**/
+
+/* CHARSPRINTF
+ * This symbol is defined if this system declares "char *sprintf()" in
+ * stdio.h. The trend seems to be to declare it as "int sprintf()". It
+ * is up to the package author to declare sprintf correctly based on the
+ * symbol.
+ */
+#define CHARSPRINTF /**/
+
+/* HAS_CHSIZE
+ * This symbol, if defined, indicates that the chsize routine is available
+ * to truncate files. You might need a -lx to get this routine.
+ */
+/*#undef HAS_CHSIZE /**/
+
+/* HAS_CRYPT
+ * This symbol, if defined, indicates that the crypt routine is available
+ * to encrypt passwords and the like.
+ */
+#define HAS_CRYPT /**/
+
+/* CSH
+ * This symbol, if defined, indicates that the C-shell exists.
+ * If defined, contains the full pathname of csh.
+ */
+/* #define CSH "/bin/csh" */
+
+/* DOSUID
+ * This symbol, if defined, indicates that the C program should
+ * check the script that it is executing for setuid/setgid bits, and
+ * attempt to emulate setuid/setgid on systems that have disabled
+ * setuid #! scripts because the kernel can't do it securely.
+ * It is up to the package designer to make sure that this emulation
+ * is done securely. Among other things, it should do an fstat on
+ * the script it just opened to make sure it really is a setuid/setgid
+ * script, it should make sure the arguments passed correspond exactly
+ * to the argument on the #! line, and it should not trust any
+ * subprocesses to which it must pass the filename rather than the
+ * file descriptor of the script to be executed.
+ */
+/*#undef DOSUID /**/
+
+/* HAS_DUP2
+ * This symbol, if defined, indicates that the dup2 routine is available
+ * to dup file descriptors. Otherwise you should use dup().
+ */
+#define HAS_DUP2 /**/
+
+/* HAS_FCHMOD
+ * This symbol, if defined, indicates that the fchmod routine is available
+ * to change mode of opened files. If unavailable, use chmod().
+ */
+#define HAS_FCHMOD /**/
+
+/* HAS_FCHOWN
+ * This symbol, if defined, indicates that the fchown routine is available
+ * to change ownership of opened files. If unavailable, use chown().
+ */
+#define HAS_FCHOWN /**/
+
+/* HAS_FCNTL
+ * This symbol, if defined, indicates to the C program that
+ * the fcntl() function exists.
+ */
+#define HAS_FCNTL /**/
+
+/* FLEXFILENAMES
+ * This symbol, if defined, indicates that the system supports filenames
+ * longer than 14 characters.
+ */
+#define FLEXFILENAMES /**/
+
+/* HAS_FLOCK
+ * This symbol, if defined, indicates that the flock() routine is
+ * available to do file locking.
+ */
+#define HAS_FLOCK /**/
+
+/* HAS_GETGROUPS
+ * This symbol, if defined, indicates that the getgroups() routine is
+ * available to get the list of process groups. If unavailable, multiple
+ * groups are probably not supported.
+ */
+#define HAS_GETGROUPS /**/
+
+/* HAS_GETHOSTENT
+ * This symbol, if defined, indicates that the gethostent() routine is
+ * available to lookup host names in some data base or other.
+ */
+/*#undef HAS_GETHOSTENT /**/
+
+/* HAS_GETPGRP
+ * This symbol, if defined, indicates that the getpgrp() routine is
+ * available to get the current process group.
+ */
+#define HAS_GETPGRP /**/
+
+/* HAS_GETPGRP2
+ * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
+ * routine is available to get the current process group.
+ */
+/*#undef HAS_GETPGRP2 /**/
+
+/* HAS_GETPRIORITY
+ * This symbol, if defined, indicates that the getpriority() routine is
+ * available to get a process's priority.
+ */
+#define HAS_GETPRIORITY /**/
+
+/* HAS_HTONS
+ * This symbol, if defined, indicates that the htons routine (and friends)
+ * are available to do network order byte swapping.
+ */
+/* HAS_HTONL
+ * This symbol, if defined, indicates that the htonl routine (and friends)
+ * are available to do network order byte swapping.
+ */
+/* HAS_NTOHS
+ * This symbol, if defined, indicates that the ntohs routine (and friends)
+ * are available to do network order byte swapping.
+ */
+/* HAS_NTOHL
+ * This symbol, if defined, indicates that the ntohl routine (and friends)
+ * are available to do network order byte swapping.
+ */
+#define HAS_HTONS /**/
+#define HAS_HTONL /**/
+#define HAS_NTOHS /**/
+#define HAS_NTOHL /**/
+
+/* index
+ * This preprocessor symbol is defined, along with rindex, if the system
+ * uses the strchr and strrchr routines instead.
+ */
+/* rindex
+ * This preprocessor symbol is defined, along with index, if the system
+ * uses the strchr and strrchr routines instead.
+ */
+/*#undef index strchr /* cultural */
+/*#undef rindex strrchr /* differences? */
+
+/* HAS_KILLPG
+ * This symbol, if defined, indicates that the killpg routine is available
+ * to kill process groups. If unavailable, you probably should use kill
+ * with a negative process number.
+ */
+#define HAS_KILLPG /**/
+
+/* HAS_LSTAT
+ * This symbol, if defined, indicates that the lstat() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_LSTAT /**/
+
+/* HAS_MEMCMP
+ * This symbol, if defined, indicates that the memcmp routine is available
+ * to compare blocks of memory. If undefined, roll your own.
+ */
+#define HAS_MEMCMP /**/
+
+/* HAS_MEMCPY
+ * This symbol, if defined, indicates that the memcpy routine is available
+ * to copy blocks of memory. Otherwise you should probably use bcopy().
+ * If neither is defined, roll your own.
+ */
+#define HAS_MEMCPY /**/
+
+/* HAS_MKDIR
+ * This symbol, if defined, indicates that the mkdir routine is available
+ * to create directories. Otherwise you should fork off a new process to
+ * exec /bin/mkdir.
+ */
+#define HAS_MKDIR /**/
+
+/* HAS_MSG
+ * This symbol, if defined, indicates that the entire msg*(2) library is
+ * supported.
+ */
+#define HAS_MSG /**/
+
+/* HAS_MSGCTL
+ * This symbol, if defined, indicates that the msgctl() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_MSGCTL /**/
+
+/* HAS_MSGGET
+ * This symbol, if defined, indicates that the msgget() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_MSGGET /**/
+
+/* HAS_MSGRCV
+ * This symbol, if defined, indicates that the msgrcv() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_MSGRCV /**/
+
+/* HAS_MSGSND
+ * This symbol, if defined, indicates that the msgsnd() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_MSGSND /**/
+
+/* HAS_NDBM
+ * This symbol, if defined, indicates that ndbm.h exists and should
+ * be included.
+ */
+/* #define HAS_NDBM */
+
+/* HAS_ODBM
+ * This symbol, if defined, indicates that dbm.h exists and should
+ * be included.
+ */
+/* #define HAS_ODBM */
+
+/* HAS_OPEN3
+ * This manifest constant lets the C program know that the three
+ * argument form of open(2) is available.
+ */
+#define HAS_OPEN3 /**/
+
+/* HAS_READDIR
+ * This symbol, if defined, indicates that the readdir routine is available
+ * from the C library to read directories.
+ */
+#define HAS_READDIR /**/
+
+/* HAS_RENAME
+ * This symbol, if defined, indicates that the rename routine is available
+ * to rename files. Otherwise you should do the unlink(), link(), unlink()
+ * trick.
+ */
+#define HAS_RENAME /**/
+
+/* HAS_RMDIR
+ * This symbol, if defined, indicates that the rmdir routine is available
+ * to remove directories. Otherwise you should fork off a new process to
+ * exec /bin/rmdir.
+ */
+#define HAS_RMDIR /**/
+
+/* HAS_SELECT
+ * This symbol, if defined, indicates that the select() subroutine
+ * exists.
+ */
+#define HAS_SELECT /**/
+
+/* HAS_SEM
+ * This symbol, if defined, indicates that the entire sem*(2) library is
+ * supported.
+ */
+#define HAS_SEM /**/
+
+/* HAS_SEMCTL
+ * This symbol, if defined, indicates that the semctl() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_SEMCTL /**/
+
+/* HAS_SEMGET
+ * This symbol, if defined, indicates that the semget() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_SEMGET /**/
+
+/* HAS_SEMOP
+ * This symbol, if defined, indicates that the semop() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_SEMOP /**/
+
+/* HAS_SETEGID
+ * This symbol, if defined, indicates that the setegid routine is available
+ * to change the effective gid of the current program.
+ */
+#define HAS_SETEGID /**/
+
+/* HAS_SETEUID
+ * This symbol, if defined, indicates that the seteuid routine is available
+ * to change the effective uid of the current program.
+ */
+#define HAS_SETEUID /**/
+
+/* HAS_SETPGRP
+ * This symbol, if defined, indicates that the setpgrp() routine is
+ * available to set the current process group.
+ */
+#define HAS_SETPGRP /**/
+
+/* HAS_SETPGRP2
+ * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
+ * routine is available to set the current process group.
+ */
+/*#undef HAS_SETPGRP2 /**/
+
+/* HAS_SETPRIORITY
+ * This symbol, if defined, indicates that the setpriority() routine is
+ * available to set a process's priority.
+ */
+#define HAS_SETPRIORITY /**/
+
+/* HAS_SETREGID
+ * This symbol, if defined, indicates that the setregid routine is
+ * available to change the real and effective gid of the current program.
+ */
+/* HAS_SETRESGID
+ * This symbol, if defined, indicates that the setresgid routine is
+ * available to change the real, effective and saved gid of the current
+ * program.
+ */
+#define HAS_SETREGID /**/
+/*#undef HAS_SETRESGID /**/
+
+/* HAS_SETREUID
+ * This symbol, if defined, indicates that the setreuid routine is
+ * available to change the real and effective uid of the current program.
+ */
+/* HAS_SETRESUID
+ * This symbol, if defined, indicates that the setresuid routine is
+ * available to change the real, effective and saved uid of the current
+ * program.
+ */
+#define HAS_SETREUID /**/
+/*#undef HAS_SETRESUID /**/
+
+/* HAS_SETRGID
+ * This symbol, if defined, indicates that the setrgid routine is available
+ * to change the real gid of the current program.
+ */
+/* #define HAS_SETRGID */
+
+/* HAS_SETRUID
+ * This symbol, if defined, indicates that the setruid routine is available
+ * to change the real uid of the current program.
+ */
+/* #define HAS_SETRUID */
+
+/* HAS_SHM
+ * This symbol, if defined, indicates that the entire shm*(2) library is
+ * supported.
+ */
+#define HAS_SHM /**/
+
+/* HAS_SHMAT
+ * This symbol, if defined, indicates that the shmat() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_SHMAT /**/
+
+/* HAS_SHMCTL
+ * This symbol, if defined, indicates that the shmctl() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_SHMCTL /**/
+
+/* HAS_SHMDT
+ * This symbol, if defined, indicates that the shmdt() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_SHMDT /**/
+
+/* HAS_SHMGET
+ * This symbol, if defined, indicates that the shmget() routine is
+ * available to stat symbolic links.
+ */
+#define HAS_SHMGET /**/
+
+/* HAS_SOCKET
+ * This symbol, if defined, indicates that the BSD socket interface is
+ * supported.
+ */
+/* HAS_SOCKETPAIR
+ * This symbol, if defined, indicates that the BSD socketpair call is
+ * supported.
+ */
+/* OLDSOCKET
+ * This symbol, if defined, indicates that the 4.1c BSD socket interface
+ * is supported instead of the 4.2/4.3 BSD socket interface.
+ */
+#define HAS_SOCKET /**/
+
+#define HAS_SOCKETPAIR /**/
+
+/*#undef OLDSOCKET /**/
+
+/* STATBLOCKS
+ * This symbol is defined if this system has a stat structure declaring
+ * st_blksize and st_blocks.
+ */
+#define STATBLOCKS /**/
+
+/* STDSTDIO
+ * This symbol is defined if this system has a FILE structure declaring
+ * _ptr and _cnt in stdio.h.
+ */
+/*#define STDSTDIO /**/
+
+/* STRUCTCOPY
+ * This symbol, if defined, indicates that this C compiler knows how
+ * to copy structures. If undefined, you'll need to use a block copy
+ * routine of some sort instead.
+ */
+#define STRUCTCOPY /**/
+
+/* HAS_STRERROR
+ * This symbol, if defined, indicates that the strerror() routine is
+ * available to translate error numbers to strings.
+ */
+/*#undef HAS_STRERROR /**/
+
+/* HAS_SYMLINK
+ * This symbol, if defined, indicates that the symlink routine is available
+ * to create symbolic links.
+ */
+#define HAS_SYMLINK /**/
+
+/* HAS_SYSCALL
+ * This symbol, if defined, indicates that the syscall routine is available
+ * to call arbitrary system calls. If undefined, that's tough.
+ */
+#define HAS_SYSCALL /**/
+
+/* HAS_TRUNCATE
+ * This symbol, if defined, indicates that the truncate routine is
+ * available to truncate files.
+ */
+#define HAS_TRUNCATE /**/
+
+/* HAS_VFORK
+ * This symbol, if defined, indicates that vfork() exists.
+ */
+#define HAS_VFORK /**/
+
+/* VOIDSIG
+ * This symbol is defined if this system declares "void (*signal())()" in
+ * signal.h. The old way was to declare it as "int (*signal())()". It
+ * is up to the package author to declare things correctly based on the
+ * symbol.
+ */
+/* TO_SIGNAL
+ * This symbol's value is either "void" or "int", corresponding to the
+ * appropriate return "type" of a signal handler. Thus, one can declare
+ * a signal handler using "TO_SIGNAL (*handler())()", and define the
+ * handler using "TO_SIGNAL handler(sig)".
+ */
+#define VOIDSIG /**/
+#define TO_SIGNAL void /**/
+
+/* HASVOLATILE
+ * This symbol, if defined, indicates that this C compiler knows about
+ * the volatile declaration.
+ */
+#define HASVOLATILE /**/
+
+/* HAS_VPRINTF
+ * This symbol, if defined, indicates that the vprintf routine is available
+ * to printf with a pointer to an argument list. If unavailable, you
+ * may need to write your own, probably in terms of _doprnt().
+ */
+/* CHARVSPRINTF
+ * This symbol is defined if this system has vsprintf() returning type
+ * (char*). The trend seems to be to declare it as "int vsprintf()". It
+ * is up to the package author to declare vsprintf correctly based on the
+ * symbol.
+ */
+#define HAS_VPRINTF /**/
+#define CHARVSPRINTF /**/
+
+/* HAS_WAIT4
+ * This symbol, if defined, indicates that wait4() exists.
+ */
+/*#define HAS_WAIT4 /**/
+
+/* HAS_WAITPID
+ * This symbol, if defined, indicates that waitpid() exists.
+ */
+#define HAS_WAITPID /**/
+
+/* GIDTYPE
+ * This symbol has a value like gid_t, int, ushort, or whatever type is
+ * used to declare group ids in the kernel.
+ */
+#define GIDTYPE gid_t /**/
+
+/* GROUPSTYPE
+ * This symbol has a value like gid_t, int, ushort, or whatever type is
+ * used in the return value of getgroups().
+ */
+#define GROUPSTYPE int /**/
+
+/* I_FCNTL
+ * This manifest constant tells the C program to include <fcntl.h>.
+ */
+/*#undef I_FCNTL /**/
+
+/* I_GDBM
+ * This symbol, if defined, indicates that gdbm.h exists and should
+ * be included.
+ */
+/*#undef I_GDBM /**/
+
+/* I_GRP
+ * This symbol, if defined, indicates to the C program that it should
+ * include grp.h.
+ */
+#define I_GRP /**/
+
+/* I_NETINET_IN
+ * This symbol, if defined, indicates to the C program that it should
+ * include netinet/in.h.
+ */
+/* I_SYS_IN
+ * This symbol, if defined, indicates to the C program that it should
+ * include sys/in.h.
+ */
+#define I_NETINET_IN /**/
+/*#undef I_SYS_IN /**/
+
+/* I_PWD
+ * This symbol, if defined, indicates to the C program that it should
+ * include pwd.h.
+ */
+/* PWQUOTA
+ * This symbol, if defined, indicates to the C program that struct passwd
+ * contains pw_quota.
+ */
+/* PWAGE
+ * This symbol, if defined, indicates to the C program that struct passwd
+ * contains pw_age.
+ */
+/* PWCHANGE
+ * This symbol, if defined, indicates to the C program that struct passwd
+ * contains pw_change.
+ */
+/* PWCLASS
+ * This symbol, if defined, indicates to the C program that struct passwd
+ * contains pw_class.
+ */
+/* PWEXPIRE
+ * This symbol, if defined, indicates to the C program that struct passwd
+ * contains pw_expire.
+ */
+/* PWCOMMENT
+ * This symbol, if defined, indicates to the C program that struct passwd
+ * contains pw_comment.
+ */
+#define I_PWD /**/
+/*#undef PWQUOTA */
+/* #define PWAGE */
+/*#undef PWCHANGE */
+/*#undef PWCLASS */
+/*#undef PWEXPIRE */
+/*#define PWCOMMENT */
+
+/* I_SYS_FILE
+ * This manifest constant tells the C program to include <sys/file.h>.
+ */
+#define I_SYS_FILE /**/
+
+/* I_SYSIOCTL
+ * This symbol, if defined, indicates that sys/ioctl.h exists and should
+ * be included.
+ */
+#define I_SYSIOCTL /**/
+
+/* I_TIME
+ * This symbol is defined if the program should include <time.h>.
+ */
+/* I_SYS_TIME
+ * This symbol is defined if the program should include <sys/time.h>.
+ */
+/* SYSTIMEKERNEL
+ * This symbol is defined if the program should include <sys/time.h>
+ * with KERNEL defined.
+ */
+/* I_SYS_SELECT
+ * This symbol is defined if the program should include <sys/select.h>.
+ */
+#define I_TIME /**/
+#define I_SYS_TIME /**/
+/*#undef SYSTIMEKERNEL /**/
+/*#undef I_SYS_SELECT /**/
+
+/* I_UTIME
+ * This symbol, if defined, indicates to the C program that it should
+ * include utime.h.
+ */
+#define I_UTIME /**/
+
+/* I_VARARGS
+ * This symbol, if defined, indicates to the C program that it should
+ * include varargs.h.
+ */
+/* #define I_VARARGS */
+
+/* I_VFORK
+ * This symbol, if defined, indicates to the C program that it should
+ * include vfork.h.
+ */
+/*#define I_VFORK /**/
+
+/* INTSIZE
+ * This symbol contains the size of an int, so that the C preprocessor
+ * can make decisions based on it.
+ */
+#define INTSIZE 4 /**/
+
+/* I_DIRENT
+ * This symbol, if defined, indicates that the program should use the
+ * P1003-style directory routines, and include <dirent.h>.
+ */
+/* I_SYS_DIR
+ * This symbol, if defined, indicates that the program should use the
+ * directory functions by including <sys/dir.h>.
+ */
+/* I_NDIR
+ * This symbol, if defined, indicates that the program should include the
+ * system's version of ndir.h, rather than the one with this package.
+ */
+/* I_SYS_NDIR
+ * This symbol, if defined, indicates that the program should include the
+ * system's version of sys/ndir.h, rather than the one with this package.
+ */
+/* I_MY_DIR
+ * This symbol, if defined, indicates that the program should compile
+ * the ndir.c code provided with the package.
+ */
+/* DIRNAMLEN
+ * This symbol, if defined, indicates to the C program that the length
+ * of directory entry names is provided by a d_namlen field. Otherwise
+ * you need to do strlen() on the d_name field.
+ */
+#define I_DIRENT /**/
+/*#undef I_SYS_DIR /**/
+/*#undef I_NDIR /**/
+/*#undef I_SYS_NDIR /**/
+/*#undef I_MY_DIR /**/
+/*#undef DIRNAMLEN /**/
+
+/* MALLOCPTRTYPE
+ * This symbol defines the kind of ptr returned by malloc and realloc.
+ */
+#define MALLOCPTRTYPE char /**/
+
+
+/* RANDBITS
+ * This symbol contains the number of bits of random number the rand()
+ * function produces. Usual values are 15, 16, and 31.
+ */
+#define RANDBITS 31 /**/
+
+/* SCRIPTDIR
+ * This symbol holds the name of the directory in which the user wants
+ * to put publicly executable scripts for the package in question. It
+ * is often a directory that is mounted across diverse architectures.
+ */
+#define SCRIPTDIR "/usr/local/bin" /**/
+
+/* SIG_NAME
+ * This symbol contains an list of signal names in order.
+ */
+#define SIG_NAME "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","LOST","USR1","USR2" /**/
+
+/* STDCHAR
+ * This symbol is defined to be the type of char used in stdio.h.
+ * It has the values "unsigned char" or "char".
+ */
+#define STDCHAR unsigned char /**/
+
+/* UIDTYPE
+ * This symbol has a value like uid_t, int, ushort, or whatever type is
+ * used to declare user ids in the kernel.
+ */
+#define UIDTYPE uid_t /**/
+
+/* VOIDHAVE
+ * This symbol indicates how much support of the void type is given by this
+ * compiler. What various bits mean:
+ *
+ * 1 = supports declaration of void
+ * 2 = supports arrays of pointers to functions returning void
+ * 4 = supports comparisons between pointers to void functions and
+ * addresses of void functions
+ *
+ * The package designer should define VOIDWANT to indicate the requirements
+ * of the package. This can be done either by #defining VOIDWANT before
+ * including config.h, or by defining voidwant in Myinit.U. If the level
+ * of void support necessary is not present, config.h defines void to "int",
+ * VOID to the empty string, and VOIDP to "char *".
+ */
+/* void
+ * This symbol is used for void casts. On implementations which support
+ * void appropriately, its value is "void". Otherwise, its value maps
+ * to "int".
+ */
+/* VOID
+ * This symbol's value is "void" if the implementation supports void
+ * appropriately. Otherwise, its value is the empty string. The primary
+ * use of this symbol is in specifying void parameter lists for function
+ * prototypes.
+ */
+/* VOIDP
+ * This symbol is used for casting generic pointers. On implementations
+ * which support void appropriately, its value is "void *". Otherwise,
+ * its value is "char *".
+ */
+#ifndef VOIDWANT
+#define VOIDWANT 7
+#endif
+#define VOIDHAVE 7
+#if (VOIDHAVE & VOIDWANT) != VOIDWANT
+#define void int /* is void to be avoided? */
+#define VOID
+#define VOIDP (char *)
+#define M_VOID /* Xenix strikes again */
+#else
+#define VOID void
+#define VOIDP (void *)
+#endif
+
+/* PRIVLIB
+ * This symbol contains the name of the private library for this package.
+ * The library is private in the sense that it needn't be in anyone's
+ * execution path, but it should be accessible by the world. The program
+ * should be prepared to do ~ expansion.
+ */
+#define PRIVLIB "/usr/local/lib/perl" /**/
+
+#endif
diff --git a/MultiSource/Benchmarks/MallocBench/perl/config.sh b/MultiSource/Benchmarks/MallocBench/perl/config.sh
new file mode 100644
index 00000000..605c3b05
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/config.sh
@@ -0,0 +1,256 @@
+#!/bin/sh
+# config.sh
+# This file was produced by running the Configure script.
+
+d_eunice='undef'
+define='define'
+eunicefix=':'
+loclist='
+cat
+cp
+echo
+expr
+grep
+mkdir
+mv
+rm
+sed
+sort
+tr
+uniq
+'
+expr='/bin/expr'
+sed='/bin/sed'
+echo='/bin/echo'
+cat='/bin/cat'
+rm='/bin/rm'
+mv='/bin/mv'
+cp='/bin/cp'
+tail=''
+tr='/bin/tr'
+mkdir='/bin/mkdir'
+sort='/bin/sort'
+uniq='/bin/uniq'
+grep='/tile/users/zorn/bin/grep'
+trylist='
+Mcc
+bison
+cpp
+csh
+egrep
+nroff
+test
+uname
+yacc
+'
+test='test'
+inews=''
+egrep='/bin/egrep'
+more=''
+pg=''
+Mcc='Mcc'
+vi=''
+mailx=''
+mail=''
+cpp='/usr/local/lib/gcc-cpp'
+perl=''
+emacs=''
+ls=''
+rmail=''
+sendmail=''
+shar=''
+smail=''
+tbl=''
+troff=''
+nroff='/bin/nroff'
+uname='/bin/uname'
+uuname=''
+line=''
+chgrp=''
+chmod=''
+lint=''
+sleep=''
+pr=''
+tar=''
+ln=''
+lpr=''
+lp=''
+touch=''
+make=''
+date=''
+csh='/bin/csh'
+bash=''
+ksh=''
+lex=''
+flex=''
+bison='/cs/research/ben/SPARC/bin/bison'
+Log='$Log'
+Header='$Header'
+Id='$Id'
+lastuname=''
+alignbytes='8'
+bin='/usr/local/bin'
+installbin='/usr/local/bin'
+byteorder='4321'
+contains='grep'
+cppstdin='/usr/local/lib/gcc-cpp'
+cppminus=''
+d_bcmp='define'
+d_bcopy='define'
+d_bzero='define'
+d_castneg='define'
+castflags='0'
+d_charsprf='define'
+d_chsize='undef'
+d_crypt='define'
+cryptlib=''
+d_csh='define'
+d_dosuid='undef'
+d_dup2='define'
+d_fchmod='define'
+d_fchown='define'
+d_fcntl='define'
+d_flexfnam='define'
+d_flock='define'
+d_getgrps='define'
+d_gethent='undef'
+d_getpgrp='define'
+d_getpgrp2='undef'
+d_getprior='define'
+d_htonl='define'
+d_index='undef'
+d_killpg='define'
+d_lstat='define'
+d_memcmp='define'
+d_memcpy='define'
+d_mkdir='define'
+d_msg='define'
+d_msgctl='define'
+d_msgget='define'
+d_msgrcv='define'
+d_msgsnd='define'
+d_ndbm='define'
+d_odbm='define'
+d_open3='define'
+d_readdir='define'
+d_rename='define'
+d_rmdir='define'
+d_select='define'
+d_sem='define'
+d_semctl='define'
+d_semget='define'
+d_semop='define'
+d_setegid='define'
+d_seteuid='define'
+d_setpgrp='define'
+d_setpgrp2='undef'
+d_setprior='define'
+d_setregid='define'
+d_setresgid='undef'
+d_setreuid='define'
+d_setresuid='undef'
+d_setrgid='define'
+d_setruid='define'
+d_shm='define'
+d_shmat='define'
+d_shmctl='define'
+d_shmdt='define'
+d_shmget='define'
+d_socket='define'
+d_sockpair='define'
+d_oldsock='undef'
+socketlib=''
+d_statblks='define'
+d_stdstdio='define'
+d_strctcpy='define'
+d_strerror='undef'
+d_symlink='define'
+d_syscall='define'
+d_truncate='define'
+d_vfork='define'
+d_voidsig='define'
+d_tosignal='void'
+d_volatile='define'
+d_vprintf='define'
+d_charvspr='define'
+d_wait4='define'
+d_waitpid='define'
+gidtype='gid_t'
+groupstype='int'
+i_fcntl='undef'
+i_gdbm='undef'
+i_grp='define'
+i_niin='define'
+i_sysin='undef'
+i_pwd='define'
+d_pwquota='undef'
+d_pwage='define'
+d_pwchange='undef'
+d_pwclass='undef'
+d_pwexpire='undef'
+d_pwcomment='define'
+i_sys_file='define'
+i_sysioctl='define'
+i_time='undef'
+i_sys_time='define'
+i_sys_select='undef'
+d_systimekernel='undef'
+i_utime='define'
+i_varargs='define'
+i_vfork='define'
+intsize='4'
+libc='/usr/lib/libc.so.1.5.1'
+nm_opts=''
+libndir=''
+i_my_dir='undef'
+i_ndir='undef'
+i_sys_ndir='undef'
+i_dirent='define'
+i_sys_dir='undef'
+d_dirnamlen='undef'
+ndirc=''
+ndiro=''
+mallocsrc='malloc.c'
+mallocobj='malloc.o'
+usemymalloc='y'
+mallocptrtype='char'
+mansrc='/usr/man/manl'
+manext='l'
+models='none'
+split=''
+small=''
+medium=''
+large=''
+huge=''
+optimize='-O'
+ccflags='-g'
+cppflags=' -D__GNUC__'
+ldflags=''
+cc='gcc'
+libs='-lm'
+n='-n'
+c=''
+package='perl'
+randbits='31'
+scriptdir='/usr/local/bin'
+sig_name='ZERO HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH LOST USR1 USR2'
+spitshell='cat'
+shsharp='true'
+sharpbang='#!'
+startsh='#!/bin/sh'
+stdchar='unsigned char'
+uidtype='uid_t'
+usrinclude='/usr/include'
+inclPath=''
+void=''
+voidhave='7'
+voidwant='7'
+w_localtim='1'
+w_s_timevl='1'
+w_s_tm='1'
+yacc='/bin/yacc'
+lib=''
+privlib='/usr/local/lib/perl'
+installprivlib='/usr/local/lib/perl'
+CONFIG=true
+PATCHLEVEL=3
diff --git a/MultiSource/Benchmarks/MallocBench/perl/cons.c b/MultiSource/Benchmarks/MallocBench/perl/cons.c
new file mode 100644
index 00000000..87e2adaa
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/cons.c
@@ -0,0 +1,1408 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:05:51 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "perly.h"
+
+extern char *tokename[];
+extern int yychar;
+
+static int cmd_tosave();
+static int arg_tosave();
+static int spat_tosave();
+
+static bool saw_return;
+
+SUBR *
+make_sub(name,cmd)
+char *name;
+CMD *cmd;
+{
+ register SUBR *sub;
+ STAB *stab = stabent(name,TRUE);
+
+ Newz(101,sub,1,SUBR);
+ if (stab_sub(stab)) {
+ if (dowarn) {
+ CMD *oldcurcmd = curcmd;
+
+ if (cmd)
+ curcmd = cmd;
+ warn("Subroutine %s redefined",name);
+ curcmd = oldcurcmd;
+ }
+ if (stab_sub(stab)->cmd) {
+ cmd_free(stab_sub(stab)->cmd);
+ stab_sub(stab)->cmd = Nullcmd;
+ afree(stab_sub(stab)->tosave);
+ }
+ Safefree(stab_sub(stab));
+ }
+ stab_sub(stab) = sub;
+ sub->filestab = curcmd->c_filestab;
+ saw_return = FALSE;
+ tosave = anew(Nullstab);
+ tosave->ary_fill = 0; /* make 1 based */
+ (void)cmd_tosave(cmd,FALSE); /* this builds the tosave array */
+ sub->tosave = tosave;
+ if (saw_return) {
+ struct compcmd mycompblock;
+
+ mycompblock.comp_true = cmd;
+ mycompblock.comp_alt = Nullcmd;
+ cmd = add_label(savestr("_SUB_"),make_ccmd(C_BLOCK,Nullarg,mycompblock));
+ saw_return = FALSE;
+ cmd->c_flags |= CF_TERM;
+ }
+ sub->cmd = cmd;
+ if (perldb) {
+ STR *str;
+ STR *tmpstr = str_mortal(&str_undef);
+
+ sprintf(buf,"%s:%ld",stab_val(curcmd->c_filestab)->str_ptr,
+ (long)subline);
+ str = str_make(buf,0);
+ str_cat(str,"-");
+ sprintf(buf,"%ld",(long)curcmd->c_line);
+ str_cat(str,buf);
+ name = str_get(subname);
+ stab_fullname(tmpstr,stab);
+ hstore(stab_xhash(DBsub), tmpstr->str_ptr, tmpstr->str_cur, str, 0);
+ str_set(subname,"main");
+ }
+ subline = 0;
+ return sub;
+}
+
+SUBR *
+make_usub(name, ix, subaddr, filename)
+char *name;
+int ix;
+int (*subaddr)();
+char *filename;
+{
+ register SUBR *sub;
+ STAB *stab = stabent(name,allstabs);
+
+ if (!stab) /* unused function */
+ return Null(SUBR*);
+ Newz(101,sub,1,SUBR);
+ if (stab_sub(stab)) {
+ if (dowarn)
+ warn("Subroutine %s redefined",name);
+ if (stab_sub(stab)->cmd) {
+ cmd_free(stab_sub(stab)->cmd);
+ stab_sub(stab)->cmd = Nullcmd;
+ afree(stab_sub(stab)->tosave);
+ }
+ Safefree(stab_sub(stab));
+ }
+ stab_sub(stab) = sub;
+ sub->filestab = fstab(filename);
+ sub->usersub = subaddr;
+ sub->userindex = ix;
+ return sub;
+}
+
+make_form(stab,fcmd)
+STAB *stab;
+FCMD *fcmd;
+{
+ if (stab_form(stab)) {
+ FCMD *tmpfcmd;
+ FCMD *nextfcmd;
+
+ for (tmpfcmd = stab_form(stab); tmpfcmd; tmpfcmd = nextfcmd) {
+ nextfcmd = tmpfcmd->f_next;
+ if (tmpfcmd->f_expr)
+ arg_free(tmpfcmd->f_expr);
+ if (tmpfcmd->f_unparsed)
+ str_free(tmpfcmd->f_unparsed);
+ if (tmpfcmd->f_pre)
+ Safefree(tmpfcmd->f_pre);
+ Safefree(tmpfcmd);
+ }
+ }
+ stab_form(stab) = fcmd;
+}
+
+CMD *
+block_head(tail)
+register CMD *tail;
+{
+ CMD *head;
+ register int opt;
+ register int last_opt = 0;
+ register STAB *last_stab = Nullstab;
+ register int count = 0;
+ register CMD *switchbeg = Nullcmd;
+
+ if (tail == Nullcmd) {
+ return tail;
+ }
+ head = tail->c_head;
+
+ for (tail = head; tail; tail = tail->c_next) {
+
+ /* save one measly dereference at runtime */
+ if (tail->c_type == C_IF) {
+ if (!(tail->ucmd.ccmd.cc_alt = tail->ucmd.ccmd.cc_alt->c_next))
+ tail->c_flags |= CF_TERM;
+ }
+ else if (tail->c_type == C_EXPR) {
+ ARG *arg;
+
+ if (tail->ucmd.acmd.ac_expr)
+ arg = tail->ucmd.acmd.ac_expr;
+ else
+ arg = tail->c_expr;
+ if (arg) {
+ if (arg->arg_type == O_RETURN)
+ tail->c_flags |= CF_TERM;
+ else if (arg->arg_type == O_ITEM && arg[1].arg_type == A_CMD)
+ tail->c_flags |= CF_TERM;
+ }
+ }
+ if (!tail->c_next)
+ tail->c_flags |= CF_TERM;
+
+ if (tail->c_expr && (tail->c_flags & CF_OPTIMIZE) == CFT_FALSE)
+ opt_arg(tail,1, tail->c_type == C_EXPR);
+
+ /* now do a little optimization on case-ish structures */
+ switch(tail->c_flags & (CF_OPTIMIZE|CF_FIRSTNEG|CF_INVERT)) {
+ case CFT_ANCHOR:
+ if (stabent("*",FALSE)) { /* bad assumption here!!! */
+ opt = 0;
+ break;
+ }
+ /* FALL THROUGH */
+ case CFT_STROP:
+ opt = (tail->c_flags & CF_NESURE) ? CFT_STROP : 0;
+ break;
+ case CFT_CCLASS:
+ opt = CFT_STROP;
+ break;
+ case CFT_NUMOP:
+ opt = (tail->c_slen == O_NE ? 0 : CFT_NUMOP);
+ if ((tail->c_flags&(CF_NESURE|CF_EQSURE)) != (CF_NESURE|CF_EQSURE))
+ opt = 0;
+ break;
+ default:
+ opt = 0;
+ }
+ if (opt && opt == last_opt && tail->c_stab == last_stab)
+ count++;
+ else {
+ if (count >= 3) { /* is this the breakeven point? */
+ if (last_opt == CFT_NUMOP)
+ make_nswitch(switchbeg,count);
+ else
+ make_cswitch(switchbeg,count);
+ }
+ if (opt) {
+ count = 1;
+ switchbeg = tail;
+ }
+ else
+ count = 0;
+ }
+ last_opt = opt;
+ last_stab = tail->c_stab;
+ }
+ if (count >= 3) { /* is this the breakeven point? */
+ if (last_opt == CFT_NUMOP)
+ make_nswitch(switchbeg,count);
+ else
+ make_cswitch(switchbeg,count);
+ }
+ return head;
+}
+
+/* We've spotted a sequence of CMDs that all test the value of the same
+ * spat. Thus we can insert a SWITCH in front and jump directly
+ * to the correct one.
+ */
+make_cswitch(head,count)
+register CMD *head;
+int count;
+{
+ register CMD *cur;
+ register CMD **loc;
+ register int i;
+ register int min = 255;
+ register int max = 0;
+
+ /* make a new head in the exact same spot */
+ New(102,cur, 1, CMD);
+#ifdef STRUCTCOPY
+ *cur = *head;
+#else
+ Copy(head,cur,1,CMD);
+#endif
+ Zero(head,1,CMD);
+ head->c_type = C_CSWITCH;
+ head->c_next = cur; /* insert new cmd at front of list */
+ head->c_stab = cur->c_stab;
+
+ Newz(103,loc,258,CMD*);
+ loc++; /* lie a little */
+ while (count--) {
+ if ((cur->c_flags & CF_OPTIMIZE) == CFT_CCLASS) {
+ for (i = 0; i <= 255; i++) {
+ if (!loc[i] && cur->c_short->str_ptr[i>>3] & (1 << (i&7))) {
+ loc[i] = cur;
+ if (i < min)
+ min = i;
+ if (i > max)
+ max = i;
+ }
+ }
+ }
+ else {
+ i = *cur->c_short->str_ptr & 255;
+ if (!loc[i]) {
+ loc[i] = cur;
+ if (i < min)
+ min = i;
+ if (i > max)
+ max = i;
+ }
+ }
+ cur = cur->c_next;
+ }
+ max++;
+ if (min > 0)
+ Copy(&loc[min],&loc[0], max - min, CMD*);
+ loc--;
+ min--;
+ max -= min;
+ for (i = 0; i <= max; i++)
+ if (!loc[i])
+ loc[i] = cur;
+ Renew(loc,max+1,CMD*); /* chop it down to size */
+ head->ucmd.scmd.sc_offset = min;
+ head->ucmd.scmd.sc_max = max;
+ head->ucmd.scmd.sc_next = loc;
+}
+
+make_nswitch(head,count)
+register CMD *head;
+int count;
+{
+ register CMD *cur = head;
+ register CMD **loc;
+ register int i;
+ register int min = 32767;
+ register int max = -32768;
+ int origcount = count;
+ double value; /* or your money back! */
+ short changed; /* so triple your money back! */
+
+ while (count--) {
+ i = (int)str_gnum(cur->c_short);
+ value = (double)i;
+ if (value != cur->c_short->str_u.str_nval)
+ return; /* fractional values--just forget it */
+ changed = i;
+ if (changed != i)
+ return; /* too big for a short */
+ if (cur->c_slen == O_LE)
+ i++;
+ else if (cur->c_slen == O_GE) /* we only do < or > here */
+ i--;
+ if (i < min)
+ min = i;
+ if (i > max)
+ max = i;
+ cur = cur->c_next;
+ }
+ count = origcount;
+ if (max - min > count * 2 + 10) /* too sparse? */
+ return;
+
+ /* now make a new head in the exact same spot */
+ New(104,cur, 1, CMD);
+#ifdef STRUCTCOPY
+ *cur = *head;
+#else
+ Copy(head,cur,1,CMD);
+#endif
+ Zero(head,1,CMD);
+ head->c_type = C_NSWITCH;
+ head->c_next = cur; /* insert new cmd at front of list */
+ head->c_stab = cur->c_stab;
+
+ Newz(105,loc, max - min + 3, CMD*);
+ loc++;
+ max -= min;
+ max++;
+ while (count--) {
+ i = (int)str_gnum(cur->c_short);
+ i -= min;
+ switch(cur->c_slen) {
+ case O_LE:
+ i++;
+ case O_LT:
+ for (i--; i >= -1; i--)
+ if (!loc[i])
+ loc[i] = cur;
+ break;
+ case O_GE:
+ i--;
+ case O_GT:
+ for (i++; i <= max; i++)
+ if (!loc[i])
+ loc[i] = cur;
+ break;
+ case O_EQ:
+ if (!loc[i])
+ loc[i] = cur;
+ break;
+ }
+ cur = cur->c_next;
+ }
+ loc--;
+ min--;
+ max++;
+ for (i = 0; i <= max; i++)
+ if (!loc[i])
+ loc[i] = cur;
+ head->ucmd.scmd.sc_offset = min;
+ head->ucmd.scmd.sc_max = max;
+ head->ucmd.scmd.sc_next = loc;
+}
+
+CMD *
+append_line(head,tail)
+register CMD *head;
+register CMD *tail;
+{
+ if (tail == Nullcmd)
+ return head;
+ if (!tail->c_head) /* make sure tail is well formed */
+ tail->c_head = tail;
+ if (head != Nullcmd) {
+ tail = tail->c_head; /* get to start of tail list */
+ if (!head->c_head)
+ head->c_head = head; /* start a new head list */
+ while (head->c_next) {
+ head->c_next->c_head = head->c_head;
+ head = head->c_next; /* get to end of head list */
+ }
+ head->c_next = tail; /* link to end of old list */
+ tail->c_head = head->c_head; /* propagate head pointer */
+ }
+ while (tail->c_next) {
+ tail->c_next->c_head = tail->c_head;
+ tail = tail->c_next;
+ }
+ return tail;
+}
+
+CMD *
+dodb(cur)
+CMD *cur;
+{
+ register CMD *cmd;
+ register CMD *head = cur->c_head;
+ STR *str;
+
+ if (!head)
+ head = cur;
+ if (!head->c_line)
+ return cur;
+ str = afetch(stab_xarray(curcmd->c_filestab),(int)head->c_line,FALSE);
+ if (str == &str_undef || str->str_nok)
+ return cur;
+ str->str_u.str_nval = (double)head->c_line;
+ str->str_nok = 1;
+ Newz(106,cmd,1,CMD);
+ str_magic(str, curcmd->c_filestab, 0, Nullch, 0);
+ str->str_magic->str_u.str_cmd = cmd;
+ cmd->c_type = C_EXPR;
+ cmd->ucmd.acmd.ac_stab = Nullstab;
+ cmd->ucmd.acmd.ac_expr = Nullarg;
+ cmd->c_expr = make_op(O_SUBR, 2,
+ stab2arg(A_WORD,DBstab),
+ Nullarg,
+ Nullarg);
+ cmd->c_flags |= CF_COND|CF_DBSUB|CFT_D0;
+ cmd->c_line = head->c_line;
+ cmd->c_label = head->c_label;
+ cmd->c_filestab = curcmd->c_filestab;
+ cmd->c_stash = curstash;
+ return append_line(cmd, cur);
+}
+
+CMD *
+make_acmd(type,stab,cond,arg)
+int type;
+STAB *stab;
+ARG *cond;
+ARG *arg;
+{
+ register CMD *cmd;
+
+ Newz(107,cmd,1,CMD);
+ cmd->c_type = type;
+ cmd->ucmd.acmd.ac_stab = stab;
+ cmd->ucmd.acmd.ac_expr = arg;
+ cmd->c_expr = cond;
+ if (cond)
+ cmd->c_flags |= CF_COND;
+ if (cmdline == NOLINE)
+ cmd->c_line = curcmd->c_line;
+ else {
+ cmd->c_line = cmdline;
+ cmdline = NOLINE;
+ }
+ cmd->c_filestab = curcmd->c_filestab;
+ cmd->c_stash = curstash;
+ if (perldb)
+ cmd = dodb(cmd);
+ return cmd;
+}
+
+CMD *
+make_ccmd(type,arg,cblock)
+int type;
+ARG *arg;
+struct compcmd cblock;
+{
+ register CMD *cmd;
+
+ Newz(108,cmd, 1, CMD);
+ cmd->c_type = type;
+ cmd->c_expr = arg;
+ cmd->ucmd.ccmd.cc_true = cblock.comp_true;
+ cmd->ucmd.ccmd.cc_alt = cblock.comp_alt;
+ if (arg)
+ cmd->c_flags |= CF_COND;
+ if (cmdline == NOLINE)
+ cmd->c_line = curcmd->c_line;
+ else {
+ cmd->c_line = cmdline;
+ cmdline = NOLINE;
+ }
+ cmd->c_filestab = curcmd->c_filestab;
+ cmd->c_stash = curstash;
+ if (perldb)
+ cmd = dodb(cmd);
+ return cmd;
+}
+
+CMD *
+make_icmd(type,arg,cblock)
+int type;
+ARG *arg;
+struct compcmd cblock;
+{
+ register CMD *cmd;
+ register CMD *alt;
+ register CMD *cur;
+ register CMD *head;
+ struct compcmd ncblock;
+
+ Newz(109,cmd, 1, CMD);
+ head = cmd;
+ cmd->c_type = type;
+ cmd->c_expr = arg;
+ cmd->ucmd.ccmd.cc_true = cblock.comp_true;
+ cmd->ucmd.ccmd.cc_alt = cblock.comp_alt;
+ if (arg)
+ cmd->c_flags |= CF_COND;
+ if (cmdline == NOLINE)
+ cmd->c_line = curcmd->c_line;
+ else {
+ cmd->c_line = cmdline;
+ cmdline = NOLINE;
+ }
+ cmd->c_filestab = curcmd->c_filestab;
+ cmd->c_stash = curstash;
+ cur = cmd;
+ alt = cblock.comp_alt;
+ while (alt && alt->c_type == C_ELSIF) {
+ cur = alt;
+ alt = alt->ucmd.ccmd.cc_alt;
+ }
+ if (alt) { /* a real life ELSE at the end? */
+ ncblock.comp_true = alt;
+ ncblock.comp_alt = Nullcmd;
+ alt = append_line(cur,make_ccmd(C_ELSE,Nullarg,ncblock));
+ cur->ucmd.ccmd.cc_alt = alt;
+ }
+ else
+ alt = cur; /* no ELSE, so cur is proxy ELSE */
+
+ cur = cmd;
+ while (cmd) { /* now point everyone at the ELSE */
+ cur = cmd;
+ cmd = cur->ucmd.ccmd.cc_alt;
+ cur->c_head = head;
+ if (cur->c_type == C_ELSIF)
+ cur->c_type = C_IF;
+ if (cur->c_type == C_IF)
+ cur->ucmd.ccmd.cc_alt = alt;
+ if (cur == alt)
+ break;
+ cur->c_next = cmd;
+ }
+ if (perldb)
+ cur = dodb(cur);
+ return cur;
+}
+
+void
+opt_arg(cmd,fliporflop,acmd)
+register CMD *cmd;
+int fliporflop;
+int acmd;
+{
+ register ARG *arg;
+ int opt = CFT_EVAL;
+ int sure = 0;
+ ARG *arg2;
+ int context = 0; /* 0 = normal, 1 = before &&, 2 = before || */
+ int flp = fliporflop;
+
+ if (!cmd)
+ return;
+ if (!(arg = cmd->c_expr)) {
+ cmd->c_flags &= ~CF_COND;
+ return;
+ }
+
+ /* Can we turn && and || into if and unless? */
+
+ if (acmd && !cmd->ucmd.acmd.ac_expr && !(cmd->c_flags & CF_TERM) &&
+ (arg->arg_type == O_AND || arg->arg_type == O_OR) ) {
+ dehoist(arg,1);
+ arg[2].arg_type &= A_MASK; /* don't suppress eval */
+ dehoist(arg,2);
+ cmd->ucmd.acmd.ac_expr = arg[2].arg_ptr.arg_arg;
+ cmd->c_expr = arg[1].arg_ptr.arg_arg;
+ if (arg->arg_type == O_OR)
+ cmd->c_flags ^= CF_INVERT; /* || is like unless */
+ arg->arg_len = 0;
+ free_arg(arg);
+ arg = cmd->c_expr;
+ }
+
+ /* Turn "if (!expr)" into "unless (expr)" */
+
+ if (!(cmd->c_flags & CF_TERM)) { /* unless return value wanted */
+ while (arg->arg_type == O_NOT) {
+ dehoist(arg,1);
+ cmd->c_flags ^= CF_INVERT; /* flip sense of cmd */
+ cmd->c_expr = arg[1].arg_ptr.arg_arg; /* hoist the rest of expr */
+ free_arg(arg);
+ arg = cmd->c_expr; /* here we go again */
+ }
+ }
+
+ if (!arg->arg_len) { /* sanity check */
+ cmd->c_flags |= opt;
+ return;
+ }
+
+ /* for "cond .. cond" we set up for the initial check */
+
+ if (arg->arg_type == O_FLIP)
+ context |= 4;
+
+ /* for "cond && expr" and "cond || expr" we can ignore expr, sort of */
+
+ morecontext:
+ if (arg->arg_type == O_AND)
+ context |= 1;
+ else if (arg->arg_type == O_OR)
+ context |= 2;
+ if (context && (arg[flp].arg_type & A_MASK) == A_EXPR) {
+ arg = arg[flp].arg_ptr.arg_arg;
+ flp = 1;
+ if (arg->arg_type == O_AND || arg->arg_type == O_OR)
+ goto morecontext;
+ }
+ if ((context & 3) == 3)
+ return;
+
+ if (arg[flp].arg_flags & (AF_PRE|AF_POST)) {
+ cmd->c_flags |= opt;
+ if (acmd && !cmd->ucmd.acmd.ac_expr && !(cmd->c_flags & CF_TERM)
+ && cmd->c_expr->arg_type == O_ITEM) {
+ arg[flp].arg_flags &= ~AF_POST; /* prefer ++$foo to $foo++ */
+ arg[flp].arg_flags |= AF_PRE; /* if value not wanted */
+ }
+ return; /* side effect, can't optimize */
+ }
+
+ if (arg->arg_type == O_ITEM || arg->arg_type == O_FLIP ||
+ arg->arg_type == O_AND || arg->arg_type == O_OR) {
+ if ((arg[flp].arg_type & A_MASK) == A_SINGLE) {
+ opt = (str_true(arg[flp].arg_ptr.arg_str) ? CFT_TRUE : CFT_FALSE);
+ cmd->c_short = str_smake(arg[flp].arg_ptr.arg_str);
+ goto literal;
+ }
+ else if ((arg[flp].arg_type & A_MASK) == A_STAB ||
+ (arg[flp].arg_type & A_MASK) == A_LVAL) {
+ cmd->c_stab = arg[flp].arg_ptr.arg_stab;
+ if (!context)
+ arg[flp].arg_ptr.arg_stab = Nullstab;
+ opt = CFT_REG;
+ literal:
+ if (!context) { /* no && or ||? */
+ arg_free(arg);
+ cmd->c_expr = Nullarg;
+ }
+ if (!(context & 1))
+ cmd->c_flags |= CF_EQSURE;
+ if (!(context & 2))
+ cmd->c_flags |= CF_NESURE;
+ }
+ }
+ else if (arg->arg_type == O_MATCH || arg->arg_type == O_SUBST ||
+ arg->arg_type == O_NMATCH || arg->arg_type == O_NSUBST) {
+ if ((arg[1].arg_type == A_STAB || arg[1].arg_type == A_LVAL) &&
+ (arg[2].arg_type & A_MASK) == A_SPAT &&
+ arg[2].arg_ptr.arg_spat->spat_short ) {
+ cmd->c_stab = arg[1].arg_ptr.arg_stab;
+ cmd->c_short = str_smake(arg[2].arg_ptr.arg_spat->spat_short);
+ cmd->c_slen = arg[2].arg_ptr.arg_spat->spat_slen;
+ if (arg[2].arg_ptr.arg_spat->spat_flags & SPAT_ALL &&
+ !(arg[2].arg_ptr.arg_spat->spat_flags & SPAT_ONCE) &&
+ (arg->arg_type == O_MATCH || arg->arg_type == O_NMATCH) )
+ sure |= CF_EQSURE; /* (SUBST must be forced even */
+ /* if we know it will work.) */
+ if (arg->arg_type != O_SUBST) {
+ arg[2].arg_ptr.arg_spat->spat_short = Nullstr;
+ arg[2].arg_ptr.arg_spat->spat_slen = 0; /* only one chk */
+ }
+ sure |= CF_NESURE; /* normally only sure if it fails */
+ if (arg->arg_type == O_NMATCH || arg->arg_type == O_NSUBST)
+ cmd->c_flags |= CF_FIRSTNEG;
+ if (context & 1) { /* only sure if thing is false */
+ if (cmd->c_flags & CF_FIRSTNEG)
+ sure &= ~CF_NESURE;
+ else
+ sure &= ~CF_EQSURE;
+ }
+ else if (context & 2) { /* only sure if thing is true */
+ if (cmd->c_flags & CF_FIRSTNEG)
+ sure &= ~CF_EQSURE;
+ else
+ sure &= ~CF_NESURE;
+ }
+ if (sure & (CF_EQSURE|CF_NESURE)) { /* if we know anything*/
+ if (arg[2].arg_ptr.arg_spat->spat_flags & SPAT_SCANFIRST)
+ opt = CFT_SCAN;
+ else
+ opt = CFT_ANCHOR;
+ if (sure == (CF_EQSURE|CF_NESURE) /* really sure? */
+ && arg->arg_type == O_MATCH
+ && context & 4
+ && fliporflop == 1) {
+ spat_free(arg[2].arg_ptr.arg_spat);
+ arg[2].arg_ptr.arg_spat = Nullspat; /* don't do twice */
+ }
+ else
+ cmd->c_spat = arg[2].arg_ptr.arg_spat;
+ cmd->c_flags |= sure;
+ }
+ }
+ }
+ else if (arg->arg_type == O_SEQ || arg->arg_type == O_SNE ||
+ arg->arg_type == O_SLT || arg->arg_type == O_SGT) {
+ if (arg[1].arg_type == A_STAB || arg[1].arg_type == A_LVAL) {
+ if (arg[2].arg_type == A_SINGLE) {
+ char *junk = str_get(arg[2].arg_ptr.arg_str);
+
+ cmd->c_stab = arg[1].arg_ptr.arg_stab;
+ cmd->c_short = str_smake(arg[2].arg_ptr.arg_str);
+ cmd->c_slen = cmd->c_short->str_cur+1;
+ switch (arg->arg_type) {
+ case O_SLT: case O_SGT:
+ sure |= CF_EQSURE;
+ cmd->c_flags |= CF_FIRSTNEG;
+ break;
+ case O_SNE:
+ cmd->c_flags |= CF_FIRSTNEG;
+ /* FALL THROUGH */
+ case O_SEQ:
+ sure |= CF_NESURE|CF_EQSURE;
+ break;
+ }
+ if (context & 1) { /* only sure if thing is false */
+ if (cmd->c_flags & CF_FIRSTNEG)
+ sure &= ~CF_NESURE;
+ else
+ sure &= ~CF_EQSURE;
+ }
+ else if (context & 2) { /* only sure if thing is true */
+ if (cmd->c_flags & CF_FIRSTNEG)
+ sure &= ~CF_EQSURE;
+ else
+ sure &= ~CF_NESURE;
+ }
+ if (sure & (CF_EQSURE|CF_NESURE)) {
+ opt = CFT_STROP;
+ cmd->c_flags |= sure;
+ }
+ }
+ }
+ }
+ else if (arg->arg_type == O_EQ || arg->arg_type == O_NE ||
+ arg->arg_type == O_LE || arg->arg_type == O_GE ||
+ arg->arg_type == O_LT || arg->arg_type == O_GT) {
+ if (arg[1].arg_type == A_STAB || arg[1].arg_type == A_LVAL) {
+ if (arg[2].arg_type == A_SINGLE) {
+ cmd->c_stab = arg[1].arg_ptr.arg_stab;
+ if (dowarn) {
+ STR *str = arg[2].arg_ptr.arg_str;
+
+ if ((!str->str_nok && !looks_like_number(str)))
+ warn("Possible use of == on string value");
+ }
+ cmd->c_short = str_nmake(str_gnum(arg[2].arg_ptr.arg_str));
+ cmd->c_slen = arg->arg_type;
+ sure |= CF_NESURE|CF_EQSURE;
+ if (context & 1) { /* only sure if thing is false */
+ sure &= ~CF_EQSURE;
+ }
+ else if (context & 2) { /* only sure if thing is true */
+ sure &= ~CF_NESURE;
+ }
+ if (sure & (CF_EQSURE|CF_NESURE)) {
+ opt = CFT_NUMOP;
+ cmd->c_flags |= sure;
+ }
+ }
+ }
+ }
+ else if (arg->arg_type == O_ASSIGN &&
+ (arg[1].arg_type == A_STAB || arg[1].arg_type == A_LVAL) &&
+ arg[1].arg_ptr.arg_stab == defstab &&
+ arg[2].arg_type == A_EXPR ) {
+ arg2 = arg[2].arg_ptr.arg_arg;
+ if (arg2->arg_type == O_ITEM && arg2[1].arg_type == A_READ) {
+ opt = CFT_GETS;
+ cmd->c_stab = arg2[1].arg_ptr.arg_stab;
+ if (!(stab_io(arg2[1].arg_ptr.arg_stab)->flags & IOF_ARGV)) {
+ free_arg(arg2);
+ arg[2].arg_ptr.arg_arg = Nullarg;
+ free_arg(arg);
+ cmd->c_expr = Nullarg;
+ }
+ }
+ }
+ else if (arg->arg_type == O_CHOP &&
+ (arg[1].arg_type == A_STAB || arg[1].arg_type == A_LVAL) ) {
+ opt = CFT_CHOP;
+ cmd->c_stab = arg[1].arg_ptr.arg_stab;
+ free_arg(arg);
+ cmd->c_expr = Nullarg;
+ }
+ if (context & 4)
+ opt |= CF_FLIP;
+ cmd->c_flags |= opt;
+
+ if (cmd->c_flags & CF_FLIP) {
+ if (fliporflop == 1) {
+ arg = cmd->c_expr; /* get back to O_FLIP arg */
+ New(110,arg[3].arg_ptr.arg_cmd, 1, CMD);
+ Copy(cmd, arg[3].arg_ptr.arg_cmd, 1, CMD);
+ New(111,arg[4].arg_ptr.arg_cmd,1,CMD);
+ Copy(cmd, arg[4].arg_ptr.arg_cmd, 1, CMD);
+ opt_arg(arg[4].arg_ptr.arg_cmd,2,acmd);
+ arg->arg_len = 2; /* this is a lie */
+ }
+ else {
+ if ((opt & CF_OPTIMIZE) == CFT_EVAL)
+ cmd->c_flags = (cmd->c_flags & ~CF_OPTIMIZE) | CFT_UNFLIP;
+ }
+ }
+}
+
+CMD *
+add_label(lbl,cmd)
+char *lbl;
+register CMD *cmd;
+{
+ if (cmd)
+ cmd->c_label = lbl;
+ return cmd;
+}
+
+CMD *
+addcond(cmd, arg)
+register CMD *cmd;
+register ARG *arg;
+{
+ cmd->c_expr = arg;
+ cmd->c_flags |= CF_COND;
+ return cmd;
+}
+
+CMD *
+addloop(cmd, arg)
+register CMD *cmd;
+register ARG *arg;
+{
+ void while_io();
+
+ cmd->c_expr = arg;
+ cmd->c_flags |= CF_COND|CF_LOOP;
+
+ if (!(cmd->c_flags & CF_INVERT))
+ while_io(cmd); /* add $_ =, if necessary */
+
+ if (cmd->c_type == C_BLOCK)
+ cmd->c_flags &= ~CF_COND;
+ else {
+ arg = cmd->ucmd.acmd.ac_expr;
+ if (arg && arg->arg_type == O_ITEM && arg[1].arg_type == A_CMD)
+ cmd->c_flags &= ~CF_COND; /* "do {} while" happens at least once */
+ if (arg && (arg->arg_flags & AF_DEPR) &&
+ (arg->arg_type == O_SUBR || arg->arg_type == O_DBSUBR) )
+ cmd->c_flags &= ~CF_COND; /* likewise for "do subr() while" */
+ }
+ return cmd;
+}
+
+CMD *
+invert(cmd)
+CMD *cmd;
+{
+ register CMD *targ = cmd;
+ if (targ->c_head)
+ targ = targ->c_head;
+ if (targ->c_flags & CF_DBSUB)
+ targ = targ->c_next;
+ targ->c_flags ^= CF_INVERT;
+ return cmd;
+}
+
+yyerror(s)
+char *s;
+{
+ char tmpbuf[258];
+ char tmp2buf[258];
+ char *tname = tmpbuf;
+
+ if (bufptr > oldoldbufptr && bufptr - oldoldbufptr < 200 &&
+ oldoldbufptr != oldbufptr && oldbufptr != bufptr) {
+ while (isspace(*oldoldbufptr))
+ oldoldbufptr++;
+ strncpy(tmp2buf, oldoldbufptr, bufptr - oldoldbufptr);
+ tmp2buf[bufptr - oldoldbufptr] = '\0';
+ sprintf(tname,"next 2 tokens \"%s\"",tmp2buf);
+ }
+ else if (bufptr > oldbufptr && bufptr - oldbufptr < 200 &&
+ oldbufptr != bufptr) {
+ while (isspace(*oldbufptr))
+ oldbufptr++;
+ strncpy(tmp2buf, oldbufptr, bufptr - oldbufptr);
+ tmp2buf[bufptr - oldbufptr] = '\0';
+ sprintf(tname,"next token \"%s\"",tmp2buf);
+ }
+ else if (yychar > 256)
+ tname = "next token ???";
+ else if (!yychar)
+ (void)strcpy(tname,"at EOF");
+ else if (yychar < 32)
+ (void)sprintf(tname,"next char ^%c",yychar+64);
+ else if (yychar == 127)
+ (void)strcpy(tname,"at EOF");
+ else
+ (void)sprintf(tname,"next char %c",yychar);
+ (void)sprintf(buf, "%s in file %s at line %d, %s\n",
+ s,stab_val(curcmd->c_filestab)->str_ptr,curcmd->c_line,tname);
+ if (curcmd->c_line == multi_end && multi_start < multi_end)
+ sprintf(buf+strlen(buf),
+ " (Might be a runaway multi-line %c%c string starting on line %d)\n",
+ multi_open,multi_close,multi_start);
+ if (in_eval)
+ str_cat(stab_val(stabent("@",TRUE)),buf);
+ else
+ fputs(buf,stderr);
+ if (++error_count >= 10)
+ fatal("%s has too many errors.\n",
+ stab_val(curcmd->c_filestab)->str_ptr);
+}
+
+void
+while_io(cmd)
+register CMD *cmd;
+{
+ register ARG *arg = cmd->c_expr;
+ STAB *asgnstab;
+
+ /* hoist "while (<channel>)" up into command block */
+
+ if (arg && arg->arg_type == O_ITEM && arg[1].arg_type == A_READ) {
+ cmd->c_flags &= ~CF_OPTIMIZE; /* clear optimization type */
+ cmd->c_flags |= CFT_GETS; /* and set it to do the input */
+ cmd->c_stab = arg[1].arg_ptr.arg_stab;
+ if (stab_io(arg[1].arg_ptr.arg_stab)->flags & IOF_ARGV) {
+ cmd->c_expr = l(make_op(O_ASSIGN, 2, /* fake up "$_ =" */
+ stab2arg(A_LVAL,defstab), arg, Nullarg));
+ }
+ else {
+ free_arg(arg);
+ cmd->c_expr = Nullarg;
+ }
+ }
+ else if (arg && arg->arg_type == O_ITEM && arg[1].arg_type == A_INDREAD) {
+ cmd->c_flags &= ~CF_OPTIMIZE; /* clear optimization type */
+ cmd->c_flags |= CFT_INDGETS; /* and set it to do the input */
+ cmd->c_stab = arg[1].arg_ptr.arg_stab;
+ free_arg(arg);
+ cmd->c_expr = Nullarg;
+ }
+ else if (arg && arg->arg_type == O_ITEM && arg[1].arg_type == A_GLOB) {
+ if ((cmd->c_flags & CF_OPTIMIZE) == CFT_ARRAY)
+ asgnstab = cmd->c_stab;
+ else
+ asgnstab = defstab;
+ cmd->c_expr = l(make_op(O_ASSIGN, 2, /* fake up "$foo =" */
+ stab2arg(A_LVAL,asgnstab), arg, Nullarg));
+ cmd->c_flags &= ~CF_OPTIMIZE; /* clear optimization type */
+ }
+}
+
+CMD *
+wopt(cmd)
+register CMD *cmd;
+{
+ register CMD *tail;
+ CMD *newtail;
+ register int i;
+
+ if (cmd->c_expr && (cmd->c_flags & CF_OPTIMIZE) == CFT_FALSE)
+ opt_arg(cmd,1, cmd->c_type == C_EXPR);
+
+ while_io(cmd); /* add $_ =, if necessary */
+
+ /* First find the end of the true list */
+
+ tail = cmd->ucmd.ccmd.cc_true;
+ if (tail == Nullcmd)
+ return cmd;
+ New(112,newtail, 1, CMD); /* guaranteed continue */
+ for (;;) {
+ /* optimize "next" to point directly to continue block */
+ if (tail->c_type == C_EXPR &&
+ tail->ucmd.acmd.ac_expr &&
+ tail->ucmd.acmd.ac_expr->arg_type == O_NEXT &&
+ (tail->ucmd.acmd.ac_expr->arg_len == 0 ||
+ (cmd->c_label &&
+ strEQ(cmd->c_label,
+ tail->ucmd.acmd.ac_expr[1].arg_ptr.arg_str->str_ptr) )))
+ {
+ arg_free(tail->ucmd.acmd.ac_expr);
+ tail->ucmd.acmd.ac_expr = Nullarg;
+ tail->c_type = C_NEXT;
+ if (cmd->ucmd.ccmd.cc_alt != Nullcmd)
+ tail->ucmd.ccmd.cc_alt = cmd->ucmd.ccmd.cc_alt;
+ else
+ tail->ucmd.ccmd.cc_alt = newtail;
+ tail->ucmd.ccmd.cc_true = Nullcmd;
+ }
+ else if (tail->c_type == C_IF && !tail->ucmd.ccmd.cc_alt) {
+ if (cmd->ucmd.ccmd.cc_alt != Nullcmd)
+ tail->ucmd.ccmd.cc_alt = cmd->ucmd.ccmd.cc_alt;
+ else
+ tail->ucmd.ccmd.cc_alt = newtail;
+ }
+ else if (tail->c_type == C_CSWITCH || tail->c_type == C_NSWITCH) {
+ if (cmd->ucmd.ccmd.cc_alt != Nullcmd) {
+ for (i = tail->ucmd.scmd.sc_max; i >= 0; i--)
+ if (!tail->ucmd.scmd.sc_next[i])
+ tail->ucmd.scmd.sc_next[i] = cmd->ucmd.ccmd.cc_alt;
+ }
+ else {
+ for (i = tail->ucmd.scmd.sc_max; i >= 0; i--)
+ if (!tail->ucmd.scmd.sc_next[i])
+ tail->ucmd.scmd.sc_next[i] = newtail;
+ }
+ }
+
+ if (!tail->c_next)
+ break;
+ tail = tail->c_next;
+ }
+
+ /* if there's a continue block, link it to true block and find end */
+
+ if (cmd->ucmd.ccmd.cc_alt != Nullcmd) {
+ tail->c_next = cmd->ucmd.ccmd.cc_alt;
+ tail = tail->c_next;
+ for (;;) {
+ /* optimize "next" to point directly to continue block */
+ if (tail->c_type == C_EXPR &&
+ tail->ucmd.acmd.ac_expr &&
+ tail->ucmd.acmd.ac_expr->arg_type == O_NEXT &&
+ (tail->ucmd.acmd.ac_expr->arg_len == 0 ||
+ (cmd->c_label &&
+ strEQ(cmd->c_label,
+ tail->ucmd.acmd.ac_expr[1].arg_ptr.arg_str->str_ptr) )))
+ {
+ arg_free(tail->ucmd.acmd.ac_expr);
+ tail->ucmd.acmd.ac_expr = Nullarg;
+ tail->c_type = C_NEXT;
+ tail->ucmd.ccmd.cc_alt = newtail;
+ tail->ucmd.ccmd.cc_true = Nullcmd;
+ }
+ else if (tail->c_type == C_IF && !tail->ucmd.ccmd.cc_alt) {
+ tail->ucmd.ccmd.cc_alt = newtail;
+ }
+ else if (tail->c_type == C_CSWITCH || tail->c_type == C_NSWITCH) {
+ for (i = tail->ucmd.scmd.sc_max; i >= 0; i--)
+ if (!tail->ucmd.scmd.sc_next[i])
+ tail->ucmd.scmd.sc_next[i] = newtail;
+ }
+
+ if (!tail->c_next)
+ break;
+ tail = tail->c_next;
+ }
+ for ( ; tail->c_next; tail = tail->c_next) ;
+ }
+
+ /* Here's the real trick: link the end of the list back to the beginning,
+ * inserting a "last" block to break out of the loop. This saves one or
+ * two procedure calls every time through the loop, because of how cmd_exec
+ * does tail recursion.
+ */
+
+ tail->c_next = newtail;
+ tail = newtail;
+ if (!cmd->ucmd.ccmd.cc_alt)
+ cmd->ucmd.ccmd.cc_alt = tail; /* every loop has a continue now */
+
+#ifndef lint
+ (void)bcopy((char *)cmd, (char *)tail, sizeof(CMD));
+#endif
+ tail->c_type = C_EXPR;
+ tail->c_flags ^= CF_INVERT; /* turn into "last unless" */
+ tail->c_next = tail->ucmd.ccmd.cc_true; /* loop directly back to top */
+ tail->ucmd.acmd.ac_expr = make_op(O_LAST,0,Nullarg,Nullarg,Nullarg);
+ tail->ucmd.acmd.ac_stab = Nullstab;
+ return cmd;
+}
+
+CMD *
+over(eachstab,cmd)
+STAB *eachstab;
+register CMD *cmd;
+{
+ /* hoist "for $foo (@bar)" up into command block */
+
+ cmd->c_flags &= ~CF_OPTIMIZE; /* clear optimization type */
+ cmd->c_flags |= CFT_ARRAY; /* and set it to do the iteration */
+ cmd->c_stab = eachstab;
+ cmd->c_short = str_new(0); /* just to save a field in struct cmd */
+ cmd->c_short->str_u.str_useful = -1;
+
+ return cmd;
+}
+
+cmd_free(cmd)
+register CMD *cmd;
+{
+ register CMD *tofree;
+ register CMD *head = cmd;
+
+ while (cmd) {
+ if (cmd->c_type != C_WHILE) { /* WHILE block is duplicated */
+ if (cmd->c_label) {
+ Safefree(cmd->c_label);
+ cmd->c_label = Nullch;
+ }
+ if (cmd->c_short) {
+ str_free(cmd->c_short);
+ cmd->c_short = Nullstr;
+ }
+ if (cmd->c_expr) {
+ arg_free(cmd->c_expr);
+ cmd->c_expr = Nullarg;
+ }
+ }
+ switch (cmd->c_type) {
+ case C_WHILE:
+ case C_BLOCK:
+ case C_ELSE:
+ case C_IF:
+ if (cmd->ucmd.ccmd.cc_true) {
+ cmd_free(cmd->ucmd.ccmd.cc_true);
+ cmd->ucmd.ccmd.cc_true = Nullcmd;
+ }
+ break;
+ case C_EXPR:
+ if (cmd->ucmd.acmd.ac_expr) {
+ arg_free(cmd->ucmd.acmd.ac_expr);
+ cmd->ucmd.acmd.ac_expr = Nullarg;
+ }
+ break;
+ }
+ tofree = cmd;
+ cmd = cmd->c_next;
+ if (tofree != head) /* to get Saber to shut up */
+ Safefree(tofree);
+ if (cmd && cmd == head) /* reached end of while loop */
+ break;
+ }
+ Safefree(head);
+}
+
+arg_free(arg)
+register ARG *arg;
+{
+ register int i;
+
+ for (i = 1; i <= arg->arg_len; i++) {
+ switch (arg[i].arg_type & A_MASK) {
+ case A_NULL:
+ if (arg->arg_type == O_TRANS) {
+ Safefree(arg[i].arg_ptr.arg_cval);
+ arg[i].arg_ptr.arg_cval = Nullch;
+ }
+ break;
+ case A_LEXPR:
+ if (arg->arg_type == O_AASSIGN &&
+ arg[i].arg_ptr.arg_arg->arg_type == O_LARRAY) {
+ char *name =
+ stab_name(arg[i].arg_ptr.arg_arg[1].arg_ptr.arg_stab);
+
+ if (strnEQ("_GEN_",name, 5)) /* array for foreach */
+ hdelete(defstash,name,strlen(name));
+ }
+ /* FALL THROUGH */
+ case A_EXPR:
+ arg_free(arg[i].arg_ptr.arg_arg);
+ arg[i].arg_ptr.arg_arg = Nullarg;
+ break;
+ case A_CMD:
+ cmd_free(arg[i].arg_ptr.arg_cmd);
+ arg[i].arg_ptr.arg_cmd = Nullcmd;
+ break;
+ case A_WORD:
+ case A_STAB:
+ case A_LVAL:
+ case A_READ:
+ case A_GLOB:
+ case A_ARYLEN:
+ case A_LARYLEN:
+ case A_ARYSTAB:
+ case A_LARYSTAB:
+ break;
+ case A_SINGLE:
+ case A_DOUBLE:
+ case A_BACKTICK:
+ str_free(arg[i].arg_ptr.arg_str);
+ arg[i].arg_ptr.arg_str = Nullstr;
+ break;
+ case A_SPAT:
+ spat_free(arg[i].arg_ptr.arg_spat);
+ arg[i].arg_ptr.arg_spat = Nullspat;
+ break;
+ }
+ }
+ free_arg(arg);
+}
+
+spat_free(spat)
+register SPAT *spat;
+{
+ register SPAT *sp;
+ HENT *entry;
+
+ if (spat->spat_runtime) {
+ arg_free(spat->spat_runtime);
+ spat->spat_runtime = Nullarg;
+ }
+ if (spat->spat_repl) {
+ arg_free(spat->spat_repl);
+ spat->spat_repl = Nullarg;
+ }
+ if (spat->spat_short) {
+ str_free(spat->spat_short);
+ spat->spat_short = Nullstr;
+ }
+ if (spat->spat_regexp) {
+ regfree(spat->spat_regexp);
+ spat->spat_regexp = Null(REGEXP*);
+ }
+
+ /* now unlink from spat list */
+
+ for (entry = defstash->tbl_array['_']; entry; entry = entry->hent_next) {
+ register HASH *stash;
+ STAB *stab = (STAB*)entry->hent_val;
+
+ if (!stab)
+ continue;
+ stash = stab_hash(stab);
+ if (!stash || stash->tbl_spatroot == Null(SPAT*))
+ continue;
+ if (stash->tbl_spatroot == spat)
+ stash->tbl_spatroot = spat->spat_next;
+ else {
+ for (sp = stash->tbl_spatroot;
+ sp && sp->spat_next != spat;
+ sp = sp->spat_next)
+ ;
+ if (sp)
+ sp->spat_next = spat->spat_next;
+ }
+ }
+ Safefree(spat);
+}
+
+/* Recursively descend a command sequence and push the address of any string
+ * that needs saving on recursion onto the tosave array.
+ */
+
+static int
+cmd_tosave(cmd,willsave)
+register CMD *cmd;
+int willsave; /* willsave passes down the tree */
+{
+ register CMD *head = cmd;
+ int shouldsave = FALSE; /* shouldsave passes up the tree */
+ int tmpsave;
+ register CMD *lastcmd = Nullcmd;
+
+ while (cmd) {
+ if (cmd->c_expr)
+ shouldsave |= arg_tosave(cmd->c_expr,willsave);
+ switch (cmd->c_type) {
+ case C_WHILE:
+ if (cmd->ucmd.ccmd.cc_true) {
+ tmpsave = cmd_tosave(cmd->ucmd.ccmd.cc_true,willsave);
+
+ /* Here we check to see if the temporary array generated for
+ * a foreach needs to be localized because of recursion.
+ */
+ if (tmpsave && (cmd->c_flags & CF_OPTIMIZE) == CFT_ARRAY) {
+ if (lastcmd &&
+ lastcmd->c_type == C_EXPR &&
+ lastcmd->c_expr) {
+ ARG *arg = lastcmd->c_expr;
+
+ if (arg->arg_type == O_ASSIGN &&
+ arg[1].arg_type == A_LEXPR &&
+ arg[1].arg_ptr.arg_arg->arg_type == O_LARRAY &&
+ strnEQ("_GEN_",
+ stab_name(
+ arg[1].arg_ptr.arg_arg[1].arg_ptr.arg_stab),
+ 5)) { /* array generated for foreach */
+ (void)localize(arg);
+ }
+ }
+
+ /* in any event, save the iterator */
+
+ (void)apush(tosave,cmd->c_short);
+ }
+ shouldsave |= tmpsave;
+ }
+ break;
+ case C_BLOCK:
+ case C_ELSE:
+ case C_IF:
+ if (cmd->ucmd.ccmd.cc_true)
+ shouldsave |= cmd_tosave(cmd->ucmd.ccmd.cc_true,willsave);
+ break;
+ case C_EXPR:
+ if (cmd->ucmd.acmd.ac_expr)
+ shouldsave |= arg_tosave(cmd->ucmd.acmd.ac_expr,willsave);
+ break;
+ }
+ lastcmd = cmd;
+ cmd = cmd->c_next;
+ if (cmd && cmd == head) /* reached end of while loop */
+ break;
+ }
+ return shouldsave;
+}
+
+static int
+arg_tosave(arg,willsave)
+register ARG *arg;
+int willsave;
+{
+ register int i;
+ int shouldsave = FALSE;
+
+ for (i = arg->arg_len; i >= 1; i--) {
+ switch (arg[i].arg_type & A_MASK) {
+ case A_NULL:
+ break;
+ case A_LEXPR:
+ case A_EXPR:
+ shouldsave |= arg_tosave(arg[i].arg_ptr.arg_arg,shouldsave);
+ break;
+ case A_CMD:
+ shouldsave |= cmd_tosave(arg[i].arg_ptr.arg_cmd,shouldsave);
+ break;
+ case A_WORD:
+ case A_STAB:
+ case A_LVAL:
+ case A_READ:
+ case A_GLOB:
+ case A_ARYLEN:
+ case A_SINGLE:
+ case A_DOUBLE:
+ case A_BACKTICK:
+ break;
+ case A_SPAT:
+ shouldsave |= spat_tosave(arg[i].arg_ptr.arg_spat);
+ break;
+ }
+ }
+ switch (arg->arg_type) {
+ case O_RETURN:
+ saw_return = TRUE;
+ break;
+ case O_EVAL:
+ case O_SUBR:
+ shouldsave = TRUE;
+ break;
+ }
+ if (willsave)
+ (void)apush(tosave,arg->arg_ptr.arg_str);
+ return shouldsave;
+}
+
+static int
+spat_tosave(spat)
+register SPAT *spat;
+{
+ int shouldsave = FALSE;
+
+ if (spat->spat_runtime)
+ shouldsave |= arg_tosave(spat->spat_runtime,FALSE);
+ if (spat->spat_repl) {
+ shouldsave |= arg_tosave(spat->spat_repl,FALSE);
+ }
+
+ return shouldsave;
+}
+
diff --git a/MultiSource/Benchmarks/MallocBench/perl/consarg.c b/MultiSource/Benchmarks/MallocBench/perl/consarg.c
new file mode 100644
index 00000000..c3f33290
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/consarg.c
@@ -0,0 +1,1197 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:15 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/11 17:38:34 lwall
+ * patch1: fixed "Bad free" error
+ *
+ * Revision 4.0 91/03/20 01:06:15 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+static int nothing_in_common();
+static int arg_common();
+static int spat_common();
+
+ARG *
+make_split(stab,arg,limarg)
+register STAB *stab;
+register ARG *arg;
+ARG *limarg;
+{
+ register SPAT *spat;
+
+ if (arg->arg_type != O_MATCH) {
+ Newz(201,spat,1,SPAT);
+ spat->spat_next = curstash->tbl_spatroot; /* link into spat list */
+ curstash->tbl_spatroot = spat;
+
+ spat->spat_runtime = arg;
+ arg = make_match(O_MATCH,stab2arg(A_STAB,defstab),spat);
+ }
+ Renew(arg,4,ARG);
+ arg->arg_len = 3;
+ if (limarg) {
+ if (limarg->arg_type == O_ITEM) {
+ Copy(limarg+1,arg+3,1,ARG);
+ limarg[1].arg_type = A_NULL;
+ arg_free(limarg);
+ }
+ else {
+ arg[3].arg_flags = 0;
+ arg[3].arg_type = A_EXPR;
+ arg[3].arg_ptr.arg_arg = limarg;
+ }
+ }
+ else
+ arg[3].arg_type = A_NULL;
+ arg->arg_type = O_SPLIT;
+ spat = arg[2].arg_ptr.arg_spat;
+ spat->spat_repl = stab2arg(A_STAB,aadd(stab));
+ if (spat->spat_short) { /* exact match can bypass regexec() */
+ if (!((spat->spat_flags & SPAT_SCANFIRST) &&
+ (spat->spat_flags & SPAT_ALL) )) {
+ str_free(spat->spat_short);
+ spat->spat_short = Nullstr;
+ }
+ }
+ return arg;
+}
+
+ARG *
+mod_match(type,left,pat)
+register ARG *left;
+register ARG *pat;
+{
+
+ register SPAT *spat;
+ register ARG *newarg;
+
+ if (!pat)
+ return Nullarg;
+
+ if ((pat->arg_type == O_MATCH ||
+ pat->arg_type == O_SUBST ||
+ pat->arg_type == O_TRANS ||
+ pat->arg_type == O_SPLIT
+ ) &&
+ pat[1].arg_ptr.arg_stab == defstab ) {
+ switch (pat->arg_type) {
+ case O_MATCH:
+ newarg = make_op(type == O_MATCH ? O_MATCH : O_NMATCH,
+ pat->arg_len,
+ left,Nullarg,Nullarg);
+ break;
+ case O_SUBST:
+ newarg = l(make_op(type == O_MATCH ? O_SUBST : O_NSUBST,
+ pat->arg_len,
+ left,Nullarg,Nullarg));
+ break;
+ case O_TRANS:
+ newarg = l(make_op(type == O_MATCH ? O_TRANS : O_NTRANS,
+ pat->arg_len,
+ left,Nullarg,Nullarg));
+ break;
+ case O_SPLIT:
+ newarg = make_op(type == O_MATCH ? O_SPLIT : O_SPLIT,
+ pat->arg_len,
+ left,Nullarg,Nullarg);
+ break;
+ }
+ if (pat->arg_len >= 2) {
+ newarg[2].arg_type = pat[2].arg_type;
+ newarg[2].arg_ptr = pat[2].arg_ptr;
+ newarg[2].arg_len = pat[2].arg_len;
+ newarg[2].arg_flags = pat[2].arg_flags;
+ if (pat->arg_len >= 3) {
+ newarg[3].arg_type = pat[3].arg_type;
+ newarg[3].arg_ptr = pat[3].arg_ptr;
+ newarg[3].arg_len = pat[3].arg_len;
+ newarg[3].arg_flags = pat[3].arg_flags;
+ }
+ }
+ free_arg(pat);
+ }
+ else {
+ Newz(202,spat,1,SPAT);
+ spat->spat_next = curstash->tbl_spatroot; /* link into spat list */
+ curstash->tbl_spatroot = spat;
+
+ spat->spat_runtime = pat;
+ newarg = make_op(type,2,left,Nullarg,Nullarg);
+ newarg[2].arg_type = A_SPAT | A_DONT;
+ newarg[2].arg_ptr.arg_spat = spat;
+ }
+
+ return newarg;
+}
+
+ARG *
+make_op(type,newlen,arg1,arg2,arg3)
+int type;
+int newlen;
+ARG *arg1;
+ARG *arg2;
+ARG *arg3;
+{
+ register ARG *arg;
+ register ARG *chld;
+ register unsigned doarg;
+ register int i;
+ extern ARG *arg4; /* should be normal arguments, really */
+ extern ARG *arg5;
+
+ arg = op_new(newlen);
+ arg->arg_type = type;
+ if (chld = arg1) {
+ if (chld->arg_type == O_ITEM &&
+ (hoistable[ i = (chld[1].arg_type&A_MASK)] || i == A_LVAL ||
+ (i == A_LEXPR &&
+ (chld[1].arg_ptr.arg_arg->arg_type == O_LIST ||
+ chld[1].arg_ptr.arg_arg->arg_type == O_ARRAY ||
+ chld[1].arg_ptr.arg_arg->arg_type == O_HASH ))))
+ {
+ arg[1].arg_type = chld[1].arg_type;
+ arg[1].arg_ptr = chld[1].arg_ptr;
+ arg[1].arg_flags |= chld[1].arg_flags;
+ arg[1].arg_len = chld[1].arg_len;
+ free_arg(chld);
+ }
+ else {
+ arg[1].arg_type = A_EXPR;
+ arg[1].arg_ptr.arg_arg = chld;
+ }
+ }
+ if (chld = arg2) {
+ if (chld->arg_type == O_ITEM &&
+ (hoistable[chld[1].arg_type&A_MASK] ||
+ (type == O_ASSIGN &&
+ ((chld[1].arg_type == A_READ && !(arg[1].arg_type & A_DONT))
+ ||
+ (chld[1].arg_type == A_INDREAD && !(arg[1].arg_type & A_DONT))
+ ||
+ (chld[1].arg_type == A_GLOB && !(arg[1].arg_type & A_DONT))
+ ) ) ) ) {
+ arg[2].arg_type = chld[1].arg_type;
+ arg[2].arg_ptr = chld[1].arg_ptr;
+ arg[2].arg_len = chld[1].arg_len;
+ free_arg(chld);
+ }
+ else {
+ arg[2].arg_type = A_EXPR;
+ arg[2].arg_ptr.arg_arg = chld;
+ }
+ }
+ if (chld = arg3) {
+ if (chld->arg_type == O_ITEM && hoistable[chld[1].arg_type&A_MASK]) {
+ arg[3].arg_type = chld[1].arg_type;
+ arg[3].arg_ptr = chld[1].arg_ptr;
+ arg[3].arg_len = chld[1].arg_len;
+ free_arg(chld);
+ }
+ else {
+ arg[3].arg_type = A_EXPR;
+ arg[3].arg_ptr.arg_arg = chld;
+ }
+ }
+ if (newlen >= 4 && (chld = arg4)) {
+ if (chld->arg_type == O_ITEM && hoistable[chld[1].arg_type&A_MASK]) {
+ arg[4].arg_type = chld[1].arg_type;
+ arg[4].arg_ptr = chld[1].arg_ptr;
+ arg[4].arg_len = chld[1].arg_len;
+ free_arg(chld);
+ }
+ else {
+ arg[4].arg_type = A_EXPR;
+ arg[4].arg_ptr.arg_arg = chld;
+ }
+ }
+ if (newlen >= 5 && (chld = arg5)) {
+ if (chld->arg_type == O_ITEM && hoistable[chld[1].arg_type&A_MASK]) {
+ arg[5].arg_type = chld[1].arg_type;
+ arg[5].arg_ptr = chld[1].arg_ptr;
+ arg[5].arg_len = chld[1].arg_len;
+ free_arg(chld);
+ }
+ else {
+ arg[5].arg_type = A_EXPR;
+ arg[5].arg_ptr.arg_arg = chld;
+ }
+ }
+ doarg = opargs[type];
+ for (i = 1; i <= newlen; ++i) {
+ if (!(doarg & 1))
+ arg[i].arg_type |= A_DONT;
+ if (doarg & 2)
+ arg[i].arg_flags |= AF_ARYOK;
+ doarg >>= 2;
+ }
+#ifdef DEBUGGING
+ if (debug & 16) {
+ fprintf(stderr,"%lx <= make_op(%s",arg,opname[arg->arg_type]);
+ if (arg1)
+ fprintf(stderr,",%s=%lx",
+ argname[arg[1].arg_type&A_MASK],arg[1].arg_ptr.arg_arg);
+ if (arg2)
+ fprintf(stderr,",%s=%lx",
+ argname[arg[2].arg_type&A_MASK],arg[2].arg_ptr.arg_arg);
+ if (arg3)
+ fprintf(stderr,",%s=%lx",
+ argname[arg[3].arg_type&A_MASK],arg[3].arg_ptr.arg_arg);
+ if (newlen >= 4)
+ fprintf(stderr,",%s=%lx",
+ argname[arg[4].arg_type&A_MASK],arg[4].arg_ptr.arg_arg);
+ if (newlen >= 5)
+ fprintf(stderr,",%s=%lx",
+ argname[arg[5].arg_type&A_MASK],arg[5].arg_ptr.arg_arg);
+ fprintf(stderr,")\n");
+ }
+#endif
+ evalstatic(arg); /* see if we can consolidate anything */
+ return arg;
+}
+
+void
+evalstatic(arg)
+register ARG *arg;
+{
+ register STR *str;
+ register STR *s1;
+ register STR *s2;
+ double value; /* must not be register */
+ register char *tmps;
+ int i;
+ unsigned long tmplong;
+ long tmp2;
+ double exp(), log(), sqrt(), modf();
+ char *crypt();
+ double sin(), cos(), atan2(), pow();
+
+ if (!arg || !arg->arg_len)
+ return;
+
+ if ((arg[1].arg_type == A_SINGLE || arg->arg_type == O_AELEM) &&
+ (arg->arg_len == 1 || arg[2].arg_type == A_SINGLE) ) {
+ str = Str_new(20,0);
+ s1 = arg[1].arg_ptr.arg_str;
+ if (arg->arg_len > 1)
+ s2 = arg[2].arg_ptr.arg_str;
+ else
+ s2 = Nullstr;
+ switch (arg->arg_type) {
+ case O_AELEM:
+ i = (int)str_gnum(s2);
+ if (i < 32767 && i >= 0) {
+ arg->arg_type = O_ITEM;
+ arg->arg_len = 1;
+ arg[1].arg_type = A_ARYSTAB; /* $abc[123] is hoistable now */
+ arg[1].arg_len = i;
+ str_free(s2);
+ arg[2].arg_type = A_NULL;
+ arg[2].arg_ptr.arg_str = Nullstr;
+ }
+ /* FALL THROUGH */
+ default:
+ str_free(str);
+ str = Nullstr; /* can't be evaluated yet */
+ break;
+ case O_CONCAT:
+ str_sset(str,s1);
+ str_scat(str,s2);
+ break;
+ case O_REPEAT:
+ i = (int)str_gnum(s2);
+ tmps = str_get(s1);
+ str_nset(str,"",0);
+ STR_GROW(str, i * s1->str_cur + 1);
+ repeatcpy(str->str_ptr, tmps, s1->str_cur, i);
+ str->str_cur = i * s1->str_cur;
+ str->str_ptr[str->str_cur] = '\0';
+ break;
+ case O_MULTIPLY:
+ value = str_gnum(s1);
+ str_numset(str,value * str_gnum(s2));
+ break;
+ case O_DIVIDE:
+ value = str_gnum(s2);
+ if (value == 0.0)
+ yyerror("Illegal division by constant zero");
+ else
+#ifdef cray
+ /* insure that 20./5. == 4. */
+ {
+ double x;
+ int k;
+ x = str_gnum(s1);
+ if ((double)(int)x == x &&
+ (double)(int)value == value &&
+ (k = (int)x/(int)value)*(int)value == (int)x) {
+ value = k;
+ } else {
+ value = x/value;
+ }
+ str_numset(str,value);
+ }
+#else
+ str_numset(str,str_gnum(s1) / value);
+#endif
+ break;
+ case O_MODULO:
+ tmplong = (unsigned long)str_gnum(s2);
+ if (tmplong == 0L) {
+ yyerror("Illegal modulus of constant zero");
+ break;
+ }
+ tmp2 = (long)str_gnum(s1);
+#ifndef lint
+ if (tmp2 >= 0)
+ str_numset(str,(double)(tmp2 % tmplong));
+ else
+ str_numset(str,(double)((tmplong-((-tmp2 - 1) % tmplong)) - 1));
+#else
+ tmp2 = tmp2;
+#endif
+ break;
+ case O_ADD:
+ value = str_gnum(s1);
+ str_numset(str,value + str_gnum(s2));
+ break;
+ case O_SUBTRACT:
+ value = str_gnum(s1);
+ str_numset(str,value - str_gnum(s2));
+ break;
+ case O_LEFT_SHIFT:
+ value = str_gnum(s1);
+ i = (int)str_gnum(s2);
+#ifndef lint
+ str_numset(str,(double)(((long)value) << i));
+#endif
+ break;
+ case O_RIGHT_SHIFT:
+ value = str_gnum(s1);
+ i = (int)str_gnum(s2);
+#ifndef lint
+ str_numset(str,(double)(((long)value) >> i));
+#endif
+ break;
+ case O_LT:
+ value = str_gnum(s1);
+ str_numset(str,(value < str_gnum(s2)) ? 1.0 : 0.0);
+ break;
+ case O_GT:
+ value = str_gnum(s1);
+ str_numset(str,(value > str_gnum(s2)) ? 1.0 : 0.0);
+ break;
+ case O_LE:
+ value = str_gnum(s1);
+ str_numset(str,(value <= str_gnum(s2)) ? 1.0 : 0.0);
+ break;
+ case O_GE:
+ value = str_gnum(s1);
+ str_numset(str,(value >= str_gnum(s2)) ? 1.0 : 0.0);
+ break;
+ case O_EQ:
+ if (dowarn) {
+ if ((!s1->str_nok && !looks_like_number(s1)) ||
+ (!s2->str_nok && !looks_like_number(s2)) )
+ warn("Possible use of == on string value");
+ }
+ value = str_gnum(s1);
+ str_numset(str,(value == str_gnum(s2)) ? 1.0 : 0.0);
+ break;
+ case O_NE:
+ value = str_gnum(s1);
+ str_numset(str,(value != str_gnum(s2)) ? 1.0 : 0.0);
+ break;
+ case O_NCMP:
+ value = str_gnum(s1);
+ value -= str_gnum(s2);
+ if (value > 0.0)
+ value = 1.0;
+ else if (value < 0.0)
+ value = -1.0;
+ str_numset(str,value);
+ break;
+ case O_BIT_AND:
+ value = str_gnum(s1);
+#ifndef lint
+ str_numset(str,(double)(U_L(value) & U_L(str_gnum(s2))));
+#endif
+ break;
+ case O_XOR:
+ value = str_gnum(s1);
+#ifndef lint
+ str_numset(str,(double)(U_L(value) ^ U_L(str_gnum(s2))));
+#endif
+ break;
+ case O_BIT_OR:
+ value = str_gnum(s1);
+#ifndef lint
+ str_numset(str,(double)(U_L(value) | U_L(str_gnum(s2))));
+#endif
+ break;
+ case O_AND:
+ if (str_true(s1))
+ str_sset(str,s2);
+ else
+ str_sset(str,s1);
+ break;
+ case O_OR:
+ if (str_true(s1))
+ str_sset(str,s1);
+ else
+ str_sset(str,s2);
+ break;
+ case O_COND_EXPR:
+ if ((arg[3].arg_type & A_MASK) != A_SINGLE) {
+ str_free(str);
+ str = Nullstr;
+ }
+ else {
+ if (str_true(s1))
+ str_sset(str,s2);
+ else
+ str_sset(str,arg[3].arg_ptr.arg_str);
+ str_free(arg[3].arg_ptr.arg_str);
+ arg[3].arg_ptr.arg_str = Nullstr;
+ }
+ break;
+ case O_NEGATE:
+ str_numset(str,(double)(-str_gnum(s1)));
+ break;
+ case O_NOT:
+ str_numset(str,(double)(!str_true(s1)));
+ break;
+ case O_COMPLEMENT:
+#ifndef lint
+ str_numset(str,(double)(~U_L(str_gnum(s1))));
+#endif
+ break;
+ case O_SIN:
+ str_numset(str,sin(str_gnum(s1)));
+ break;
+ case O_COS:
+ str_numset(str,cos(str_gnum(s1)));
+ break;
+ case O_ATAN2:
+ value = str_gnum(s1);
+ str_numset(str,atan2(value, str_gnum(s2)));
+ break;
+ case O_POW:
+ value = str_gnum(s1);
+ str_numset(str,pow(value, str_gnum(s2)));
+ break;
+ case O_LENGTH:
+ str_numset(str, (double)str_len(s1));
+ break;
+ case O_SLT:
+ str_numset(str,(double)(str_cmp(s1,s2) < 0));
+ break;
+ case O_SGT:
+ str_numset(str,(double)(str_cmp(s1,s2) > 0));
+ break;
+ case O_SLE:
+ str_numset(str,(double)(str_cmp(s1,s2) <= 0));
+ break;
+ case O_SGE:
+ str_numset(str,(double)(str_cmp(s1,s2) >= 0));
+ break;
+ case O_SEQ:
+ str_numset(str,(double)(str_eq(s1,s2)));
+ break;
+ case O_SNE:
+ str_numset(str,(double)(!str_eq(s1,s2)));
+ break;
+ case O_SCMP:
+ str_numset(str,(double)(str_cmp(s1,s2)));
+ break;
+ case O_CRYPT:
+#ifdef HAS_CRYPT
+ tmps = str_get(s1);
+ str_set(str,crypt(tmps,str_get(s2)));
+#else
+ yyerror(
+ "The crypt() function is unimplemented due to excessive paranoia.");
+#endif
+ break;
+ case O_EXP:
+ str_numset(str,exp(str_gnum(s1)));
+ break;
+ case O_LOG:
+ str_numset(str,log(str_gnum(s1)));
+ break;
+ case O_SQRT:
+ str_numset(str,sqrt(str_gnum(s1)));
+ break;
+ case O_INT:
+ value = str_gnum(s1);
+ if (value >= 0.0)
+ (void)modf(value,&value);
+ else {
+ (void)modf(-value,&value);
+ value = -value;
+ }
+ str_numset(str,value);
+ break;
+ case O_ORD:
+#ifndef I286
+ str_numset(str,(double)(*str_get(s1)));
+#else
+ {
+ int zapc;
+ char *zaps;
+
+ zaps = str_get(s1);
+ zapc = (int) *zaps;
+ str_numset(str,(double)(zapc));
+ }
+#endif
+ break;
+ }
+ if (str) {
+ arg->arg_type = O_ITEM; /* note arg1 type is already SINGLE */
+ str_free(s1);
+ arg[1].arg_ptr.arg_str = str;
+ if (s2) {
+ str_free(s2);
+ arg[2].arg_ptr.arg_str = Nullstr;
+ arg[2].arg_type = A_NULL;
+ }
+ }
+ }
+}
+
+ARG *
+l(arg)
+register ARG *arg;
+{
+ register int i;
+ register ARG *arg1;
+ register ARG *arg2;
+ SPAT *spat;
+ int arghog = 0;
+
+ i = arg[1].arg_type & A_MASK;
+
+ arg->arg_flags |= AF_COMMON; /* assume something in common */
+ /* which forces us to copy things */
+
+ if (i == A_ARYLEN) {
+ arg[1].arg_type = A_LARYLEN;
+ return arg;
+ }
+ if (i == A_ARYSTAB) {
+ arg[1].arg_type = A_LARYSTAB;
+ return arg;
+ }
+
+ /* see if it's an array reference */
+
+ if (i == A_EXPR || i == A_LEXPR) {
+ arg1 = arg[1].arg_ptr.arg_arg;
+
+ if (arg1->arg_type == O_LIST || arg1->arg_type == O_ITEM) {
+ /* assign to list */
+ if (arg->arg_len > 1) {
+ dehoist(arg,2);
+ arg2 = arg[2].arg_ptr.arg_arg;
+ if (nothing_in_common(arg1,arg2))
+ arg->arg_flags &= ~AF_COMMON;
+ if (arg->arg_type == O_ASSIGN) {
+ if (arg1->arg_flags & AF_LOCAL)
+ arg->arg_flags |= AF_LOCAL;
+ arg[1].arg_flags |= AF_ARYOK;
+ arg[2].arg_flags |= AF_ARYOK;
+ }
+ }
+ else if (arg->arg_type != O_CHOP)
+ arg->arg_type = O_ASSIGN; /* possible local(); */
+ for (i = arg1->arg_len; i >= 1; i--) {
+ switch (arg1[i].arg_type) {
+ case A_STAR: case A_LSTAR:
+ arg1[i].arg_type = A_LSTAR;
+ break;
+ case A_STAB: case A_LVAL:
+ arg1[i].arg_type = A_LVAL;
+ break;
+ case A_ARYLEN: case A_LARYLEN:
+ arg1[i].arg_type = A_LARYLEN;
+ break;
+ case A_ARYSTAB: case A_LARYSTAB:
+ arg1[i].arg_type = A_LARYSTAB;
+ break;
+ case A_EXPR: case A_LEXPR:
+ arg1[i].arg_type = A_LEXPR;
+ switch(arg1[i].arg_ptr.arg_arg->arg_type) {
+ case O_ARRAY: case O_LARRAY:
+ arg1[i].arg_ptr.arg_arg->arg_type = O_LARRAY;
+ arghog = 1;
+ break;
+ case O_AELEM: case O_LAELEM:
+ arg1[i].arg_ptr.arg_arg->arg_type = O_LAELEM;
+ break;
+ case O_HASH: case O_LHASH:
+ arg1[i].arg_ptr.arg_arg->arg_type = O_LHASH;
+ arghog = 1;
+ break;
+ case O_HELEM: case O_LHELEM:
+ arg1[i].arg_ptr.arg_arg->arg_type = O_LHELEM;
+ break;
+ case O_ASLICE: case O_LASLICE:
+ arg1[i].arg_ptr.arg_arg->arg_type = O_LASLICE;
+ break;
+ case O_HSLICE: case O_LHSLICE:
+ arg1[i].arg_ptr.arg_arg->arg_type = O_LHSLICE;
+ break;
+ default:
+ goto ill_item;
+ }
+ break;
+ default:
+ ill_item:
+ (void)sprintf(tokenbuf, "Illegal item (%s) as lvalue",
+ argname[arg1[i].arg_type&A_MASK]);
+ yyerror(tokenbuf);
+ }
+ }
+ if (arg->arg_len > 1) {
+ if (arg2->arg_type == O_SPLIT && !arg2[3].arg_type && !arghog) {
+ arg2[3].arg_type = A_SINGLE;
+ arg2[3].arg_ptr.arg_str =
+ str_nmake((double)arg1->arg_len + 1); /* limit split len*/
+ }
+ }
+ }
+ else if (arg1->arg_type == O_AELEM || arg1->arg_type == O_LAELEM)
+ if (arg->arg_type == O_DEFINED)
+ arg1->arg_type = O_AELEM;
+ else
+ arg1->arg_type = O_LAELEM;
+ else if (arg1->arg_type == O_ARRAY || arg1->arg_type == O_LARRAY) {
+ arg1->arg_type = O_LARRAY;
+ if (arg->arg_len > 1) {
+ dehoist(arg,2);
+ arg2 = arg[2].arg_ptr.arg_arg;
+ if (arg2->arg_type == O_SPLIT) { /* use split's builtin =?*/
+ spat = arg2[2].arg_ptr.arg_spat;
+ if (!(spat->spat_flags & SPAT_ONCE) &&
+ nothing_in_common(arg1,spat->spat_repl)) {
+ spat->spat_repl[1].arg_ptr.arg_stab =
+ arg1[1].arg_ptr.arg_stab;
+ arg1[1].arg_ptr.arg_stab = Nullstab;
+ spat->spat_flags |= SPAT_ONCE;
+ arg_free(arg1); /* recursive */
+ arg[1].arg_ptr.arg_arg = Nullarg;
+ free_arg(arg); /* non-recursive */
+ return arg2; /* split has builtin assign */
+ }
+ }
+ else if (nothing_in_common(arg1,arg2))
+ arg->arg_flags &= ~AF_COMMON;
+ if (arg->arg_type == O_ASSIGN) {
+ arg[1].arg_flags |= AF_ARYOK;
+ arg[2].arg_flags |= AF_ARYOK;
+ }
+ }
+ else if (arg->arg_type == O_ASSIGN)
+ arg[1].arg_flags |= AF_ARYOK;
+ }
+ else if (arg1->arg_type == O_HELEM || arg1->arg_type == O_LHELEM)
+ if (arg->arg_type == O_DEFINED)
+ arg1->arg_type = O_HELEM; /* avoid creating one */
+ else
+ arg1->arg_type = O_LHELEM;
+ else if (arg1->arg_type == O_HASH || arg1->arg_type == O_LHASH) {
+ arg1->arg_type = O_LHASH;
+ if (arg->arg_len > 1) {
+ dehoist(arg,2);
+ arg2 = arg[2].arg_ptr.arg_arg;
+ if (nothing_in_common(arg1,arg2))
+ arg->arg_flags &= ~AF_COMMON;
+ if (arg->arg_type == O_ASSIGN) {
+ arg[1].arg_flags |= AF_ARYOK;
+ arg[2].arg_flags |= AF_ARYOK;
+ }
+ }
+ else if (arg->arg_type == O_ASSIGN)
+ arg[1].arg_flags |= AF_ARYOK;
+ }
+ else if (arg1->arg_type == O_ASLICE) {
+ arg1->arg_type = O_LASLICE;
+ if (arg->arg_type == O_ASSIGN) {
+ dehoist(arg,2);
+ arg[1].arg_flags |= AF_ARYOK;
+ arg[2].arg_flags |= AF_ARYOK;
+ }
+ }
+ else if (arg1->arg_type == O_HSLICE) {
+ arg1->arg_type = O_LHSLICE;
+ if (arg->arg_type == O_ASSIGN) {
+ dehoist(arg,2);
+ arg[1].arg_flags |= AF_ARYOK;
+ arg[2].arg_flags |= AF_ARYOK;
+ }
+ }
+ else if ((arg->arg_type == O_DEFINED || arg->arg_type == O_UNDEF) &&
+ (arg1->arg_type == (perldb ? O_DBSUBR : O_SUBR)) ) {
+ arg[1].arg_type |= A_DONT;
+ }
+ else if (arg1->arg_type == O_SUBSTR || arg1->arg_type == O_VEC) {
+ (void)l(arg1);
+ Renewc(arg1->arg_ptr.arg_str, 1, struct lstring, STR);
+ /* grow string struct to hold an lstring struct */
+ }
+ else if (arg1->arg_type == O_ASSIGN) {
+/* if (arg->arg_type == O_CHOP)
+ arg[1].arg_flags &= ~AF_ARYOK; /* grandfather chop idiom */
+ }
+ else {
+ (void)sprintf(tokenbuf,
+ "Illegal expression (%s) as lvalue",opname[arg1->arg_type]);
+ yyerror(tokenbuf);
+ }
+ arg[1].arg_type = A_LEXPR | (arg[1].arg_type & A_DONT);
+ if (arg->arg_type == O_ASSIGN && (arg1[1].arg_flags & AF_ARYOK)) {
+ arg[1].arg_flags |= AF_ARYOK;
+ if (arg->arg_len > 1)
+ arg[2].arg_flags |= AF_ARYOK;
+ }
+#ifdef DEBUGGING
+ if (debug & 16)
+ fprintf(stderr,"lval LEXPR\n");
+#endif
+ return arg;
+ }
+ if (i == A_STAR || i == A_LSTAR) {
+ arg[1].arg_type = A_LSTAR | (arg[1].arg_type & A_DONT);
+ return arg;
+ }
+
+ /* not an array reference, should be a register name */
+
+ if (i != A_STAB && i != A_LVAL) {
+ (void)sprintf(tokenbuf,
+ "Illegal item (%s) as lvalue",argname[arg[1].arg_type&A_MASK]);
+ yyerror(tokenbuf);
+ }
+ arg[1].arg_type = A_LVAL | (arg[1].arg_type & A_DONT);
+#ifdef DEBUGGING
+ if (debug & 16)
+ fprintf(stderr,"lval LVAL\n");
+#endif
+ return arg;
+}
+
+ARG *
+fixl(type,arg)
+int type;
+ARG *arg;
+{
+ if (type == O_DEFINED || type == O_UNDEF) {
+ if (arg->arg_type != O_ITEM)
+ arg = hide_ary(arg);
+ if (arg->arg_type == O_ITEM) {
+ type = arg[1].arg_type & A_MASK;
+ if (type == A_EXPR || type == A_LEXPR)
+ arg[1].arg_type = A_LEXPR|A_DONT;
+ }
+ }
+ return arg;
+}
+
+dehoist(arg,i)
+ARG *arg;
+{
+ ARG *tmparg;
+
+ if (arg[i].arg_type != A_EXPR) { /* dehoist */
+ tmparg = make_op(O_ITEM,1,Nullarg,Nullarg,Nullarg);
+ tmparg[1] = arg[i];
+ arg[i].arg_ptr.arg_arg = tmparg;
+ arg[i].arg_type = A_EXPR;
+ }
+}
+
+ARG *
+addflags(i,flags,arg)
+register ARG *arg;
+{
+ arg[i].arg_flags |= flags;
+ return arg;
+}
+
+ARG *
+hide_ary(arg)
+ARG *arg;
+{
+ if (arg->arg_type == O_ARRAY || arg->arg_type == O_HASH)
+ return make_op(O_ITEM,1,arg,Nullarg,Nullarg);
+ return arg;
+}
+
+/* maybe do a join on multiple array dimensions */
+
+ARG *
+jmaybe(arg)
+register ARG *arg;
+{
+ if (arg && arg->arg_type == O_COMMA) {
+ arg = listish(arg);
+ arg = make_op(O_JOIN, 2,
+ stab2arg(A_STAB,stabent(";",TRUE)),
+ make_list(arg),
+ Nullarg);
+ }
+ return arg;
+}
+
+ARG *
+make_list(arg)
+register ARG *arg;
+{
+ register int i;
+ register ARG *node;
+ register ARG *nxtnode;
+ register int j;
+ STR *tmpstr;
+
+ if (!arg) {
+ arg = op_new(0);
+ arg->arg_type = O_LIST;
+ }
+ if (arg->arg_type != O_COMMA) {
+ if (arg->arg_type != O_ARRAY)
+ arg->arg_flags |= AF_LISTISH; /* see listish() below */
+ arg->arg_flags |= AF_LISTISH; /* see listish() below */
+ return arg;
+ }
+ for (i = 2, node = arg; ; i++) {
+ if (node->arg_len < 2)
+ break;
+ if (node[1].arg_type != A_EXPR)
+ break;
+ node = node[1].arg_ptr.arg_arg;
+ if (node->arg_type != O_COMMA)
+ break;
+ }
+ if (i > 2) {
+ node = arg;
+ arg = op_new(i);
+ tmpstr = arg->arg_ptr.arg_str;
+#ifdef STRUCTCOPY
+ *arg = *node; /* copy everything except the STR */
+#else
+ (void)bcopy((char *)node, (char *)arg, sizeof(ARG));
+#endif
+ arg->arg_ptr.arg_str = tmpstr;
+ for (j = i; ; ) {
+#ifdef STRUCTCOPY
+ arg[j] = node[2];
+#else
+ (void)bcopy((char *)(node+2), (char *)(arg+j), sizeof(ARG));
+#endif
+ arg[j].arg_flags |= AF_ARYOK;
+ --j; /* Bug in Xenix compiler */
+ if (j < 2) {
+#ifdef STRUCTCOPY
+ arg[1] = node[1];
+#else
+ (void)bcopy((char *)(node+1), (char *)(arg+1), sizeof(ARG));
+#endif
+ free_arg(node);
+ break;
+ }
+ nxtnode = node[1].arg_ptr.arg_arg;
+ free_arg(node);
+ node = nxtnode;
+ }
+ }
+ arg[1].arg_flags |= AF_ARYOK;
+ arg[2].arg_flags |= AF_ARYOK;
+ arg->arg_type = O_LIST;
+ arg->arg_len = i;
+ return arg;
+}
+
+/* turn a single item into a list */
+
+ARG *
+listish(arg)
+ARG *arg;
+{
+ if (arg->arg_flags & AF_LISTISH)
+ arg = make_op(O_LIST,1,arg,Nullarg,Nullarg);
+ return arg;
+}
+
+ARG *
+maybelistish(optype, arg)
+int optype;
+ARG *arg;
+{
+ ARG *tmparg = arg;
+
+ if (optype == O_RETURN && arg->arg_type == O_ITEM &&
+ arg[1].arg_type == A_EXPR && (tmparg = arg[1].arg_ptr.arg_arg) &&
+ ((tmparg->arg_flags & AF_LISTISH) || (tmparg->arg_type == O_ARRAY) )) {
+ tmparg = listish(tmparg);
+ free_arg(arg);
+ arg = tmparg;
+ }
+ else if (optype == O_PRTF ||
+ (arg->arg_type == O_ASLICE || arg->arg_type == O_HSLICE ||
+ arg->arg_type == O_F_OR_R) )
+ arg = listish(arg);
+ return arg;
+}
+
+/* mark list of local variables */
+
+ARG *
+localize(arg)
+ARG *arg;
+{
+ arg->arg_flags |= AF_LOCAL;
+ return arg;
+}
+
+ARG *
+rcatmaybe(arg)
+ARG *arg;
+{
+ ARG *arg2;
+
+ if (arg->arg_type == O_CONCAT && arg[2].arg_type == A_EXPR) {
+ arg2 = arg[2].arg_ptr.arg_arg;
+ if (arg2->arg_type == O_ITEM && arg2[1].arg_type == A_READ) {
+ arg->arg_type = O_RCAT;
+ arg[2].arg_type = arg2[1].arg_type;
+ arg[2].arg_ptr = arg2[1].arg_ptr;
+ free_arg(arg2);
+ }
+ }
+ return arg;
+}
+
+ARG *
+stab2arg(atype,stab)
+int atype;
+register STAB *stab;
+{
+ register ARG *arg;
+
+ arg = op_new(1);
+ arg->arg_type = O_ITEM;
+ arg[1].arg_type = atype;
+ arg[1].arg_ptr.arg_stab = stab;
+ return arg;
+}
+
+ARG *
+cval_to_arg(cval)
+register char *cval;
+{
+ register ARG *arg;
+
+ arg = op_new(1);
+ arg->arg_type = O_ITEM;
+ arg[1].arg_type = A_SINGLE;
+ arg[1].arg_ptr.arg_str = str_make(cval,0);
+ Safefree(cval);
+ return arg;
+}
+
+ARG *
+op_new(numargs)
+int numargs;
+{
+ register ARG *arg;
+
+ Newz(203,arg, numargs + 1, ARG);
+ arg->arg_ptr.arg_str = Str_new(21,0);
+ arg->arg_len = numargs;
+ return arg;
+}
+
+void
+free_arg(arg)
+ARG *arg;
+{
+ str_free(arg->arg_ptr.arg_str);
+ Safefree(arg);
+}
+
+ARG *
+make_match(type,expr,spat)
+int type;
+ARG *expr;
+SPAT *spat;
+{
+ register ARG *arg;
+
+ arg = make_op(type,2,expr,Nullarg,Nullarg);
+
+ arg[2].arg_type = A_SPAT|A_DONT;
+ arg[2].arg_ptr.arg_spat = spat;
+#ifdef DEBUGGING
+ if (debug & 16)
+ fprintf(stderr,"make_match SPAT=%lx\n",(long)spat);
+#endif
+
+ if (type == O_SUBST || type == O_NSUBST) {
+ if (arg[1].arg_type != A_STAB) {
+ yyerror("Illegal lvalue");
+ }
+ arg[1].arg_type = A_LVAL;
+ }
+ return arg;
+}
+
+ARG *
+cmd_to_arg(cmd)
+CMD *cmd;
+{
+ register ARG *arg;
+
+ arg = op_new(1);
+ arg->arg_type = O_ITEM;
+ arg[1].arg_type = A_CMD;
+ arg[1].arg_ptr.arg_cmd = cmd;
+ return arg;
+}
+
+/* Check two expressions to see if there is any identifier in common */
+
+static int
+nothing_in_common(arg1,arg2)
+ARG *arg1;
+ARG *arg2;
+{
+ static int thisexpr = 0; /* I don't care if this wraps */
+
+ thisexpr++;
+ if (arg_common(arg1,thisexpr,1))
+ return 0; /* hit eval or do {} */
+ stab_lastexpr(defstab) = thisexpr; /* pretend to hit @_ */
+ if (arg_common(arg2,thisexpr,0))
+ return 0; /* hit identifier again */
+ return 1;
+}
+
+/* Recursively descend an expression and mark any identifier or check
+ * it to see if it was marked already.
+ */
+
+static int
+arg_common(arg,exprnum,marking)
+register ARG *arg;
+int exprnum;
+int marking;
+{
+ register int i;
+
+ if (!arg)
+ return 0;
+ for (i = arg->arg_len; i >= 1; i--) {
+ switch (arg[i].arg_type & A_MASK) {
+ case A_NULL:
+ break;
+ case A_LEXPR:
+ case A_EXPR:
+ if (arg_common(arg[i].arg_ptr.arg_arg,exprnum,marking))
+ return 1;
+ break;
+ case A_CMD:
+ return 1; /* assume hanky panky */
+ case A_STAR:
+ case A_LSTAR:
+ case A_STAB:
+ case A_LVAL:
+ case A_ARYLEN:
+ case A_LARYLEN:
+ if (marking)
+ stab_lastexpr(arg[i].arg_ptr.arg_stab) = exprnum;
+ else if (stab_lastexpr(arg[i].arg_ptr.arg_stab) == exprnum)
+ return 1;
+ break;
+ case A_DOUBLE:
+ case A_BACKTICK:
+ {
+ register char *s = arg[i].arg_ptr.arg_str->str_ptr;
+ register char *send = s + arg[i].arg_ptr.arg_str->str_cur;
+ register STAB *stab;
+
+ while (*s) {
+ if (*s == '$' && s[1]) {
+ s = scanident(s,send,tokenbuf);
+ stab = stabent(tokenbuf,TRUE);
+ if (marking)
+ stab_lastexpr(stab) = exprnum;
+ else if (stab_lastexpr(stab) == exprnum)
+ return 1;
+ continue;
+ }
+ else if (*s == '\\' && s[1])
+ s++;
+ s++;
+ }
+ }
+ break;
+ case A_SPAT:
+ if (spat_common(arg[i].arg_ptr.arg_spat,exprnum,marking))
+ return 1;
+ break;
+ case A_READ:
+ case A_INDREAD:
+ case A_GLOB:
+ case A_WORD:
+ case A_SINGLE:
+ break;
+ }
+ }
+ switch (arg->arg_type) {
+ case O_ARRAY:
+ case O_LARRAY:
+ if ((arg[1].arg_type & A_MASK) == A_STAB)
+ (void)aadd(arg[1].arg_ptr.arg_stab);
+ break;
+ case O_HASH:
+ case O_LHASH:
+ if ((arg[1].arg_type & A_MASK) == A_STAB)
+ (void)hadd(arg[1].arg_ptr.arg_stab);
+ break;
+ case O_EVAL:
+ case O_SUBR:
+ case O_DBSUBR:
+ return 1;
+ }
+ return 0;
+}
+
+static int
+spat_common(spat,exprnum,marking)
+register SPAT *spat;
+int exprnum;
+int marking;
+{
+ if (spat->spat_runtime)
+ if (arg_common(spat->spat_runtime,exprnum,marking))
+ return 1;
+ if (spat->spat_repl) {
+ if (arg_common(spat->spat_repl,exprnum,marking))
+ return 1;
+ }
+ return 0;
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/cscope.out b/MultiSource/Benchmarks/MallocBench/perl/cscope.out
new file mode 100644
index 00000000..74be248e
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/cscope.out
@@ -0,0 +1,195242 @@
+cscope 15 /mounts/choi/disks/0/localhome/criswell/llvm/test/Programs/MultiSource/Benchmarks/MallocBench/perl 0000935393
+ @EXTERN.h
+
+14 #undeà
+EXT
+
+
+15 
+ #EXT
+
+
+ )
+
+17 #undeà
+INIT
+
+
+18 
+ #INIT
+(
+x
+)
+
+ )
+
+20 #undeà
+DOINIT
+
+
+ @INTERN.h
+
+14 #undeà
+EXT
+
+
+15 
+ #EXT
+
+
+ )
+
+17 #undeà
+INIT
+
+
+18 
+ #INIT
+(
+x
+èð
+ )
+x
+
+20 
+ #DOINIT
+
+
+ )
+
+ @arg.h
+
+14 
+ #O_NULL
+ 0
+
+ )
+
+15 
+ #O_RCAT
+ 1
+
+ )
+
+16 
+ #O_ITEM
+ 2
+
+ )
+
+17 
+ #O_SCALAR
+ 3
+
+ )
+
+18 
+ #O_ITEM2
+ 4
+
+ )
+
+19 
+ #O_ITEM3
+ 5
+
+ )
+
+20 
+ #O_CONCAT
+ 6
+
+ )
+
+21 
+ #O_REPEAT
+ 7
+
+ )
+
+22 
+ #O_MATCH
+ 8
+
+ )
+
+23 
+ #O_NMATCH
+ 9
+
+ )
+
+24 
+ #O_SUBST
+ 10
+
+ )
+
+25 
+ #O_NSUBST
+ 11
+
+ )
+
+26 
+ #O_ASSIGN
+ 12
+
+ )
+
+27 
+ #O_LOCAL
+ 13
+
+ )
+
+28 
+ #O_AASSIGN
+ 14
+
+ )
+
+29 
+ #O_SASSIGN
+ 15
+
+ )
+
+30 
+ #O_CHOP
+ 16
+
+ )
+
+31 
+ #O_DEFINED
+ 17
+
+ )
+
+32 
+ #O_UNDEF
+ 18
+
+ )
+
+33 
+ #O_STUDY
+ 19
+
+ )
+
+34 
+ #O_POW
+ 20
+
+ )
+
+35 
+ #O_MULTIPLY
+ 21
+
+ )
+
+36 
+ #O_DIVIDE
+ 22
+
+ )
+
+37 
+ #O_MODULO
+ 23
+
+ )
+
+38 
+ #O_ADD
+ 24
+
+ )
+
+39 
+ #O_SUBTRACT
+ 25
+
+ )
+
+40 
+ #O_LEFT_SHIFT
+ 26
+
+ )
+
+41 
+ #O_RIGHT_SHIFT
+ 27
+
+ )
+
+42 
+ #O_LT
+ 28
+
+ )
+
+43 
+ #O_GT
+ 29
+
+ )
+
+44 
+ #O_LE
+ 30
+
+ )
+
+45 
+ #O_GE
+ 31
+
+ )
+
+46 
+ #O_EQ
+ 32
+
+ )
+
+47 
+ #O_NE
+ 33
+
+ )
+
+48 
+ #O_NCMP
+ 34
+
+ )
+
+49 
+ #O_BIT_AND
+ 35
+
+ )
+
+50 
+ #O_XOR
+ 36
+
+ )
+
+51 
+ #O_BIT_OR
+ 37
+
+ )
+
+52 
+ #O_AND
+ 38
+
+ )
+
+53 
+ #O_OR
+ 39
+
+ )
+
+54 
+ #O_COND_EXPR
+ 40
+
+ )
+
+55 
+ #O_COMMA
+ 41
+
+ )
+
+56 
+ #O_NEGATE
+ 42
+
+ )
+
+57 
+ #O_NOT
+ 43
+
+ )
+
+58 
+ #O_COMPLEMENT
+ 44
+
+ )
+
+59 
+ #O_SELECT
+ 45
+
+ )
+
+60 
+ #O_WRITE
+ 46
+
+ )
+
+61 
+ #O_DBMOPEN
+ 47
+
+ )
+
+62 
+ #O_DBMCLOSE
+ 48
+
+ )
+
+63 
+ #O_OPEN
+ 49
+
+ )
+
+64 
+ #O_TRANS
+ 50
+
+ )
+
+65 
+ #O_NTRANS
+ 51
+
+ )
+
+66 
+ #O_CLOSE
+ 52
+
+ )
+
+67 
+ #O_EACH
+ 53
+
+ )
+
+68 
+ #O_VALUES
+ 54
+
+ )
+
+69 
+ #O_KEYS
+ 55
+
+ )
+
+70 
+ #O_LARRAY
+ 56
+
+ )
+
+71 
+ #O_ARRAY
+ 57
+
+ )
+
+72 
+ #O_AELEM
+ 58
+
+ )
+
+73 
+ #O_DELETE
+ 59
+
+ )
+
+74 
+ #O_LHASH
+ 60
+
+ )
+
+75 
+ #O_HASH
+ 61
+
+ )
+
+76 
+ #O_HELEM
+ 62
+
+ )
+
+77 
+ #O_LAELEM
+ 63
+
+ )
+
+78 
+ #O_LHELEM
+ 64
+
+ )
+
+79 
+ #O_LSLICE
+ 65
+
+ )
+
+80 
+ #O_ASLICE
+ 66
+
+ )
+
+81 
+ #O_HSLICE
+ 67
+
+ )
+
+82 
+ #O_LASLICE
+ 68
+
+ )
+
+83 
+ #O_LHSLICE
+ 69
+
+ )
+
+84 
+ #O_SPLICE
+ 70
+
+ )
+
+85 
+ #O_PUSH
+ 71
+
+ )
+
+86 
+ #O_POP
+ 72
+
+ )
+
+87 
+ #O_SHIFT
+ 73
+
+ )
+
+88 
+ #O_UNPACK
+ 74
+
+ )
+
+89 
+ #O_SPLIT
+ 75
+
+ )
+
+90 
+ #O_LENGTH
+ 76
+
+ )
+
+91 
+ #O_SPRINTF
+ 77
+
+ )
+
+92 
+ #O_SUBSTR
+ 78
+
+ )
+
+93 
+ #O_PACK
+ 79
+
+ )
+
+94 
+ #O_GREP
+ 80
+
+ )
+
+95 
+ #O_JOIN
+ 81
+
+ )
+
+96 
+ #O_SLT
+ 82
+
+ )
+
+97 
+ #O_SGT
+ 83
+
+ )
+
+98 
+ #O_SLE
+ 84
+
+ )
+
+99 
+ #O_SGE
+ 85
+
+ )
+
+100 
+ #O_SEQ
+ 86
+
+ )
+
+101 
+ #O_SNE
+ 87
+
+ )
+
+102 
+ #O_SCMP
+ 88
+
+ )
+
+103 
+ #O_SUBR
+ 89
+
+ )
+
+104 
+ #O_DBSUBR
+ 90
+
+ )
+
+105 
+ #O_CALLER
+ 91
+
+ )
+
+106 
+ #O_SORT
+ 92
+
+ )
+
+107 
+ #O_REVERSE
+ 93
+
+ )
+
+108 
+ #O_WARN
+ 94
+
+ )
+
+109 
+ #O_DIE
+ 95
+
+ )
+
+110 
+ #O_PRTF
+ 96
+
+ )
+
+111 
+ #O_PRINT
+ 97
+
+ )
+
+112 
+ #O_CHDIR
+ 98
+
+ )
+
+113 
+ #O_EXIT
+ 99
+
+ )
+
+114 
+ #O_RESET
+ 100
+
+ )
+
+115 
+ #O_LIST
+ 101
+
+ )
+
+116 
+ #O_EOF
+ 102
+
+ )
+
+117 
+ #O_GETC
+ 103
+
+ )
+
+118 
+ #O_TELL
+ 104
+
+ )
+
+119 
+ #O_RECV
+ 105
+
+ )
+
+120 
+ #O_READ
+ 106
+
+ )
+
+121 
+ #O_SYSREAD
+ 107
+
+ )
+
+122 
+ #O_SYSWRITE
+ 108
+
+ )
+
+123 
+ #O_SEND
+ 109
+
+ )
+
+124 
+ #O_SEEK
+ 110
+
+ )
+
+125 
+ #O_RETURN
+ 111
+
+ )
+
+126 
+ #O_REDO
+ 112
+
+ )
+
+127 
+ #O_NEXT
+ 113
+
+ )
+
+128 
+ #O_LAST
+ 114
+
+ )
+
+129 
+ #O_DUMP
+ 115
+
+ )
+
+130 
+ #O_GOTO
+ 116
+
+ )
+
+131 
+ #O_INDEX
+ 117
+
+ )
+
+132 
+ #O_RINDEX
+ 118
+
+ )
+
+133 
+ #O_TIME
+ 119
+
+ )
+
+134 
+ #O_TMS
+ 120
+
+ )
+
+135 
+ #O_LOCALTIME
+ 121
+
+ )
+
+136 
+ #O_GMTIME
+ 122
+
+ )
+
+137 
+ #O_TRUNCATE
+ 123
+
+ )
+
+138 
+ #O_LSTAT
+ 124
+
+ )
+
+139 
+ #O_STAT
+ 125
+
+ )
+
+140 
+ #O_CRYPT
+ 126
+
+ )
+
+141 
+ #O_ATAN2
+ 127
+
+ )
+
+142 
+ #O_SIN
+ 128
+
+ )
+
+143 
+ #O_COS
+ 129
+
+ )
+
+144 
+ #O_RAND
+ 130
+
+ )
+
+145 
+ #O_SRAND
+ 131
+
+ )
+
+146 
+ #O_EXP
+ 132
+
+ )
+
+147 
+ #O_LOG
+ 133
+
+ )
+
+148 
+ #O_SQRT
+ 134
+
+ )
+
+149 
+ #O_INT
+ 135
+
+ )
+
+150 
+ #O_ORD
+ 136
+
+ )
+
+151 
+ #O_ALARM
+ 137
+
+ )
+
+152 
+ #O_SLEEP
+ 138
+
+ )
+
+153 
+ #O_RANGE
+ 139
+
+ )
+
+154 
+ #O_F_OR_R
+ 140
+
+ )
+
+155 
+ #O_FLIP
+ 141
+
+ )
+
+156 
+ #O_FLOP
+ 142
+
+ )
+
+157 
+ #O_FORK
+ 143
+
+ )
+
+158 
+ #O_WAIT
+ 144
+
+ )
+
+159 
+ #O_WAITPID
+ 145
+
+ )
+
+160 
+ #O_SYSTEM
+ 146
+
+ )
+
+161 
+ #O_EXEC_OP
+ 147
+
+ )
+
+162 
+ #O_HEX
+ 148
+
+ )
+
+163 
+ #O_OCT
+ 149
+
+ )
+
+164 
+ #O_CHOWN
+ 150
+
+ )
+
+165 
+ #O_KILL
+ 151
+
+ )
+
+166 
+ #O_UNLINK
+ 152
+
+ )
+
+167 
+ #O_CHMOD
+ 153
+
+ )
+
+168 
+ #O_UTIME
+ 154
+
+ )
+
+169 
+ #O_UMASK
+ 155
+
+ )
+
+170 
+ #O_MSGGET
+ 156
+
+ )
+
+171 
+ #O_SHMGET
+ 157
+
+ )
+
+172 
+ #O_SEMGET
+ 158
+
+ )
+
+173 
+ #O_MSGCTL
+ 159
+
+ )
+
+174 
+ #O_SHMCTL
+ 160
+
+ )
+
+175 
+ #O_SEMCTL
+ 161
+
+ )
+
+176 
+ #O_MSGSND
+ 162
+
+ )
+
+177 
+ #O_MSGRCV
+ 163
+
+ )
+
+178 
+ #O_SEMOP
+ 164
+
+ )
+
+179 
+ #O_SHMREAD
+ 165
+
+ )
+
+180 
+ #O_SHMWRITE
+ 166
+
+ )
+
+181 
+ #O_RENAME
+ 167
+
+ )
+
+182 
+ #O_LINK
+ 168
+
+ )
+
+183 
+ #O_MKDIR
+ 169
+
+ )
+
+184 
+ #O_RMDIR
+ 170
+
+ )
+
+185 
+ #O_GETPPID
+ 171
+
+ )
+
+186 
+ #O_GETPGRP
+ 172
+
+ )
+
+187 
+ #O_SETPGRP
+ 173
+
+ )
+
+188 
+ #O_GETPRIORITY
+ 174
+
+ )
+
+189 
+ #O_SETPRIORITY
+ 175
+
+ )
+
+190 
+ #O_CHROOT
+ 176
+
+ )
+
+191 
+ #O_FCNTL
+ 177
+
+ )
+
+192 
+ #O_IOCTL
+ 178
+
+ )
+
+193 
+ #O_FLOCK
+ 179
+
+ )
+
+194 
+ #O_UNSHIFT
+ 180
+
+ )
+
+195 
+ #O_REQUIRE
+ 181
+
+ )
+
+196 
+ #O_DOFILE
+ 182
+
+ )
+
+197 
+ #O_EVAL
+ 183
+
+ )
+
+198 
+ #O_FTRREAD
+ 184
+
+ )
+
+199 
+ #O_FTRWRITE
+ 185
+
+ )
+
+200 
+ #O_FTREXEC
+ 186
+
+ )
+
+201 
+ #O_FTEREAD
+ 187
+
+ )
+
+202 
+ #O_FTEWRITE
+ 188
+
+ )
+
+203 
+ #O_FTEEXEC
+ 189
+
+ )
+
+204 
+ #O_FTIS
+ 190
+
+ )
+
+205 
+ #O_FTEOWNED
+ 191
+
+ )
+
+206 
+ #O_FTROWNED
+ 192
+
+ )
+
+207 
+ #O_FTZERO
+ 193
+
+ )
+
+208 
+ #O_FTSIZE
+ 194
+
+ )
+
+209 
+ #O_FTMTIME
+ 195
+
+ )
+
+210 
+ #O_FTATIME
+ 196
+
+ )
+
+211 
+ #O_FTCTIME
+ 197
+
+ )
+
+212 
+ #O_FTSOCK
+ 198
+
+ )
+
+213 
+ #O_FTCHR
+ 199
+
+ )
+
+214 
+ #O_FTBLK
+ 200
+
+ )
+
+215 
+ #O_FTFILE
+ 201
+
+ )
+
+216 
+ #O_FTDIR
+ 202
+
+ )
+
+217 
+ #O_FTPIPE
+ 203
+
+ )
+
+218 
+ #O_FTLINK
+ 204
+
+ )
+
+219 
+ #O_SYMLINK
+ 205
+
+ )
+
+220 
+ #O_READLINK
+ 206
+
+ )
+
+221 
+ #O_FTSUID
+ 207
+
+ )
+
+222 
+ #O_FTSGID
+ 208
+
+ )
+
+223 
+ #O_FTSVTX
+ 209
+
+ )
+
+224 
+ #O_FTTTY
+ 210
+
+ )
+
+225 
+ #O_FTTEXT
+ 211
+
+ )
+
+226 
+ #O_FTBINARY
+ 212
+
+ )
+
+227 
+ #O_SOCKET
+ 213
+
+ )
+
+228 
+ #O_BIND
+ 214
+
+ )
+
+229 
+ #O_CONNECT
+ 215
+
+ )
+
+230 
+ #O_LISTEN
+ 216
+
+ )
+
+231 
+ #O_ACCEPT
+ 217
+
+ )
+
+232 
+ #O_GHBYNAME
+ 218
+
+ )
+
+233 
+ #O_GHBYADDR
+ 219
+
+ )
+
+234 
+ #O_GHOSTENT
+ 220
+
+ )
+
+235 
+ #O_GNBYNAME
+ 221
+
+ )
+
+236 
+ #O_GNBYADDR
+ 222
+
+ )
+
+237 
+ #O_GNETENT
+ 223
+
+ )
+
+238 
+ #O_GPBYNAME
+ 224
+
+ )
+
+239 
+ #O_GPBYNUMBER
+ 225
+
+ )
+
+240 
+ #O_GPROTOENT
+ 226
+
+ )
+
+241 
+ #O_GSBYNAME
+ 227
+
+ )
+
+242 
+ #O_GSBYPORT
+ 228
+
+ )
+
+243 
+ #O_GSERVENT
+ 229
+
+ )
+
+244 
+ #O_SHOSTENT
+ 230
+
+ )
+
+245 
+ #O_SNETENT
+ 231
+
+ )
+
+246 
+ #O_SPROTOENT
+ 232
+
+ )
+
+247 
+ #O_SSERVENT
+ 233
+
+ )
+
+248 
+ #O_EHOSTENT
+ 234
+
+ )
+
+249 
+ #O_ENETENT
+ 235
+
+ )
+
+250 
+ #O_EPROTOENT
+ 236
+
+ )
+
+251 
+ #O_ESERVENT
+ 237
+
+ )
+
+252 
+ #O_SOCKPAIR
+ 238
+
+ )
+
+253 
+ #O_SHUTDOWN
+ 239
+
+ )
+
+254 
+ #O_GSOCKOPT
+ 240
+
+ )
+
+255 
+ #O_SSOCKOPT
+ 241
+
+ )
+
+256 
+ #O_GETSOCKNAME
+ 242
+
+ )
+
+257 
+ #O_GETPEERNAME
+ 243
+
+ )
+
+258 
+ #O_SSELECT
+ 244
+
+ )
+
+259 
+ #O_FILENO
+ 245
+
+ )
+
+260 
+ #O_BINMODE
+ 246
+
+ )
+
+261 
+ #O_VEC
+ 247
+
+ )
+
+262 
+ #O_GPWNAM
+ 248
+
+ )
+
+263 
+ #O_GPWUID
+ 249
+
+ )
+
+264 
+ #O_GPWENT
+ 250
+
+ )
+
+265 
+ #O_SPWENT
+ 251
+
+ )
+
+266 
+ #O_EPWENT
+ 252
+
+ )
+
+267 
+ #O_GGRNAM
+ 253
+
+ )
+
+268 
+ #O_GGRGID
+ 254
+
+ )
+
+269 
+ #O_GGRENT
+ 255
+
+ )
+
+270 
+ #O_SGRENT
+ 256
+
+ )
+
+271 
+ #O_EGRENT
+ 257
+
+ )
+
+272 
+ #O_GETLOGIN
+ 258
+
+ )
+
+273 
+ #O_OPENDIR
+ 259
+
+ )
+
+274 
+ #O_READDIR
+ 260
+
+ )
+
+275 
+ #O_TELLDIR
+ 261
+
+ )
+
+276 
+ #O_SEEKDIR
+ 262
+
+ )
+
+277 
+ #O_REWINDDIR
+ 263
+
+ )
+
+278 
+ #O_CLOSEDIR
+ 264
+
+ )
+
+279 
+ #O_SYSCALL
+ 265
+
+ )
+
+280 
+ #O_PIPE
+ 266
+
+ )
+
+281 
+ #MAXO
+ 267
+
+ )
+
+283 #iâdeà
+DOINIT
+
+
+284
+*
+ÝÇme
+[];
+
+286 *
+ gÝÇme
+[] = {
+
+558 
+ #A_NULL
+ 0
+
+ )
+
+559 
+ #A_EXPR
+ 1
+
+ )
+
+560 
+ #A_CMD
+ 2
+
+ )
+
+561 
+ #A_STAB
+ 3
+
+ )
+
+562 
+ #A_LVAL
+ 4
+
+ )
+
+563 
+ #A_SINGLE
+ 5
+
+ )
+
+564 
+ #A_DOUBLE
+ 6
+
+ )
+
+565 
+ #A_BACKTICK
+ 7
+
+ )
+
+566 
+ #A_READ
+ 8
+
+ )
+
+567 
+ #A_SPAT
+ 9
+
+ )
+
+568 
+ #A_LEXPR
+ 10
+
+ )
+
+569 
+ #A_ARYLEN
+ 11
+
+ )
+
+570 
+ #A_ARYSTAB
+ 12
+
+ )
+
+571 
+ #A_LARYLEN
+ 13
+
+ )
+
+572 
+ #A_GLOB
+ 14
+
+ )
+
+573 
+ #A_WORD
+ 15
+
+ )
+
+574 
+ #A_INDREAD
+ 16
+
+ )
+
+575 
+ #A_LARYSTAB
+ 17
+
+ )
+
+576 
+ #A_STAR
+ 18
+
+ )
+
+577 
+ #A_LSTAR
+ 19
+
+ )
+
+578 
+ #A_WANTARRAY
+ 20
+
+ )
+
+580 
+ #A_MASK
+ 31
+
+ )
+
+581 
+ #A_DONT
+ 32
+
+ )
+
+583 #iâdeà
+DOINIT
+
+
+584
+*
+¬gÇme
+[];
+
+586 *
+ g¬gÇme
+[] = {
+
+612 #iâdeà
+DOINIT
+
+
+613
+boÞ
+
+hoi¡abË
+[];
+
+615
+boÞ
+
+ ghoi¡abË
+[] =
+
+641 
+ u¬g±r
+ {
+
+642
+ARG
+ *
+ m¬g_¬g
+;
+
+643 *
+ m¬g_cv®
+;
+
+644
+STAB
+ *
+ m¬g_¡ab
+;
+
+645
+SPAT
+ *
+ m¬g_¥©
+;
+
+646
+CMD
+ *
+ m¬g_cmd
+;
+
+647
+STR
+ *
+ m¬g_¡r
+;
+
+648
+HASH
+ *
+ m¬g_hash
+;
+
+651 
+ s¬g
+ {
+
+652 
+¬g±r
+
+ m¬g_±r
+;
+
+653 
+ m¬g_Ën
+;
+
+654 
+ m¬g_ty³
+;
+
+655 
+ m¬g_æags
+;
+
+658 
+ #AF_ARYOK
+ 1
+
+ )
+
+659 
+ #AF_POST
+ 2
+
+ )
+
+660 
+ #AF_PRE
+ 4
+
+ )
+
+661 
+ #AF_UP
+ 8
+
+ )
+
+662 
+ #AF_COMMON
+ 16
+
+ )
+
+663 
+ #AF_DEPR
+ 32
+
+ )
+
+664 
+ #AF_LISTISH
+ 64
+
+ )
+
+665 
+ #AF_LOCAL
+ 128
+
+ )
+
+677 
+ #Nuάg
+
+ `NuÎ
+(
+ARG
+*)
+
+ )
+
+679 #iâdeà
+DOINIT
+
+
+680
+EXT
+ 
+ gݬgs
+[
+MAXO
++1];
+
+682 
+ #A
+(
+e1
+,
+e2
+,
+e3
+èÓ1+Ó2<<2)+Ó3<<4))
+
+ )
+
+683 
+ #A5
+(
+e1
+,
+e2
+,
+e3
+,
+e4
+,
+e5
+èÓ1+Ó2<<2)+Ó3<<4)+Ó4<<6)+Ó5<<8))
+
+ )
+
+684 
+ gݬgs
+[
+MAXO
++1] = {
+
+685
+A
+(0,0,0),
+
+686
+A
+(1,1,0),
+
+687
+A
+(1,0,0),
+
+688
+A
+(1,0,0),
+
+689
+A
+(0,0,0),
+
+690
+A
+(0,0,0),
+
+691
+A
+(1,1,0),
+
+692
+A
+(3,1,0),
+
+693
+A
+(1,0,0),
+
+694
+A
+(1,0,0),
+
+695
+A
+(1,0,0),
+
+696
+A
+(1,0,0),
+
+697
+A
+(1,1,0),
+
+698
+A
+(1,0,0),
+
+699
+A
+(3,3,0),
+
+700
+A
+(0,0,0),
+
+701
+A
+(3,0,0),
+
+702
+A
+(1,0,0),
+
+703
+A
+(1,0,0),
+
+704
+A
+(1,0,0),
+
+705
+A
+(1,1,0),
+
+706
+A
+(1,1,0),
+
+707
+A
+(1,1,0),
+
+708
+A
+(1,1,0),
+
+709
+A
+(1,1,0),
+
+710
+A
+(1,1,0),
+
+711
+A
+(1,1,0),
+
+712
+A
+(1,1,0),
+
+713
+A
+(1,1,0),
+
+714
+A
+(1,1,0),
+
+715
+A
+(1,1,0),
+
+716
+A
+(1,1,0),
+
+717
+A
+(1,1,0),
+
+718
+A
+(1,1,0),
+
+719
+A
+(1,1,0),
+
+720
+A
+(1,1,0),
+
+721
+A
+(1,1,0),
+
+722
+A
+(1,1,0),
+
+723
+A
+(1,0,0),
+
+724
+A
+(1,0,0),
+
+725
+A
+(1,0,0),
+
+726
+A
+(1,1,0),
+
+727
+A
+(1,0,0),
+
+728
+A
+(1,0,0),
+
+729
+A
+(1,0,0),
+
+730
+A
+(1,0,0),
+
+731
+A
+(1,0,0),
+
+732
+A
+(1,1,1),
+
+733
+A
+(1,0,0),
+
+734
+A
+(1,1,0),
+
+735
+A
+(1,0,0),
+
+736
+A
+(1,0,0),
+
+737
+A
+(1,0,0),
+
+738
+A
+(0,0,0),
+
+739
+A
+(0,0,0),
+
+740
+A
+(0,0,0),
+
+741
+A
+(0,0,0),
+
+742
+A
+(0,0,0),
+
+743
+A
+(0,1,0),
+
+744
+A
+(0,1,0),
+
+745
+A
+(0,0,0),
+
+746
+A
+(0,0,0),
+
+747
+A
+(0,1,0),
+
+748
+A
+(0,1,0),
+
+749
+A
+(0,1,0),
+
+750
+A
+(0,3,3),
+
+751
+A
+(0,3,0),
+
+752
+A
+(0,3,0),
+
+753
+A
+(0,3,0),
+
+754
+A
+(0,3,0),
+
+755
+A
+(0,3,1),
+
+756
+A
+(0,3,0),
+
+757
+A
+(0,0,0),
+
+758
+A
+(0,0,0),
+
+759
+A
+(1,1,0),
+
+760
+A
+(1,0,1),
+
+761
+A
+(1,0,0),
+
+762
+A
+(3,0,0),
+
+763
+A
+(1,1,1),
+
+764
+A
+(1,3,0),
+
+765
+A
+(0,3,0),
+
+766
+A
+(1,3,0),
+
+767
+A
+(1,1,0),
+
+768
+A
+(1,1,0),
+
+769
+A
+(1,1,0),
+
+770
+A
+(1,1,0),
+
+771
+A
+(1,1,0),
+
+772
+A
+(1,1,0),
+
+773
+A
+(1,1,0),
+
+774
+A
+(0,3,0),
+
+775
+A
+(0,3,0),
+
+776
+A
+(1,0,0),
+
+777
+A
+(1,3,0),
+
+778
+A
+(0,3,0),
+
+779
+A
+(0,3,0),
+
+780
+A
+(0,3,0),
+
+781
+A
+(1,3,0),
+
+782
+A
+(1,3,0),
+
+783
+A
+(1,0,0),
+
+784
+A
+(1,0,0),
+
+785
+A
+(1,0,0),
+
+786
+A
+(3,0,0),
+
+787
+A
+(1,0,0),
+
+788
+A
+(1,0,0),
+
+789
+A
+(1,0,0),
+
+790
+A5
+(1,1,1,1,0),
+
+791
+A
+(1,1,3),
+
+792
+A
+(1,1,3),
+
+793
+A
+(1,1,3),
+
+794
+A
+(1,1,3),
+
+795
+A
+(1,1,1),
+
+796
+A
+(0,3,0),
+
+797
+A
+(0,0,0),
+
+798
+A
+(0,0,0),
+
+799
+A
+(0,0,0),
+
+800
+A
+(0,0,0),
+
+801
+A
+(0,0,0),
+
+802
+A
+(1,1,1),
+
+803
+A
+(1,1,1),
+
+804
+A
+(0,0,0),
+
+805
+A
+(0,0,0),
+
+806
+A
+(1,0,0),
+
+807
+A
+(1,0,0),
+
+808
+A
+(1,1,0),
+
+809
+A
+(1,0,0),
+
+810
+A
+(1,0,0),
+
+811
+A
+(1,1,0),
+
+812
+A
+(1,1,0),
+
+813
+A
+(1,0,0),
+
+814
+A
+(1,0,0),
+
+815
+A
+(1,0,0),
+
+816
+A
+(1,0,0),
+
+817
+A
+(1,0,0),
+
+818
+A
+(1,0,0),
+
+819
+A
+(1,0,0),
+
+820
+A
+(1,0,0),
+
+821
+A
+(1,0,0),
+
+822
+A
+(1,0,0),
+
+823
+A
+(1,0,0),
+
+824
+A
+(1,1,0),
+
+825
+A
+(1,0,0),
+
+826
+A
+(1,0,0),
+
+827
+A
+(0,1,0),
+
+828
+A
+(0,0,0),
+
+829
+A
+(0,0,0),
+
+830
+A
+(1,1,0),
+
+831
+A
+(1,3,0),
+
+832
+A
+(1,3,0),
+
+833
+A
+(1,0,0),
+
+834
+A
+(1,0,0),
+
+835
+A
+(0,3,0),
+
+836
+A
+(0,3,0),
+
+837
+A
+(0,3,0),
+
+838
+A
+(0,3,0),
+
+839
+A
+(0,3,0),
+
+840
+A
+(1,0,0),
+
+841
+A
+(1,1,0),
+
+842
+A
+(1,1,1),
+
+843
+A
+(1,1,1),
+
+844
+A
+(1,1,1),
+
+845
+A
+(1,1,1),
+
+846
+A5
+(1,1,1,1,0),
+
+847
+A
+(1,1,1),
+
+848
+A5
+(1,1,1,1,1),
+
+849
+A
+(1,1,1),
+
+850
+A5
+(1,1,1,1,0),
+
+851
+A5
+(1,1,1,1,0),
+
+852
+A
+(1,1,0),
+
+853
+A
+(1,1,0),
+
+854
+A
+(1,1,0),
+
+855
+A
+(1,0,0),
+
+856
+A
+(0,0,0),
+
+857
+A
+(1,0,0),
+
+858
+A
+(1,1,0),
+
+859
+A
+(1,1,0),
+
+860
+A
+(1,1,1),
+
+861
+A
+(1,0,0),
+
+862
+A
+(1,1,1),
+
+863
+A
+(1,1,1),
+
+864
+A
+(1,1,0),
+
+865
+A
+(0,3,0),
+
+866
+A
+(1,0,0),
+
+867
+A
+(1,0,0),
+
+868
+A
+(1,0,0),
+
+869
+A
+(1,0,0),
+
+870
+A
+(1,0,0),
+
+871
+A
+(1,0,0),
+
+872
+A
+(1,0,0),
+
+873
+A
+(1,0,0),
+
+874
+A
+(1,0,0),
+
+875
+A
+(1,0,0),
+
+876
+A
+(1,0,0),
+
+877
+A
+(1,0,0),
+
+878
+A
+(1,0,0),
+
+879
+A
+(1,0,0),
+
+880
+A
+(1,0,0),
+
+881
+A
+(1,0,0),
+
+882
+A
+(1,0,0),
+
+883
+A
+(1,0,0),
+
+884
+A
+(1,0,0),
+
+885
+A
+(1,0,0),
+
+886
+A
+(1,0,0),
+
+887
+A
+(1,0,0),
+
+888
+A
+(1,0,0),
+
+889
+A
+(1,0,0),
+
+890
+A
+(1,1,0),
+
+891
+A
+(1,0,0),
+
+892
+A
+(1,0,0),
+
+893
+A
+(1,0,0),
+
+894
+A
+(1,0,0),
+
+895
+A
+(1,0,0),
+
+896
+A
+(1,0,0),
+
+897
+A
+(1,0,0),
+
+898
+A5
+(1,1,1,1,0),
+
+899
+A
+(1,1,0),
+
+900
+A
+(1,1,0),
+
+901
+A
+(1,1,0),
+
+902
+A
+(1,1,0),
+
+903
+A
+(1,0,0),
+
+904
+A
+(1,1,0),
+
+905
+A
+(0,0,0),
+
+906
+A
+(1,0,0),
+
+907
+A
+(1,1,0),
+
+908
+A
+(0,0,0),
+
+909
+A
+(1,0,0),
+
+910
+A
+(1,0,0),
+
+911
+A
+(0,0,0),
+
+912
+A
+(1,1,0),
+
+913
+A
+(1,1,0),
+
+914
+A
+(0,0,0),
+
+915
+A
+(1,0,0),
+
+916
+A
+(1,0,0),
+
+917
+A
+(1,0,0),
+
+918
+A
+(1,0,0),
+
+919
+A
+(0,0,0),
+
+920
+A
+(0,0,0),
+
+921
+A
+(0,0,0),
+
+922
+A
+(0,0,0),
+
+923
+A5
+(1,1,1,1,1),
+
+924
+A
+(1,1,0),
+
+925
+A
+(1,1,1),
+
+926
+A5
+(1,1,1,1,0),
+
+927
+A
+(1,0,0),
+
+928
+A
+(1,0,0),
+
+929
+A5
+(1,1,1,1,0),
+
+930
+A
+(1,0,0),
+
+931
+A
+(1,0,0),
+
+932
+A
+(1,1,1),
+
+933
+A
+(1,0,0),
+
+934
+A
+(1,0,0),
+
+935
+A
+(0,0,0),
+
+936
+A
+(0,0,0),
+
+937
+A
+(0,0,0),
+
+938
+A
+(1,0,0),
+
+939
+A
+(1,0,0),
+
+940
+A
+(0,0,0),
+
+941
+A
+(0,0,0),
+
+942
+A
+(0,0,0),
+
+943
+A
+(0,0,0),
+
+944
+A
+(1,1,0),
+
+945
+A
+(1,0,0),
+
+946
+A
+(1,0,0),
+
+947
+A
+(1,1,0),
+
+948
+A
+(1,0,0),
+
+949
+A
+(1,0,0),
+
+950
+A
+(1,3,0),
+
+951
+A
+(1,1,0),
+
+954 #undeà
+A
+
+
+955 #undeà
+A5
+
+
+958 
+do_λs
+();
+
+959 
+do_¥l™
+();
+
+960
+boÞ
+
+do_eof
+();
+
+961 
+do_‹Î
+();
+
+962
+boÞ
+
+do_£ek
+();
+
+963 
+do_tms
+();
+
+964 
+do_time
+();
+
+965 
+do_¡©
+();
+
+966
+STR
+ *
+do_push
+();
+
+967
+FILE
+ *
+Ãxrgv
+();
+
+968
+STR
+ *
+do_á‹xt
+();
+
+969 
+do_¦iû
+();
+
+ @array.c
+
+14 
+ ~"EXTERN.h
+"
+
+15 
+ ~"³¾.h
+"
+
+17
+STR
+ *
+
+18
+ $aãtch
+(
+,
+key
+,
+lv®
+)
+
+19 
+ARRAY
+ *
+;
+
+20 
+key
+;
+
+21 
+lv®
+;
+
+23
+STR
+ *
+¡r
+;
+
+25 ià(
+key
+ < 0 || key >
+->
+¬y_fžl
+) {
+
+26 ià(
+lv®
+ &&
+key
+ >= 0) {
+
+27 ià(
+->
+¬y_æags
+ &
+ARF_REAL
+)
+
+28
+¡r
+ =
+ `SŒ_Ãw
+(5,0);
+
+30
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+31 ()
+ `a¡Üe
+(
+,
+key
+,
+¡r
+);
+
+32 
+¡r
+;
+
+35  &
+¡r_undef
+;
+
+37 ià(!
+->
+¬y_¬¿y
+[
+key
+]) {
+
+38 ià(
+lv®
+) {
+
+39
+¡r
+ =
+ `SŒ_Ãw
+(6,0);
+
+40 ()
+ `a¡Üe
+(
+,
+key
+,
+¡r
+);
+
+41 
+¡r
+;
+
+43  &
+¡r_undef
+;
+
+45 
+->
+¬y_¬¿y
+[
+key
+];
+
+46
+ }
+}
+
+48
+boÞ
+
+
+49
+ $a¡Üe
+(
+,
+key
+,
+v®
+)
+
+50 
+ARRAY
+ *
+;
+
+51 
+key
+;
+
+52
+STR
+ *
+v®
+;
+
+54 
+»tv®
+;
+
+56 ià(
+key
+ < 0)
+
+57 
+FALSE
+;
+
+58 ià(
+key
+ >
+->
+¬y_max
+) {
+
+59 
+Ãwmax
+;
+
+61 ià(
+->
+¬y_®loc
+ !ð¬->
+¬y_¬¿y
+) {
+
+62
+»tv®
+ =
+->
+¬y_¬¿y
+ -‡r->
+¬y_®loc
+;
+
+63
+ `CÝy
+(
+->
+¬y_¬¿y
+,‡r->
+¬y_®loc
+,‡r->
+¬y_max
++1,
+STR
+*);
+
+64
+ `Z”o
+(
+->
+¬y_®loc
++¬->
+¬y_max
++1,
+»tv®
+,
+STR
+*);
+
+65
+->
+¬y_max
+ +ð
+»tv®
+;
+
+66
+->
+¬y_¬¿y
+ -ð
+»tv®
+;
+
+67 ià(
+key
+ >
+->
+¬y_max
+ - 10) {
+
+68
+Ãwmax
+ =
+key
+ +
+->
+¬y_max
+;
+
+69 
+»size
+;
+
+73 ià(
+->
+¬y_®loc
+) {
+
+74
+Ãwmax
+ =
+key
+ +
+->
+¬y_max
+ / 5;
+
+75
+»size
+:
+
+76
+ `R’ew
+(
+->
+¬y_®loc
+,
+Ãwmax
++1,
+STR
+*);
+
+77
+ `Z”o
+(&
+->
+¬y_®loc
+[¬->
+¬y_max
++1],
+Ãwmax
+ -‡r->¬y_max,
+STR
+*);
+
+80
+Ãwmax
+ =
+key
+ < 4 ? 4 : key;
+
+81
+ `Newz
+(2,
+->
+¬y_®loc
+,
+Ãwmax
++1,
+STR
+*);
+
+83
+->
+¬y_¬¿y
+ =‡r->
+¬y_®loc
+;
+
+84
+->
+¬y_max
+ =
+Ãwmax
+;
+
+87 ià((
+->
+¬y_æags
+ &
+ARF_REAL
+è&&‡r->
+¬y_fžl
+ <
+key
+) {
+
+88 ++
+->
+¬y_fžl
+ <
+key
+) {
+
+89 ià(
+->
+¬y_¬¿y
+[¬->
+¬y_fžl
+] !ð
+NuΡr
+) {
+
+90
+ `¡r_ä“
+(
+->
+¬y_¬¿y
+[¬->
+¬y_fžl
+]);
+
+91
+->
+¬y_¬¿y
+[¬->
+¬y_fžl
+] =
+NuΡr
+;
+
+95
+»tv®
+ = (
+->
+¬y_¬¿y
+[
+key
+] !ð
+NuΡr
+);
+
+96 ià(
+»tv®
+ && (
+->
+¬y_æags
+ &
+ARF_REAL
+))
+
+97
+ `¡r_ä“
+(
+->
+¬y_¬¿y
+[
+key
+]);
+
+98
+->
+¬y_¬¿y
+[
+key
+] =
+v®
+;
+
+99 
+»tv®
+;
+
+100
+ }
+}
+
+102
+ARRAY
+ *
+
+103
+ $ªew
+(
+¡ab
+)
+
+104
+STAB
+ *
+¡ab
+;
+
+106 
+ARRAY
+ *
+;
+
+108
+ `New
+(1,
+,1,
+ARRAY
+);
+
+109
+->
+¬y_magic
+ =
+ `SŒ_Ãw
+(7,0);
+
+110
+->
+¬y_®loc
+ =‡r->
+¬y_¬¿y
+ = 0;
+
+111
+ `¡r_magic
+(
+->
+¬y_magic
+,
+¡ab
+, '#',
+NuÎch
+, 0);
+
+112
+->
+¬y_max
+ =‡r->
+¬y_fžl
+ = -1;
+
+113
+->
+¬y_æags
+ =
+ARF_REAL
+;
+
+114 
+;
+
+115
+ }
+}
+
+117
+ARRAY
+ *
+
+118
+ $açke
+(
+¡ab
+,
+size
+,
+¡½
+)
+
+119
+STAB
+ *
+¡ab
+;
+
+120 
+size
+;
+
+121 
+STR
+ **
+¡½
+;
+
+123 
+ARRAY
+ *
+;
+
+125
+ `New
+(3,
+,1,
+ARRAY
+);
+
+126
+ `New
+(4,
+->
+¬y_®loc
+,
+size
++1,
+STR
+*);
+
+127
+ `CÝy
+(
+¡½
+,
+->
+¬y_®loc
+,
+size
+,
+STR
+*);
+
+128
+->
+¬y_¬¿y
+ =‡r->
+¬y_®loc
+;
+
+129
+->
+¬y_magic
+ =
+ `SŒ_Ãw
+(8,0);
+
+130
+ `¡r_magic
+(
+->
+¬y_magic
+,
+¡ab
+, '#',
+NuÎch
+, 0);
+
+131
+->
+¬y_fžl
+ =
+size
+ - 1;
+
+132
+->
+¬y_max
+ =
+size
+ - 1;
+
+133
+->
+¬y_æags
+ = 0;
+
+134 
+size
+--) {
+
+135 (*
+¡½
+++)->
+¡r_pok
+ &ð~
+SP_TEMP
+;
+
+137 
+;
+
+138
+ }
+}
+
+141
+ $aþ—r
+(
+)
+
+142 
+ARRAY
+ *
+;
+
+144 
+key
+;
+
+146 ià(!
+ || !×r->
+¬y_æags
+ &
+ARF_REAL
+è||‡r->
+¬y_max
+ < 0)
+
+148 ià(
+key
+ =
+->
+¬y_¬¿y
+ -‡r->
+¬y_®loc
+) {
+
+149
+->
+¬y_max
+ +ð
+key
+;
+
+150
+->
+¬y_¬¿y
+ -ð
+key
+;
+
+152 
+key
+ = 0; key <ð
+->
+¬y_max
+; key++)
+
+153
+ `¡r_ä“
+(
+->
+¬y_¬¿y
+[
+key
+]);
+
+154
+->
+¬y_fžl
+ = -1;
+
+155
+ `Z”o
+(
+->
+¬y_¬¿y
+,‡r->
+¬y_max
++1,
+STR
+*);
+
+156
+ }
+}
+
+159
+ $aä“
+(
+)
+
+160 
+ARRAY
+ *
+;
+
+162 
+key
+;
+
+164 ià(!
+)
+
+166 ià(
+key
+ =
+->
+¬y_¬¿y
+ -‡r->
+¬y_®loc
+) {
+
+167
+->
+¬y_max
+ +ð
+key
+;
+
+168
+->
+¬y_¬¿y
+ -ð
+key
+;
+
+170 ià(
+->
+¬y_æags
+ &
+ARF_REAL
+) {
+
+171 
+key
+ = 0; key <ð
+->
+¬y_max
+; key++)
+
+172
+ `¡r_ä“
+(
+->
+¬y_¬¿y
+[
+key
+]);
+
+174
+ `¡r_ä“
+(
+->
+¬y_magic
+);
+
+175
+ `Saãä“
+(
+->
+¬y_®loc
+);
+
+176
+ `Saãä“
+(
+);
+
+177
+ }
+}
+
+179
+boÞ
+
+
+180
+ $­ush
+(
+,
+v®
+)
+
+181 
+ARRAY
+ *
+;
+
+182
+STR
+ *
+v®
+;
+
+184 
+ `a¡Üe
+(
+,++×r->
+¬y_fžl
+),
+v®
+);
+
+185
+ }
+}
+
+187
+STR
+ *
+
+188
+ $­Ý
+(
+)
+
+189 
+ARRAY
+ *
+;
+
+191
+STR
+ *
+»tv®
+;
+
+193 ià(
+->
+¬y_fžl
+ < 0)
+
+194 
+NuΡr
+;
+
+195
+»tv®
+ =
+->
+¬y_¬¿y
+[¬->
+¬y_fžl
+];
+
+196
+->
+¬y_¬¿y
+[¬->
+¬y_fžl
+--] =
+NuΡr
+;
+
+197 
+»tv®
+;
+
+198
+ }
+}
+
+200
+ $aunshiá
+(
+,
+num
+)
+
+201 
+ARRAY
+ *
+;
+
+202 
+num
+;
+
+204 
+i
+;
+
+205 
+STR
+ **
+s¡r
+,**
+d¡r
+;
+
+207 ià(
+num
+ <= 0)
+
+209 ià(
+->
+¬y_¬¿y
+ -‡r->
+¬y_®loc
+ >ð
+num
+) {
+
+210
+->
+¬y_max
+ +ð
+num
+;
+
+211
+->
+¬y_fžl
+ +ð
+num
+;
+
+212 
+num
+--)
+
+213 *--
+->
+¬y_¬¿y
+ =
+NuΡr
+;
+
+216 ()
+ `a¡Üe
+(
+,¬->
+¬y_fžl
++
+num
+,(
+STR
+*)0);
+
+217
+d¡r
+ =
+->
+¬y_¬¿y
+ +‡r->
+¬y_fžl
+;
+
+218
+s¡r
+ =
+d¡r
+ -
+num
+;
+
+219 #ifdeà
+BUGGY_MSC5
+
+
+220 #´agm¨
+ `loÝ_Ýt
+(
+off
+)
+
+222 
+i
+ =
+->
+¬y_fžl
+; i >= 0; i--) {
+
+223 *
+d¡r
+-- = *
+s¡r
+--;
+
+224 #ifdeà
+BUGGY_MSC5
+
+
+225 #´agm¨
+ `loÝ_Ýt
+()
+
+228
+ `Z”o
+(
+->
+¬y_¬¿y
+,
+num
+,
+STR
+*);
+
+230
+ }
+}
+
+232
+STR
+ *
+
+233
+ $ashiá
+(
+)
+
+234 
+ARRAY
+ *
+;
+
+236
+STR
+ *
+»tv®
+;
+
+238 ià(
+->
+¬y_fžl
+ < 0)
+
+239 
+NuΡr
+;
+
+240
+»tv®
+ = *
+->
+¬y_¬¿y
+;
+
+241 *(
+->
+¬y_¬¿y
+++èð
+NuΡr
+;
+
+242
+->
+¬y_max
+--;
+
+243
+->
+¬y_fžl
+--;
+
+244 
+»tv®
+;
+
+245
+ }
+}
+
+248
+ $®’
+(
+)
+
+249 
+ARRAY
+ *
+;
+
+251 
+->
+¬y_fžl
+;
+
+252
+ }
+}
+
+254
+ $afžl
+(
+,
+fžl
+)
+
+255 
+ARRAY
+ *
+;
+
+256 
+fžl
+;
+
+258 ià(
+fžl
+ < 0)
+
+259
+fžl
+ = -1;
+
+260 ià(
+fžl
+ <ð
+->
+¬y_max
+)
+
+261
+->
+¬y_fžl
+ =
+fžl
+;
+
+263 ()
+ `a¡Üe
+(
+,
+fžl
+,
+NuΡr
+);
+
+264
+ }
+}
+
+ @array.h
+
+14 
+ s©bl
+ {
+
+15
+STR
+ **
+ m¬y_¬¿y
+;
+
+16
+STR
+ **
+ m¬y_®loc
+;
+
+17
+STR
+ *
+ m¬y_magic
+;
+
+18 
+ m¬y_max
+;
+
+19 
+ m¬y_fžl
+;
+
+20 
+ m¬y_æags
+;
+
+23 
+ #ARF_REAL
+ 1
+
+ )
+
+25
+STR
+ *
+aãtch
+();
+
+26
+boÞ
+
+a¡Üe
+();
+
+27
+STR
+ *
+­Ý
+();
+
+28
+STR
+ *
+ashiá
+();
+
+29 
+aä“
+();
+
+30 
+aþ—r
+();
+
+31
+boÞ
+
+­ush
+();
+
+32 
+®’
+();
+
+33
+ARRAY
+ *
+ªew
+();
+
+34
+ARRAY
+ *
+açke
+();
+
+ @cmd.c
+
+17 
+ ~"EXTERN.h
+"
+
+18 
+ ~"³¾.h
+"
+
+20 #ifdeà
+I_VARARGS
+
+
+21 
+ ~<v¬¬gs.h
+>
+
+24 
+STR
+
+ g¡r_chÝ
+;
+
+26 
+grow_dËv–
+();
+
+30 #ià
+defšed
+(
+üay
+è|| defšed(
+__STDC__
+)
+
+31 
+ #JMPCLOBBER
+
+
+ )
+
+40
+ $cmd_exec
+(
+cmd·rm
+,
+gimme
+,
+)
+
+41
+CMD
+ *
+VOLATILE
+
+cmd·rm
+;
+
+42
+VOLATILE
+ 
+gimme
+;
+
+43
+VOLATILE
+ 
+;
+
+45 
+CMD
+ *
+cmd
+ =
+cmd·rm
+;
+
+46
+SPAT
+ *
+VOLATILE
+
+Þd¥©
+;
+
+47
+VOLATILE
+ 
+fœ¡§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+48
+VOLATILE
+ 
+Þd§ve
+;
+
+49
+VOLATILE
+ 
+¬yÝt§ve
+;
+
+50 #ifdeà
+DEBUGGING
+
+
+51
+VOLATILE
+ 
+ÞddËv–
+;
+
+52
+VOLATILE
+ 
+’tdËv–
+;
+
+54 
+STR
+ *
+»t¡r
+ = &
+¡r_undef
+;
+
+55 *
+tmps
+;
+
+56 
+cmdæags
+;
+
+57 
+m©ch
+;
+
+58 *
+go_to
+ =
+gÙo_rg
+;
+
+59 
+Ãw¥
+ = -2;
+
+60 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+61
+FILE
+ *
+VOLATILE
+
+;
+
+62
+ARRAY
+ *
+VOLATILE
+
+;
+
+64
+Ï¡size
+ = 0;
+
+65 #ifdeà
+DEBUGGING
+
+
+66
+’tdËv–
+ =
+dËv–
+;
+
+68
+ž_»cursiÚ_’Œy
+:
+
+69 #ifdeà
+DEBUGGING
+
+
+70
+dËv–
+ =
+’tdËv–
+;
+
+72 #ifdeà
+TAINT
+
+
+73
+š‹d
+ = 0;
+
+75 ià(
+cmd
+ =ð
+NuÎcmd
+) {
+
+76 ià(
+gimme
+ =ð
+G_ARRAY
+ &&
+Ãw¥
+ > -2)
+
+77 
+Ãw¥
+;
+
+79
+[++
+] =
+»t¡r
+;
+
+80 
+;
+
+83
+cmdæags
+ =
+cmd
+->
+c_æags
+;
+
+84 ià(
+go_to
+) {
+
+85 ià(
+cmd
+->
+c_Ïb–
+ &&
+ `¡rEQ
+(
+go_to
+,cmd->c_label))
+
+86
+gÙo_rg
+ =
+go_to
+ =
+NuÎch
+;
+
+88 
+cmd
+->
+c_ty³
+) {
+
+89 
+C_IF
+:
+
+90
+Þd¥©
+ =
+cur¥©
+;
+
+91
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+92 #ifdeà
+DEBUGGING
+
+
+93
+ÞddËv–
+ =
+dËv–
+;
+
+95
+»t¡r
+ = &
+¡r_yes
+;
+
+96
+Ãw¥
+ = -2;
+
+97 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+98 #ifdeà
+DEBUGGING
+
+
+99 ià(
+debug
+) {
+
+100
+debÇme
+[
+dËv–
+] = 't';
+
+101
+debd–im
+[
+dËv–
+] = '_';
+
+102 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+103
+ `grow_dËv–
+();
+
+106
+Ãw¥
+ =
+ `cmd_exec
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+107
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+108
+»t¡r
+ =
+[
+Ãw¥
+];
+
+110 ià(!
+gÙo_rg
+)
+
+111
+go_to
+ =
+NuÎch
+;
+
+112
+cur¥©
+ =
+Þd¥©
+;
+
+113 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+Þd§ve
+)
+
+114
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+115 #ifdeà
+DEBUGGING
+
+
+116
+dËv–
+ =
+ÞddËv–
+;
+
+118
+cmd
+ = cmd->
+ucmd
+.
+ccmd
+.
+cc_®t
+;
+
+119 
+ž_»cursiÚ_’Œy
+;
+
+120 
+C_ELSE
+:
+
+121
+Þd¥©
+ =
+cur¥©
+;
+
+122
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+123 #ifdeà
+DEBUGGING
+
+
+124
+ÞddËv–
+ =
+dËv–
+;
+
+126
+»t¡r
+ = &
+¡r_undef
+;
+
+127
+Ãw¥
+ = -2;
+
+128 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+129 #ifdeà
+DEBUGGING
+
+
+130 ià(
+debug
+) {
+
+131
+debÇme
+[
+dËv–
+] = 'e';
+
+132
+debd–im
+[
+dËv–
+] = '_';
+
+133 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+134
+ `grow_dËv–
+();
+
+137
+Ãw¥
+ =
+ `cmd_exec
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+138
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+139
+»t¡r
+ =
+[
+Ãw¥
+];
+
+141 ià(!
+gÙo_rg
+)
+
+142
+go_to
+ =
+NuÎch
+;
+
+143
+cur¥©
+ =
+Þd¥©
+;
+
+144 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+Þd§ve
+)
+
+145
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+146 #ifdeà
+DEBUGGING
+
+
+147
+dËv–
+ =
+ÞddËv–
+;
+
+150 
+C_BLOCK
+:
+
+151 
+C_WHILE
+:
+
+152 ià(!(
+cmdæags
+ &
+CF_ONCE
+)) {
+
+153
+cmdæags
+ |ð
+CF_ONCE
+;
+
+154 ià(++
+loÝ_±r
+ >ð
+loÝ_max
+) {
+
+155
+loÝ_max
+ += 128;
+
+156
+ `R’ew
+(
+loÝ_¡ack
+,
+loÝ_max
+, 
+loÝ
+);
+
+158
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+ =
+cmd
+->
+c_Ïb–
+;
+
+159
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_¥
+ =
+;
+
+160 #ifdeà
+DEBUGGING
+
+
+161 ià(
+debug
+ & 4) {
+
+162
+ `deb
+("(Pushing†abel #%d %s)\n",
+
+163
+loÝ_±r
+,
+cmd
+->
+c_Ïb–
+ ? cmd->c_label : "");
+
+167 #ifdeà
+JMPCLOBBER
+
+
+168
+cmd·rm
+ =
+cmd
+;
+
+170
+m©ch
+ =
+ `£tjmp
+(
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_’v
+);
+
+171 ià(
+m©ch
+) {
+
+172
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+173 #ifdeà
+JMPCLOBBER
+
+
+174
+cmd
+ =
+cmd·rm
+;
+
+175
+cmdæags
+ =
+cmd
+->
+c_æags
+|
+CF_ONCE
+;
+
+177 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+Þd§ve
+)
+
+178
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+179 
+m©ch
+) {
+
+181
+ `çl
+("lÚgjm°»tuºed bad v®u(%d)",
+m©ch
+);
+
+182 
+O_LAST
+:
+
+183
+go_to
+ =
+NuÎch
+;
+
+184 ià(
+Ï¡»t¡r
+) {
+
+185
+»t¡r
+ =
+Ï¡»t¡r
+;
+
+186
+Ãw¥
+ = -2;
+
+189
+Ãw¥
+ =
+ +
+Ï¡size
+;
+
+190
+»t¡r
+ =
+[
+Ãw¥
+];
+
+192 #ifdeà
+DEBUGGING
+
+
+193
+ÞddËv–
+ =
+dËv–
+;
+
+195
+cur¥©
+ =
+Þd¥©
+;
+
+196 
+Ãxt_cmd
+;
+
+197 
+O_NEXT
+:
+
+198
+go_to
+ =
+NuÎch
+;
+
+199 #ifdeà
+JMPCLOBBER
+
+
+200
+Ãw¥
+ = -2;
+
+201
+»t¡r
+ = &
+¡r_undef
+;
+
+203 
+Ãxt_™”
+;
+
+204 
+O_REDO
+:
+
+205
+go_to
+ =
+NuÎch
+;
+
+206 #ifdeà
+JMPCLOBBER
+
+
+207
+Ãw¥
+ = -2;
+
+208
+»t¡r
+ = &
+¡r_undef
+;
+
+210 
+do™
+;
+
+213
+Þd¥©
+ =
+cur¥©
+;
+
+214
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+215 #ifdeà
+DEBUGGING
+
+
+216
+ÞddËv–
+ =
+dËv–
+;
+
+218 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+219 #ifdeà
+DEBUGGING
+
+
+220 ià(
+debug
+) {
+
+221
+debÇme
+[
+dËv–
+] = 't';
+
+222
+debd–im
+[
+dËv–
+] = '_';
+
+223 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+224
+ `grow_dËv–
+();
+
+227
+Ãw¥
+ =
+ `cmd_exec
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+228
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+229
+»t¡r
+ =
+[
+Ãw¥
+];
+
+231 ià(!
+gÙo_rg
+) {
+
+232
+go_to
+ =
+NuÎch
+;
+
+233 
+Ãxt_™”
+;
+
+235 #ifdeà
+DEBUGGING
+
+
+236
+dËv–
+ =
+ÞddËv–
+;
+
+238 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+) {
+
+239 #ifdeà
+DEBUGGING
+
+
+240 ià(
+debug
+) {
+
+241
+debÇme
+[
+dËv–
+] = 'a';
+
+242
+debd–im
+[
+dËv–
+] = '_';
+
+243 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+244
+ `grow_dËv–
+();
+
+247
+Ãw¥
+ =
+ `cmd_exec
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+248
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+249
+»t¡r
+ =
+[
+Ãw¥
+];
+
+251 ià(
+gÙo_rg
+)
+
+253
+go_to
+ =
+NuÎch
+;
+
+254 
+fšish_whže
+;
+
+256
+cmd
+ = cmd->
+c_Ãxt
+;
+
+257 ià(
+cmd
+ && cmd->
+c_h—d
+ == cmd)
+
+259 
+;
+
+260 ià(
+cmdæags
+ &
+CF_ONCE
+) {
+
+261 #ifdeà
+DEBUGGING
+
+
+262 ià(
+debug
+ & 4) {
+
+263
+tmps
+ =
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+;
+
+264
+ `deb
+("(PÝpšg†ab– #%d %s)\n",
+loÝ_±r
+,
+
+265
+tmps
+ ?mps : "" );
+
+268
+loÝ_±r
+--;
+
+270 
+ž_»cursiÚ_’Œy
+;
+
+274
+uÁž_loÝ
+:
+
+278
+curcmd
+ =
+cmd
+;
+
+280 #ifdeà
+DEBUGGING
+
+
+281 ià(
+debug
+) {
+
+282 ià(
+debug
+ & 2) {
+
+283
+ `deb
+("%s (%lx)„%lx%lx‡%lx‚%lx cs%lx\n",
+
+284
+cmdÇme
+[
+cmd
+->
+c_ty³
+],cmd,cmd->
+c_ex´
+,
+
+285
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,cmd->ucmd.ccmd.
+cc_®t
+,cmd->
+c_Ãxt
+,
+
+286
+cur¥©
+);
+
+288
+debÇme
+[
+dËv–
+] =
+cmdÇme
+[
+cmd
+->
+c_ty³
+][0];
+
+289
+debd–im
+[
+dËv–
+] = '!';
+
+290 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+291
+ `grow_dËv–
+();
+
+297 ià(
+cmdæags
+ &
+CF_COND
+) {
+
+298 
+cmdæags
+ &
+CF_OPTIMIZE
+) {
+
+300 
+CFT_FALSE
+:
+
+301
+»t¡r
+ =
+cmd
+->
+c_shÜt
+;
+
+302
+Ãw¥
+ = -2;
+
+303
+m©ch
+ =
+FALSE
+;
+
+304 ià(
+cmdæags
+ &
+CF_NESURE
+)
+
+305 
+maybe
+;
+
+307 
+CFT_TRUE
+:
+
+308
+»t¡r
+ =
+cmd
+->
+c_shÜt
+;
+
+309
+Ãw¥
+ = -2;
+
+310
+m©ch
+ =
+TRUE
+;
+
+311 ià(
+cmdæags
+ &
+CF_EQSURE
+)
+
+312 
+æmaybe
+;
+
+315 
+CFT_REG
+:
+
+316
+»t¡r
+ =
+ `STAB_STR
+(
+cmd
+->
+c_¡ab
+);
+
+317
+Ãw¥
+ = -2;
+
+318
+m©ch
+ =
+ `¡r_Œue
+(
+»t¡r
+);
+
+319 ià(
+cmdæags
+ & (
+m©ch
+ ?
+CF_EQSURE
+ :
+CF_NESURE
+))
+
+320 
+æmaybe
+;
+
+323 
+CFT_ANCHOR
+:
+
+324 ià(
+muÉžše
+) {
+
+325 ià(*
+cmd
+->
+c_shÜt
+->
+¡r_±r
+ && !(
+cmdæags
+ &
+CF_EQSURE
+))
+
+326 
+sÿ”
+;
+
+331 
+CFT_STROP
+:
+
+332
+»t¡r
+ =
+ `STAB_STR
+(
+cmd
+->
+c_¡ab
+);
+
+333
+Ãw¥
+ = -2;
+
+334 #iâdeà
+I286
+
+
+335 ià(*
+cmd
+->
+c_shÜt
+->
+¡r_±r
+ =ð*
+ `¡r_g‘
+(
+»t¡r
+) &&
+
+336
+ `bcmp
+(
+cmd
+->
+c_shÜt
+->
+¡r_±r
+,
+ `¡r_g‘
+(
+»t¡r
+),
+
+337
+cmd
+->
+c_¦’
+) == 0 ) {
+
+338 ià(
+cmdæags
+ &
+CF_EQSURE
+) {
+
+339 ià(
+§wam³r§nd
+ && (
+cmdæags
+ &
+CF_OPTIMIZE
+è!ð
+CFT_STROP
+) {
+
+340
+cur¥©
+ =
+Nu봩
+;
+
+341 ià(
+Ëá¡ab
+)
+
+342
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+Ëá¡ab
+),"",0);
+
+343 ià(
+am³r¡ab
+)
+
+344
+ `¡r_s£t
+(
+ `¡ab_v®
+(
+am³r¡ab
+),
+cmd
+->
+c_shÜt
+);
+
+345 ià(
+right¡ab
+)
+
+346
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+right¡ab
+),
+
+347
+»t¡r
+->
+¡r_±r
+ +
+cmd
+->
+c_¦’
+,
+
+348
+»t¡r
+->
+¡r_cur
+ -
+cmd
+->
+c_¦’
+);
+
+350 ià(
+cmd
+->
+c_¥©
+)
+
+351
+Ï¡¥©
+ =
+cmd
+->
+c_¥©
+;
+
+352
+m©ch
+ = !(
+cmdæags
+ &
+CF_FIRSTNEG
+);
+
+353
+»t¡r
+ = &
+¡r_yes
+;
+
+354 
+æmaybe
+;
+
+357 ià(
+cmdæags
+ &
+CF_NESURE
+) {
+
+358
+m©ch
+ =
+cmdæags
+ &
+CF_FIRSTNEG
+;
+
+359
+»t¡r
+ = &
+¡r_no
+;
+
+360 
+æmaybe
+;
+
+364 *
+z­1
+, *
+z­2
+,
+z­1c
+,
+z­2c
+;
+
+365 
+z­Ën
+;
+
+367
+z­1
+ =
+cmd
+->
+c_shÜt
+->
+¡r_±r
+;
+
+368
+z­2
+ =
+ `¡r_g‘
+(
+»t¡r
+);
+
+369
+z­1c
+ = *
+z­1
+;
+
+370
+z­2c
+ = *
+z­2
+;
+
+371
+z­Ën
+ =
+cmd
+->
+c_¦’
+;
+
+372 ià((
+z­1c
+ =ð
+z­2c
+è&& (
+ `bcmp
+(
+z­1
+,
+z­2
+,
+z­Ën
+) == 0)) {
+
+373 ià(
+cmdæags
+ &
+CF_EQSURE
+) {
+
+374 ià(
+§wam³r§nd
+ &&
+
+375 (
+cmdæags
+ &
+CF_OPTIMIZE
+è!ð
+CFT_STROP
+) {
+
+376
+cur¥©
+ =
+Nu봩
+;
+
+377 ià(
+Ëá¡ab
+)
+
+378
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+Ëá¡ab
+),"",0);
+
+379 ià(
+am³r¡ab
+)
+
+380
+ `¡r_s£t
+(
+ `¡ab_v®
+(
+am³r¡ab
+),
+cmd
+->
+c_shÜt
+);
+
+381 ià(
+right¡ab
+)
+
+382
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+right¡ab
+),
+
+383
+»t¡r
+->
+¡r_±r
+ +
+cmd
+->
+c_¦’
+,
+
+384
+»t¡r
+->
+¡r_cur
+ -
+cmd
+->
+c_¦’
+);
+
+386 ià(
+cmd
+->
+c_¥©
+)
+
+387
+Ï¡¥©
+ =
+cmd
+->
+c_¥©
+;
+
+388
+m©ch
+ = !(
+cmdæags
+ &
+CF_FIRSTNEG
+);
+
+389
+»t¡r
+ = &
+¡r_yes
+;
+
+390 
+æmaybe
+;
+
+393 ià(
+cmdæags
+ &
+CF_NESURE
+) {
+
+394
+m©ch
+ =
+cmdæags
+ &
+CF_FIRSTNEG
+;
+
+395
+»t¡r
+ = &
+¡r_no
+;
+
+396 
+æmaybe
+;
+
+402 
+CFT_SCAN
+:
+
+403
+sÿ”
+:
+
+404
+»t¡r
+ =
+ `STAB_STR
+(
+cmd
+->
+c_¡ab
+);
+
+405
+Ãw¥
+ = -2;
+
+406 ià(
+»t¡r
+->
+¡r_pok
+ &
+SP_STUDIED
+)
+
+407 ià(
+sü—mfœ¡
+[
+cmd
+->
+c_shÜt
+->
+¡r_¿»
+] >= 0)
+
+408
+tmps
+ =
+ `sü—mš¡r
+(
+»t¡r
+,
+cmd
+->
+c_shÜt
+);
+
+410
+tmps
+ =
+NuÎch
+;
+
+412
+tmps
+ =
+ `¡r_g‘
+(
+»t¡r
+);
+
+413 #iâdeà
+lšt
+
+
+414
+tmps
+ =
+ `fbmš¡r
+((*)tmps,
+
+415 (*)
+tmps
+ +
+»t¡r
+->
+¡r_cur
+,
+cmd
+->
+c_shÜt
+);
+
+418 ià(
+tmps
+) {
+
+419 ià(
+cmdæags
+ &
+CF_EQSURE
+) {
+
+420 ++
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+421 ià(
+§wam³r§nd
+) {
+
+422
+cur¥©
+ =
+Nu봩
+;
+
+423 ià(
+Ëá¡ab
+)
+
+424
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+Ëá¡ab
+),
+»t¡r
+->
+¡r_±r
+,
+
+425
+tmps
+ -
+»t¡r
+->
+¡r_±r
+);
+
+426 ià(
+am³r¡ab
+)
+
+427
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+am³r¡ab
+),
+
+428
+tmps
+,
+cmd
+->
+c_shÜt
+->
+¡r_cur
+);
+
+429 ià(
+right¡ab
+)
+
+430
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+right¡ab
+),
+
+431
+tmps
+ +
+cmd
+->
+c_shÜt
+->
+¡r_cur
+,
+
+432
+»t¡r
+->
+¡r_cur
+ - (
+tmps
+ -„‘¡r->
+¡r_±r
+) -
+
+433
+cmd
+->
+c_shÜt
+->
+¡r_cur
+);
+
+435
+Ï¡¥©
+ =
+cmd
+->
+c_¥©
+;
+
+436
+m©ch
+ = !(
+cmdæags
+ &
+CF_FIRSTNEG
+);
+
+437
+»t¡r
+ = &
+¡r_yes
+;
+
+438 
+æmaybe
+;
+
+441
+hšt
+ =
+tmps
+;
+
+444 ià(
+cmdæags
+ &
+CF_NESURE
+) {
+
+445 ++
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+446
+m©ch
+ =
+cmdæags
+ &
+CF_FIRSTNEG
+;
+
+447
+»t¡r
+ = &
+¡r_no
+;
+
+448 
+æmaybe
+;
+
+451 ià(--
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+ < 0) {
+
+452
+cmdæags
+ &ð~
+CF_OPTIMIZE
+;
+
+453
+cmdæags
+ |ð
+CFT_EVAL
+;
+
+454
+cmd
+->
+c_æags
+ = (
+cmdæags
+ & ~
+CF_ONCE
+);
+
+458 
+CFT_NUMOP
+:
+
+459
+»t¡r
+ =
+ `STAB_STR
+(
+cmd
+->
+c_¡ab
+);
+
+460
+Ãw¥
+ = -2;
+
+461 
+cmd
+->
+c_¦’
+) {
+
+462 
+O_EQ
+:
+
+463 ià(
+dow¬n
+) {
+
+464 ià((!
+»t¡r
+->
+¡r_nok
+ && !
+ `looks_like_numb”
+(retstr)))
+
+465
+ `w¬n
+("Possible use of == on string value");
+
+467
+m©ch
+ = (
+ `¡r_gnum
+(
+»t¡r
+è=ð
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_nv®
+);
+
+469 
+O_NE
+:
+
+470
+m©ch
+ = (
+ `¡r_gnum
+(
+»t¡r
+è!ð
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_nv®
+);
+
+472 
+O_LT
+:
+
+473
+m©ch
+ = (
+ `¡r_gnum
+(
+»t¡r
+è<
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_nv®
+);
+
+475 
+O_LE
+:
+
+476
+m©ch
+ = (
+ `¡r_gnum
+(
+»t¡r
+è<ð
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_nv®
+);
+
+478 
+O_GT
+:
+
+479
+m©ch
+ = (
+ `¡r_gnum
+(
+»t¡r
+è>
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_nv®
+);
+
+481 
+O_GE
+:
+
+482
+m©ch
+ = (
+ `¡r_gnum
+(
+»t¡r
+è>ð
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_nv®
+);
+
+485 ià(
+m©ch
+) {
+
+486 ià(
+cmdæags
+ &
+CF_EQSURE
+) {
+
+487
+»t¡r
+ = &
+¡r_yes
+;
+
+488 
+æmaybe
+;
+
+491 ià(
+cmdæags
+ &
+CF_NESURE
+) {
+
+492
+»t¡r
+ = &
+¡r_no
+;
+
+493 
+æmaybe
+;
+
+497 
+CFT_INDGETS
+:
+
+498
+Ï¡_š_¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+ `STAB_STR
+(
+cmd
+->
+c_¡ab
+)),
+TRUE
+);
+
+499 ià(!
+ `¡ab_io
+(
+Ï¡_š_¡ab
+))
+
+500
+ `¡ab_io
+(
+Ï¡_š_¡ab
+èð
+ `¡io_Ãw
+();
+
+501 
+dog‘s
+;
+
+502 
+CFT_GETS
+:
+
+503
+Ï¡_š_¡ab
+ =
+cmd
+->
+c_¡ab
+;
+
+504
+dog‘s
+:
+
+505
+ =
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+iå
+;
+
+506
+»t¡r
+ =
+ `¡ab_v®
+(
+def¡ab
+);
+
+507
+Ãw¥
+ = -2;
+
+508
+k“pgošg
+:
+
+509 ià(
+ &&
+ `¡r_g‘s
+(
+»t¡r
+, fp, 0)) {
+
+510 ià(*
+»t¡r
+->
+¡r_±r
+ =ð'0' &&„‘¡r->
+¡r_cur
+ == 1)
+
+511
+m©ch
+ =
+FALSE
+;
+
+513
+m©ch
+ =
+TRUE
+;
+
+514
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+lšes
+++;
+
+516 ià(
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+æags
+ &
+IOF_ARGV
+) {
+
+517 ià(!
+)
+
+518 
+dÛv®
+;
+
+519
+ =
+ `Ãxrgv
+(
+Ï¡_š_¡ab
+);
+
+520 ià(
+)
+
+521 
+k“pgošg
+;
+
+522 ()
+ `do_þo£
+(
+Ï¡_š_¡ab
+,
+FALSE
+);
+
+523
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+æags
+ |ð
+IOF_START
+;
+
+524
+»t¡r
+ = &
+¡r_undef
+;
+
+525
+m©ch
+ =
+FALSE
+;
+
+528
+»t¡r
+ = &
+¡r_undef
+;
+
+529
+m©ch
+ =
+FALSE
+;
+
+531 
+æmaybe
+;
+
+532 
+CFT_EVAL
+:
+
+534 
+CFT_UNFLIP
+:
+
+535 
+tmps_max
+ >
+tmps_ba£
+) {
+
+536
+ `¡r_ä“
+(
+tmps_li¡
+[
+tmps_max
+]);
+
+537
+tmps_li¡
+[
+tmps_max
+--] =
+NuΡr
+;
+
+539
+Ãw¥
+ =
+ `ev®
+(
+cmd
+->
+c_ex´
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+540
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+541
+»t¡r
+ =
+[
+Ãw¥
+];
+
+542
+m©ch
+ =
+ `¡r_Œue
+(
+»t¡r
+);
+
+543 ià(
+cmd
+->
+c_ex´
+->
+¬g_ty³
+ =ð
+O_FLIP
+)
+
+544
+cmdæags
+ =
+ `cÝyÝt
+(
+cmd
+,cmd->
+c_ex´
+[3].
+¬g_±r
+.
+¬g_cmd
+);
+
+545 
+maybe
+;
+
+546 
+CFT_CHOP
+:
+
+547
+»t¡r
+ =
+ `¡ab_v®
+(
+cmd
+->
+c_¡ab
+);
+
+548
+Ãw¥
+ = -2;
+
+549
+m©ch
+ = (
+»t¡r
+->
+¡r_cur
+ != 0);
+
+550
+tmps
+ =
+ `¡r_g‘
+(
+»t¡r
+);
+
+551
+tmps
+ +ð
+»t¡r
+->
+¡r_cur
+ -
+m©ch
+;
+
+552
+ `¡r_n£t
+(&
+¡r_chÝ
+,
+tmps
+,
+m©ch
+);
+
+553 *
+tmps
+ = '\0';
+
+554
+»t¡r
+->
+¡r_nok
+ = 0;
+
+555
+»t¡r
+->
+¡r_cur
+ =
+tmps
+ -„‘¡r->
+¡r_±r
+;
+
+556
+ `STABSET
+(
+»t¡r
+);
+
+557
+»t¡r
+ = &
+¡r_chÝ
+;
+
+558 
+æmaybe
+;
+
+559 
+CFT_ARRAY
+:
+
+560
+m©ch
+ =
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+562 ià(
+m©ch
+ < 0) {
+
+563
+ =
+ `¡ab_¬¿y
+(
+cmd
+->
+c_ex´
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+564
+¬yÝt§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+565
+ `§ve¥Œ
+(&
+ `¡ab_v®
+(
+cmd
+->
+c_¡ab
+));
+
+566
+ `§v–Úg
+(&
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+);
+
+569
+ =
+ `¡ab_x¬¿y
+(
+cmd
+->
+c_ex´
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+570 ià(
+cmd
+->
+c_ty³
+ !ð
+C_WHILE
+ &&
+§ve¡ack
+->
+¬y_fžl
+ >
+fœ¡§ve
+)
+
+571
+ `»¡Ü–i¡
+(
+fœ¡§ve
+);
+
+574 ià(
+m©ch
+ >ð
+->
+¬y_fžl
+) {
+
+575
+»t¡r
+ = &
+¡r_undef
+;
+
+576
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+ = -1;
+
+577
+m©ch
+ =
+FALSE
+;
+
+580
+m©ch
+++;
+
+581 ià(!(
+»t¡r
+ =
+->
+¬y_¬¿y
+[
+m©ch
+]))
+
+582
+»t¡r
+ =
+ `aãtch
+(
+,
+m©ch
+,
+TRUE
+);
+
+583
+ `¡ab_v®
+(
+cmd
+->
+c_¡ab
+èð
+»t¡r
+;
+
+584
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+ =
+m©ch
+;
+
+585
+m©ch
+ =
+TRUE
+;
+
+587
+Ãw¥
+ = -2;
+
+588 
+maybe
+;
+
+589 
+CFT_D1
+:
+
+591 
+CFT_D0
+:
+
+592 ià(
+DBsšgË
+->
+¡r_u
+.
+¡r_nv®
+ != 0)
+
+594 ià(
+DBsigÇl
+->
+¡r_u
+.
+¡r_nv®
+ != 0)
+
+596 ià(
+DBŒaû
+->
+¡r_u
+.
+¡r_nv®
+ != 0)
+
+598 
+Ãxt_cmd
+;
+
+603
+dÛv®
+:
+
+604 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+605
+Ï¡»t¡r
+ =
+NuΡr
+;
+
+606
+Ï¡¥ba£
+ =
+;
+
+607
+Ï¡size
+ =
+Ãw¥
+ -
+;
+
+608 ià(
+Ï¡size
+ < 0)
+
+609
+Ï¡size
+ = 0;
+
+612
+Ï¡»t¡r
+ =
+»t¡r
+;
+
+613 
+tmps_max
+ >
+tmps_ba£
+) {
+
+614
+ `¡r_ä“
+(
+tmps_li¡
+[
+tmps_max
+]);
+
+615
+tmps_li¡
+[
+tmps_max
+--] =
+NuΡr
+;
+
+617
+Ãw¥
+ =
+ `ev®
+(
+cmd
+->
+c_ex´
+,
+
+618
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+è&&
+cmd
+->
+c_ty³
+ =ð
+C_EXPR
+ &&
+
+619 !
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+,
+
+620
+);
+
+621
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+622
+»t¡r
+ =
+[
+Ãw¥
+];
+
+623 ià(
+Ãw¥
+ >
+ &&
+»t¡r
+)
+
+624
+m©ch
+ =
+ `¡r_Œue
+(
+»t¡r
+);
+
+626
+m©ch
+ =
+FALSE
+;
+
+627 
+maybe
+;
+
+631
+æmaybe
+:
+
+632 ià(
+m©ch
+ &&
+cmdæags
+ &
+CF_FLIP
+) {
+
+633 
+tmps_max
+ >
+tmps_ba£
+) {
+
+634
+ `¡r_ä“
+(
+tmps_li¡
+[
+tmps_max
+]);
+
+635
+tmps_li¡
+[
+tmps_max
+--] =
+NuΡr
+;
+
+637 ià(
+cmd
+->
+c_ex´
+->
+¬g_ty³
+ =ð
+O_FLOP
+) {
+
+638
+Ãw¥
+ =
+ `ev®
+(
+cmd
+->
+c_ex´
+,
+G_SCALAR
+,
+);
+
+639
+cmdæags
+ =
+ `cÝyÝt
+(
+cmd
+,cmd->
+c_ex´
+[3].
+¬g_±r
+.
+¬g_cmd
+);
+
+642
+Ãw¥
+ =
+ `ev®
+(
+cmd
+->
+c_ex´
+,
+G_SCALAR
+,
+);
+
+643 ià(
+cmd
+->
+c_ex´
+->
+¬g_ty³
+ =ð
+O_FLOP
+)
+
+644
+cmdæags
+ =
+ `cÝyÝt
+(
+cmd
+,cmd->
+c_ex´
+[4].
+¬g_±r
+.
+¬g_cmd
+);
+
+647 ià(
+cmdæags
+ &
+CF_FLIP
+) {
+
+648 ià(
+cmd
+->
+c_ex´
+->
+¬g_ty³
+ =ð
+O_FLOP
+) {
+
+649
+m©ch
+ =
+TRUE
+;
+
+655
+maybe
+:
+
+656 ià(
+cmdæags
+ &
+CF_INVERT
+)
+
+657
+m©ch
+ = !match;
+
+658 ià(!
+m©ch
+)
+
+659 
+Ãxt_cmd
+;
+
+661 #ifdeà
+TAINT
+
+
+662
+š‹d
+ = 0;
+
+667 
+cmd
+->
+c_ty³
+) {
+
+668 
+C_NULL
+:
+
+669
+ `çl
+("panic: cmd_exec");
+
+670 
+C_EXPR
+:
+
+671 ià(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+) {
+
+672 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+673
+Ï¡»t¡r
+ =
+NuΡr
+;
+
+674
+Ï¡¥ba£
+ =
+;
+
+675
+Ï¡size
+ =
+Ãw¥
+ -
+;
+
+676 ià(
+Ï¡size
+ < 0)
+
+677
+Ï¡size
+ = 0;
+
+680
+Ï¡»t¡r
+ =
+»t¡r
+;
+
+681 
+tmps_max
+ >
+tmps_ba£
+) {
+
+682
+ `¡r_ä“
+(
+tmps_li¡
+[
+tmps_max
+]);
+
+683
+tmps_li¡
+[
+tmps_max
+--] =
+NuΡr
+;
+
+685
+Ãw¥
+ =
+ `ev®
+(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+,
+gimme
+ && (
+cmdæags
+&
+CF_TERM
+),
+);
+
+686
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+687
+»t¡r
+ =
+[
+Ãw¥
+];
+
+690 
+C_NSWITCH
+:
+
+692 
+v®ue
+ =
+ `¡r_gnum
+(
+ `STAB_STR
+(
+cmd
+->
+c_¡ab
+));
+
+694
+m©ch
+ = ()
+v®ue
+;
+
+695 ià(
+v®ue
+ < 0.0) {
+
+696 ià((()
+m©ch
+è>
+v®ue
+)
+
+697 --
+m©ch
+;
+
+700 
+dosw™ch
+;
+
+701 
+C_CSWITCH
+:
+
+702
+m©ch
+ = *(
+ `¡r_g‘
+(
+ `STAB_STR
+(
+cmd
+->
+c_¡ab
+))) & 255;
+
+703
+dosw™ch
+:
+
+704
+m©ch
+ -ð
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_off£t
+;
+
+705 ià(
+m©ch
+ < 0)
+
+706
+m©ch
+ = 0;
+
+707 ià(
+m©ch
+ >
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_max
+)
+
+708
+m©ch
+ =
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_max
+;
+
+709
+cmd
+ = cmd->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+m©ch
+];
+
+710 
+ž_»cursiÚ_’Œy
+;
+
+711 
+C_NEXT
+:
+
+712
+cmd
+ = cmd->
+ucmd
+.
+ccmd
+.
+cc_®t
+;
+
+713 
+ž_»cursiÚ_’Œy
+;
+
+714 
+C_ELSIF
+:
+
+715
+ `çl
+("panic: ELSIF");
+
+716 
+C_IF
+:
+
+717
+Þd¥©
+ =
+cur¥©
+;
+
+718
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+719 #ifdeà
+DEBUGGING
+
+
+720
+ÞddËv–
+ =
+dËv–
+;
+
+722
+»t¡r
+ = &
+¡r_yes
+;
+
+723
+Ãw¥
+ = -2;
+
+724 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+725 #ifdeà
+DEBUGGING
+
+
+726 ià(
+debug
+) {
+
+727
+debÇme
+[
+dËv–
+] = 't';
+
+728
+debd–im
+[
+dËv–
+] = '_';
+
+729 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+730
+ `grow_dËv–
+();
+
+733
+Ãw¥
+ =
+ `cmd_exec
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+734
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+735
+»t¡r
+ =
+[
+Ãw¥
+];
+
+737
+cur¥©
+ =
+Þd¥©
+;
+
+738 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+Þd§ve
+)
+
+739
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+740 #ifdeà
+DEBUGGING
+
+
+741
+dËv–
+ =
+ÞddËv–
+;
+
+743
+cmd
+ = cmd->
+ucmd
+.
+ccmd
+.
+cc_®t
+;
+
+744 
+ž_»cursiÚ_’Œy
+;
+
+745 
+C_ELSE
+:
+
+746
+Þd¥©
+ =
+cur¥©
+;
+
+747
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+748 #ifdeà
+DEBUGGING
+
+
+749
+ÞddËv–
+ =
+dËv–
+;
+
+751
+»t¡r
+ = &
+¡r_undef
+;
+
+752
+Ãw¥
+ = -2;
+
+753 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+754 #ifdeà
+DEBUGGING
+
+
+755 ià(
+debug
+) {
+
+756
+debÇme
+[
+dËv–
+] = 'e';
+
+757
+debd–im
+[
+dËv–
+] = '_';
+
+758 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+759
+ `grow_dËv–
+();
+
+762
+Ãw¥
+ =
+ `cmd_exec
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+763
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+764
+»t¡r
+ =
+[
+Ãw¥
+];
+
+766
+cur¥©
+ =
+Þd¥©
+;
+
+767 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+Þd§ve
+)
+
+768
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+769 #ifdeà
+DEBUGGING
+
+
+770
+dËv–
+ =
+ÞddËv–
+;
+
+773 
+C_BLOCK
+:
+
+774 
+C_WHILE
+:
+
+775 ià(!(
+cmdæags
+ &
+CF_ONCE
+)) {
+
+776
+cmdæags
+ |ð
+CF_ONCE
+;
+
+777 ià(++
+loÝ_±r
+ >ð
+loÝ_max
+) {
+
+778
+loÝ_max
+ += 128;
+
+779
+ `R’ew
+(
+loÝ_¡ack
+,
+loÝ_max
+, 
+loÝ
+);
+
+781
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+ =
+cmd
+->
+c_Ïb–
+;
+
+782
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_¥
+ =
+;
+
+783 #ifdeà
+DEBUGGING
+
+
+784 ià(
+debug
+ & 4) {
+
+785
+ `deb
+("(Pushing†abel #%d %s)\n",
+
+786
+loÝ_±r
+,
+cmd
+->
+c_Ïb–
+ ? cmd->c_label : "");
+
+790 #ifdeà
+JMPCLOBBER
+
+
+791
+cmd·rm
+ =
+cmd
+;
+
+793
+m©ch
+ =
+ `£tjmp
+(
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_’v
+);
+
+794 ià(
+m©ch
+) {
+
+795
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+796 #ifdeà
+JMPCLOBBER
+
+
+797
+cmd
+ =
+cmd·rm
+;
+
+798
+cmdæags
+ =
+cmd
+->
+c_æags
+|
+CF_ONCE
+;
+
+799
+go_to
+ =
+gÙo_rg
+;
+
+801 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+Þd§ve
+)
+
+802
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+803 
+m©ch
+) {
+
+805
+ `çl
+("lÚgjm°»tuºed bad v®u(%d)",
+m©ch
+);
+
+806 
+O_LAST
+:
+
+807 ià(
+Ï¡»t¡r
+) {
+
+808
+»t¡r
+ =
+Ï¡»t¡r
+;
+
+809
+Ãw¥
+ = -2;
+
+812
+Ãw¥
+ =
+ +
+Ï¡size
+;
+
+813
+»t¡r
+ =
+[
+Ãw¥
+];
+
+815
+cur¥©
+ =
+Þd¥©
+;
+
+816 
+Ãxt_cmd
+;
+
+817 
+O_NEXT
+:
+
+818 #ifdeà
+JMPCLOBBER
+
+
+819
+Ãw¥
+ = -2;
+
+820
+»t¡r
+ = &
+¡r_undef
+;
+
+822 
+Ãxt_™”
+;
+
+823 
+O_REDO
+:
+
+824 #ifdeà
+DEBUGGING
+
+
+825
+dËv–
+ =
+ÞddËv–
+;
+
+827 #ifdeà
+JMPCLOBBER
+
+
+828
+Ãw¥
+ = -2;
+
+829
+»t¡r
+ = &
+¡r_undef
+;
+
+831 
+do™
+;
+
+834
+Þd¥©
+ =
+cur¥©
+;
+
+835
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+836 #ifdeà
+DEBUGGING
+
+
+837
+ÞddËv–
+ =
+dËv–
+;
+
+839
+do™
+:
+
+840 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+841 #ifdeà
+DEBUGGING
+
+
+842 ià(
+debug
+) {
+
+843
+debÇme
+[
+dËv–
+] = 't';
+
+844
+debd–im
+[
+dËv–
+] = '_';
+
+845 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+846
+ `grow_dËv–
+();
+
+849
+Ãw¥
+ =
+ `cmd_exec
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+850
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+851
+»t¡r
+ =
+[
+Ãw¥
+];
+
+856
+Ãxt_™”
+:
+
+857 #ifdeà
+DEBUGGING
+
+
+858
+dËv–
+ =
+ÞddËv–
+;
+
+860 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+) {
+
+861 #ifdeà
+DEBUGGING
+
+
+862 ià(
+debug
+) {
+
+863
+debÇme
+[
+dËv–
+] = 'a';
+
+864
+debd–im
+[
+dËv–
+] = '_';
+
+865 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+866
+ `grow_dËv–
+();
+
+869
+Ãw¥
+ =
+ `cmd_exec
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+,
+gimme
+ && (
+cmdæags
+ &
+CF_TERM
+),
+);
+
+870
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+871
+»t¡r
+ =
+[
+Ãw¥
+];
+
+873
+fšish_whže
+:
+
+874
+cur¥©
+ =
+Þd¥©
+;
+
+875 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+Þd§ve
+) {
+
+876 ià(
+cmdæags
+ &
+CF_TERM
+) {
+
+877 
+m©ch
+ =
+ + 1; m©ch <ð
+Ãw¥
+; match++)
+
+878
+[
+m©ch
+] =
+ `¡r_mÜl
+(st[match]);
+
+879
+»t¡r
+ =
+[
+Ãw¥
+];
+
+881
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+883 #ifdeà
+DEBUGGING
+
+
+884
+dËv–
+ =
+ÞddËv–
+ - 1;
+
+886 ià(
+cmd
+->
+c_ty³
+ !ð
+C_BLOCK
+)
+
+887 
+uÁž_loÝ
+;
+
+889 ià(
+cmdæags
+ &
+CF_LOOP
+) {
+
+890
+cmdæags
+ |ð
+CF_COND
+;
+
+891 #ifdeà
+DEBUGGING
+
+
+892
+dËv–
+ =
+’tdËv–
+;
+
+894 
+uÁž_loÝ
+;
+
+896
+Ãxt_cmd
+:
+
+897 ià(
+cmdæags
+ &
+CF_ONCE
+) {
+
+898 #ifdeà
+DEBUGGING
+
+
+899 ià(
+debug
+ & 4) {
+
+900
+tmps
+ =
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+;
+
+901
+ `deb
+("(PÝpšg†ab– #%d %s)\n",
+loÝ_±r
+,
+tmps
+ ?mps : "");
+
+904
+loÝ_±r
+--;
+
+905 ià((
+cmdæags
+ &
+CF_OPTIMIZE
+è=ð
+CFT_ARRAY
+ &&
+
+906
+§ve¡ack
+->
+¬y_fžl
+ >
+¬yÝt§ve
+)
+
+907
+ `»¡Ü–i¡
+(
+¬yÝt§ve
+);
+
+909
+cmd
+ = cmd->
+c_Ãxt
+;
+
+910 
+ž_»cursiÚ_’Œy
+;
+
+911
+ }
+}
+
+913 #ifdeà
+DEBUGGING
+
+
+914 #iâdeà
+I_VARARGS
+
+
+916
+ $deb
+(
+·t
+,
+a1
+,
+a2
+,
+a3
+,
+a4
+,
+a5
+,
+a6
+,
+a7
+,
+a8
+)
+
+917 *
+·t
+;
+
+919 
+i
+;
+
+921
+ `årštf
+(
+¡d”r
+,"%-4ld",()
+curcmd
+->
+c_lše
+);
+
+922 
+i
+=0; i<
+dËv–
+; i++)
+
+923
+ `årštf
+(
+¡d”r
+,"%c%ø",
+debÇme
+[
+i
+],
+debd–im
+[i]);
+
+924
+ `årštf
+(
+¡d”r
+,
+·t
+,
+a1
+,
+a2
+,
+a3
+,
+a4
+,
+a5
+,
+a6
+,
+a7
+,
+a8
+);
+
+925
+ }
+}
+
+928
+ $deb
+(
+va_®i¡
+)
+
+929
+va_dþ
+
+
+931
+va_li¡
+
+¬gs
+;
+
+932 *
+·t
+;
+
+933 
+i
+;
+
+935
+ `va_¡¬t
+(
+¬gs
+);
+
+936
+ `årštf
+(
+¡d”r
+,"%-4ld",()
+curcmd
+->
+c_lše
+);
+
+937 
+i
+=0; i<
+dËv–
+; i++)
+
+938
+ `årštf
+(
+¡d”r
+,"%c%ø",
+debÇme
+[
+i
+],
+debd–im
+[i]);
+
+940
+·t
+ =
+ `va_¬g
+(
+¬gs
+, *);
+
+941 (è
+ `vårštf
+(
+¡d”r
+,
+·t
+,
+¬gs
+);
+
+942
+ `va_’d
+¬gs
+ );
+
+943
+ }
+}
+
+947
+ $cÝyÝt
+(
+cmd
+,
+which
+)
+
+948 
+CMD
+ *
+cmd
+;
+
+949 
+CMD
+ *
+which
+;
+
+951
+cmd
+->
+c_æags
+ &ð
+CF_ONCE
+|
+CF_COND
+|
+CF_LOOP
+;
+
+952
+cmd
+->
+c_æags
+ |ð
+which
+->c_flags;
+
+953
+cmd
+->
+c_shÜt
+ =
+which
+->c_short;
+
+954
+cmd
+->
+c_¦’
+ =
+which
+->c_slen;
+
+955
+cmd
+->
+c_¡ab
+ =
+which
+->c_stab;
+
+956 
+cmd
+->
+c_æags
+;
+
+957
+ }
+}
+
+959
+ARRAY
+ *
+
+960
+ $§v—ry
+(
+¡ab
+)
+
+961
+STAB
+ *
+¡ab
+;
+
+963 
+STR
+ *
+¡r
+;
+
+965
+¡r
+ =
+ `SŒ_Ãw
+(10,0);
+
+966
+¡r
+->
+¡r_¡©e
+ =
+SS_SARY
+;
+
+967
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+ =
+¡ab
+;
+
+968 ià(
+¡r
+->
+¡r_±r
+) {
+
+969
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+970
+¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+971
+¡r
+->
+¡r_Ën
+ = 0;
+
+973
+¡r
+->
+¡r_±r
+ = (*)
+ `¡ab_¬¿y
+(
+¡ab
+);
+
+974 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+975
+ `¡ab_x¬¿y
+(
+¡ab
+èð
+ `NuÎ
+(
+ARRAY
+*);
+
+976 
+ `¡ab_x¬¿y
+(
+ `¯dd
+(
+¡ab
+));
+
+977
+ }
+}
+
+979
+HASH
+ *
+
+980
+ $§vehash
+(
+¡ab
+)
+
+981
+STAB
+ *
+¡ab
+;
+
+983 
+STR
+ *
+¡r
+;
+
+985
+¡r
+ =
+ `SŒ_Ãw
+(11,0);
+
+986
+¡r
+->
+¡r_¡©e
+ =
+SS_SHASH
+;
+
+987
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+ =
+¡ab
+;
+
+988 ià(
+¡r
+->
+¡r_±r
+) {
+
+989
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+990
+¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+991
+¡r
+->
+¡r_Ën
+ = 0;
+
+993
+¡r
+->
+¡r_±r
+ = (*)
+ `¡ab_hash
+(
+¡ab
+);
+
+994 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+995
+ `¡ab_xhash
+(
+¡ab
+èð
+ `NuÎ
+(
+HASH
+*);
+
+996 
+ `¡ab_xhash
+(
+ `hadd
+(
+¡ab
+));
+
+997
+ }
+}
+
+1000
+ $§ve™em
+(
+™em
+)
+
+1001 
+STR
+ *
+™em
+;
+
+1003 
+STR
+ *
+¡r
+;
+
+1005 ()
+ `­ush
+(
+§ve¡ack
+,
+™em
+);
+
+1006
+¡r
+ =
+ `SŒ_Ãw
+(12,0);
+
+1007
+ `¡r_s£t
+(
+¡r
+,
+™em
+);
+
+1008 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+1009
+ }
+}
+
+1012
+ $§vešt
+(
+)
+
+1013 *
+;
+
+1015 
+STR
+ *
+¡r
+;
+
+1017
+¡r
+ =
+ `SŒ_Ãw
+(13,0);
+
+1018
+¡r
+->
+¡r_¡©e
+ =
+SS_SINT
+;
+
+1019
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+ = ()*
+;
+
+1020 ià(
+¡r
+->
+¡r_±r
+) {
+
+1021
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+1022
+¡r
+->
+¡r_Ën
+ = 0;
+
+1024
+¡r
+->
+¡r_±r
+ = (*)
+;
+
+1025 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+1026
+ }
+}
+
+1029
+ $§v–Úg
+(
+lÚgp
+)
+
+1030 *
+lÚgp
+;
+
+1032 
+STR
+ *
+¡r
+;
+
+1034
+¡r
+ =
+ `SŒ_Ãw
+(14,0);
+
+1035
+¡r
+->
+¡r_¡©e
+ =
+SS_SLONG
+;
+
+1036
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+ = *
+lÚgp
+;
+
+1037 ià(
+¡r
+->
+¡r_±r
+) {
+
+1038
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+1039
+¡r
+->
+¡r_Ën
+ = 0;
+
+1041
+¡r
+->
+¡r_±r
+ = (*)
+lÚgp
+;
+
+1042 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+1043
+ }
+}
+
+1046
+ $§ve¥Œ
+(
+¥Œ
+)
+
+1047
+STR
+ **
+¥Œ
+;
+
+1049 
+STR
+ *
+¡r
+;
+
+1051
+¡r
+ =
+ `SŒ_Ãw
+(15,0);
+
+1052
+¡r
+->
+¡r_¡©e
+ =
+SS_SSTRP
+;
+
+1053
+¡r
+->
+¡r_magic
+ = *
+¥Œ
+;
+
+1054 ià(
+¡r
+->
+¡r_±r
+) {
+
+1055
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+1056
+¡r
+->
+¡r_Ën
+ = 0;
+
+1058
+¡r
+->
+¡r_±r
+ = (*)
+¥Œ
+;
+
+1059 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+1060
+ }
+}
+
+1063
+ $§v’o¡ab
+(
+¡ab
+)
+
+1064
+STAB
+ *
+¡ab
+;
+
+1066 
+STR
+ *
+¡r
+;
+
+1068
+¡r
+ =
+ `SŒ_Ãw
+(16,0);
+
+1069
+¡r
+->
+¡r_¡©e
+ =
+SS_SNSTAB
+;
+
+1070
+¡r
+->
+¡r_magic
+ = (
+STR
+*)
+¡ab
+;
+
+1071 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+1072
+ }
+}
+
+1075
+ $§veh±r
+(
+h±r
+)
+
+1076
+HASH
+ **
+h±r
+;
+
+1078 
+STR
+ *
+¡r
+;
+
+1080
+¡r
+ =
+ `SŒ_Ãw
+(17,0);
+
+1081
+¡r
+->
+¡r_¡©e
+ =
+SS_SHPTR
+;
+
+1082
+¡r
+->
+¡r_u
+.
+¡r_hash
+ = *
+h±r
+;
+
+1083 ià(
+¡r
+->
+¡r_±r
+) {
+
+1084
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+1085
+¡r
+->
+¡r_Ën
+ = 0;
+
+1087
+¡r
+->
+¡r_±r
+ = (*)
+h±r
+;
+
+1088 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+1089
+ }
+}
+
+1092
+ $§v—±r
+(
+­Œ
+)
+
+1093
+ARRAY
+ **
+­Œ
+;
+
+1095 
+STR
+ *
+¡r
+;
+
+1097
+¡r
+ =
+ `SŒ_Ãw
+(17,0);
+
+1098
+¡r
+->
+¡r_¡©e
+ =
+SS_SAPTR
+;
+
+1099
+¡r
+->
+¡r_u
+.
+¡r_¬¿y
+ = *
+­Œ
+;
+
+1100 ià(
+¡r
+->
+¡r_±r
+) {
+
+1101
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+1102
+¡r
+->
+¡r_Ën
+ = 0;
+
+1104
+¡r
+->
+¡r_±r
+ = (*)
+­Œ
+;
+
+1105 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+1106
+ }
+}
+
+1109
+ $§v–i¡
+(
+§rg
+,
+max§rg
+)
+
+1110 
+STR
+ **
+§rg
+;
+
+1111 
+max§rg
+;
+
+1113 
+STR
+ *
+¡r
+;
+
+1114 
+i
+;
+
+1116 
+i
+ = 1; i <ð
+max§rg
+; i++) {
+
+1117 ()
+ `­ush
+(
+§ve¡ack
+,
+§rg
+[
+i
+]);
+
+1118
+¡r
+ =
+ `SŒ_Ãw
+(18,0);
+
+1119
+ `¡r_s£t
+(
+¡r
+,
+§rg
+[
+i
+]);
+
+1120 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+1121
+§rg
+[
+i
+]->
+¡r_u
+.
+¡r_u£ful
+ = -1;
+
+1123
+ }
+}
+
+1126
+ $»¡Ü–i¡
+(
+ba£
+)
+
+1127 
+ba£
+;
+
+1129 
+STR
+ *
+¡r
+;
+
+1130 
+STR
+ *
+v®ue
+;
+
+1131 
+STAB
+ *
+¡ab
+;
+
+1133 ià(
+ba£
+ < -1)
+
+1134
+ `çl
+("panic: corrupt saved stack index");
+
+1135 
+§ve¡ack
+->
+¬y_fžl
+ >
+ba£
+) {
+
+1136
+v®ue
+ =
+ `­Ý
+(
+§ve¡ack
+);
+
+1137 
+v®ue
+->
+¡r_¡©e
+) {
+
+1138 
+SS_NORM
+:
+
+1139 
+SS_INCR
+:
+
+1140
+¡r
+ =
+ `­Ý
+(
+§ve¡ack
+);
+
+1141
+ `¡r_»¶aû
+(
+¡r
+,
+v®ue
+);
+
+1142
+ `STABSET
+(
+¡r
+);
+
+1144 
+SS_SARY
+:
+
+1145
+¡ab
+ =
+v®ue
+->
+¡r_u
+.
+¡r_¡ab
+;
+
+1146
+ `aä“
+(
+ `¡ab_x¬¿y
+(
+¡ab
+));
+
+1147
+ `¡ab_x¬¿y
+(
+¡ab
+èð(
+ARRAY
+*)
+v®ue
+->
+¡r_±r
+;
+
+1148
+v®ue
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1149
+ `¡r_ä“
+(
+v®ue
+);
+
+1151 
+SS_SHASH
+:
+
+1152
+¡ab
+ =
+v®ue
+->
+¡r_u
+.
+¡r_¡ab
+;
+
+1153 ()
+ `hä“
+(
+ `¡ab_xhash
+(
+¡ab
+),
+FALSE
+);
+
+1154
+ `¡ab_xhash
+(
+¡ab
+èð(
+HASH
+*)
+v®ue
+->
+¡r_±r
+;
+
+1155
+v®ue
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1156
+ `¡r_ä“
+(
+v®ue
+);
+
+1158 
+SS_SINT
+:
+
+1159 *((*)
+v®ue
+->
+¡r_±r
+èð()v®ue->
+¡r_u
+.
+¡r_u£ful
+;
+
+1160
+v®ue
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1161
+ `¡r_ä“
+(
+v®ue
+);
+
+1163 
+SS_SLONG
+:
+
+1164 *((*)
+v®ue
+->
+¡r_±r
+èðv®ue->
+¡r_u
+.
+¡r_u£ful
+;
+
+1165
+v®ue
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1166
+ `¡r_ä“
+(
+v®ue
+);
+
+1168 
+SS_SSTRP
+:
+
+1169 *((
+STR
+**)
+v®ue
+->
+¡r_±r
+èðv®ue->
+¡r_magic
+;
+
+1170
+v®ue
+->
+¡r_magic
+ =
+NuΡr
+;
+
+1171
+v®ue
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1172
+ `¡r_ä“
+(
+v®ue
+);
+
+1174 
+SS_SHPTR
+:
+
+1175 *((
+HASH
+**)
+v®ue
+->
+¡r_±r
+èðv®ue->
+¡r_u
+.
+¡r_hash
+;
+
+1176
+v®ue
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1177
+ `¡r_ä“
+(
+v®ue
+);
+
+1179 
+SS_SAPTR
+:
+
+1180 *((
+ARRAY
+**)
+v®ue
+->
+¡r_±r
+èðv®ue->
+¡r_u
+.
+¡r_¬¿y
+;
+
+1181
+v®ue
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1182
+ `¡r_ä“
+(
+v®ue
+);
+
+1184 
+SS_SNSTAB
+:
+
+1185
+¡ab
+ = (
+STAB
+*)
+v®ue
+->
+¡r_magic
+;
+
+1186
+v®ue
+->
+¡r_magic
+ =
+NuΡr
+;
+
+1187 ()
+ `¡ab_þ—r
+(
+¡ab
+);
+
+1188
+ `¡r_ä“
+(
+v®ue
+);
+
+1190 
+SS_SCSV
+:
+
+1192
+CSV
+ *
+csv
+ = (CSV*è
+v®ue
+->
+¡r_±r
+;
+
+1194
+curcmd
+ =
+csv
+->curcmd;
+
+1195
+curcsv
+ =
+csv
+->curcsv;
+
+1196
+csv
+->
+sub
+->
+d•th
+ = csv->depth;
+
+1197 ià(
+csv
+->
+ha§rgs
+) {
+
+1198
+ `aä“
+(
+csv
+->
+¬g¬¿y
+);
+
+1199
+ `¡ab_x¬¿y
+(
+def¡ab
+èð
+csv
+->
+§v—¼ay
+;
+
+1201
+ `¡r_ä“
+(
+v®ue
+);
+
+1205
+ `çl
+("panic:„estorelist inconsistency");
+
+1208
+ }
+}
+
+1210 #ifdeà
+DEBUGGING
+
+
+1212
+ $grow_dËv–
+()
+
+1214
+dlmax
+ += 128;
+
+1215
+ `R’ew
+(
+debÇme
+,
+dlmax
+, );
+
+1216
+ `R’ew
+(
+debd–im
+,
+dlmax
+, );
+
+1217
+ }
+}
+
+ @cmd.h
+
+14 
+ #C_NULL
+ 0
+
+ )
+
+15 
+ #C_IF
+ 1
+
+ )
+
+16 
+ #C_ELSE
+ 2
+
+ )
+
+17 
+ #C_WHILE
+ 3
+
+ )
+
+18 
+ #C_BLOCK
+ 4
+
+ )
+
+19 
+ #C_EXPR
+ 5
+
+ )
+
+20 
+ #C_NEXT
+ 6
+
+ )
+
+21 
+ #C_ELSIF
+ 7
+
+ )
+
+22 
+ #C_CSWITCH
+ 8
+
+ )
+
+23 
+ #C_NSWITCH
+ 9
+
+ )
+
+25 #ifdeà
+DEBUGGING
+
+
+26 #iâdeà
+DOINIT
+
+
+27
+*
+cmdÇme
+[];
+
+29 *
+ gcmdÇme
+[] = {
+
+45 
+ #CF_OPTIMIZE
+ 077
+
+ )
+
+46 
+ #CF_FIRSTNEG
+ 0100
+
+ )
+
+47 
+ #CF_NESURE
+ 0200
+
+ )
+
+48 
+ #CF_EQSURE
+ 0400
+
+ )
+
+49 
+ #CF_COND
+ 01000
+
+ )
+
+51 
+ #CF_LOOP
+ 02000
+
+ )
+
+52 
+ #CF_INVERT
+ 04000
+
+ )
+
+53 
+ #CF_ONCE
+ 010000
+
+ )
+
+54 
+ #CF_FLIP
+ 020000
+
+ )
+
+55 
+ #CF_TERM
+ 040000
+
+ )
+
+56 
+ #CF_DBSUB
+ 0100000
+
+ )
+
+58 
+ #CFT_FALSE
+ 0
+
+ )
+
+59 
+ #CFT_TRUE
+ 1
+
+ )
+
+60 
+ #CFT_REG
+ 2
+
+ )
+
+61 
+ #CFT_ANCHOR
+ 3
+
+ )
+
+62 
+ #CFT_STROP
+ 4
+
+ )
+
+63 
+ #CFT_SCAN
+ 5
+
+ )
+
+64 
+ #CFT_GETS
+ 6
+
+ )
+
+65 
+ #CFT_EVAL
+ 7
+
+ )
+
+66 
+ #CFT_UNFLIP
+ 8
+
+ )
+
+67 
+ #CFT_CHOP
+ 9
+
+ )
+
+68 
+ #CFT_ARRAY
+ 10
+
+ )
+
+69 
+ #CFT_INDGETS
+ 11
+
+ )
+
+70 
+ #CFT_NUMOP
+ 12
+
+ )
+
+71 
+ #CFT_CCLASS
+ 13
+
+ )
+
+72 
+ #CFT_D0
+ 14
+
+ )
+
+73 
+ #CFT_D1
+ 15
+
+ )
+
+75 #ifdeà
+DEBUGGING
+
+
+76 #iâdeà
+DOINIT
+
+
+77
+*
+cmdÝt
+[];
+
+79 *
+ gcmdÝt
+[] = {
+
+99 
+ sacmd
+ {
+
+100
+STAB
+ *
+ mac_¡ab
+;
+
+101
+ARG
+ *
+ mac_ex´
+;
+
+104 
+ sccmd
+ {
+
+105
+CMD
+ *
+ mcc_Œue
+;
+
+106
+CMD
+ *
+ mcc_®t
+;
+
+109 
+ sscmd
+ {
+
+110
+CMD
+ **
+ msc_Ãxt
+;
+
+111 
+ msc_off£t
+;
+
+112 
+ msc_max
+;
+
+115 
+ scmd
+ {
+
+116
+CMD
+ *
+ mc_Ãxt
+;
+
+117
+ARG
+ *
+ mc_ex´
+;
+
+118
+CMD
+ *
+ mc_h—d
+;
+
+119
+STR
+ *
+ mc_shÜt
+;
+
+120
+STAB
+ *
+ mc_¡ab
+;
+
+121
+SPAT
+ *
+ mc_¥©
+;
+
+122 *
+ mc_Ïb–
+;
+
+123 
+ uucmd
+ {
+
+124 
+acmd
+
+ macmd
+;
+
+125 
+ccmd
+
+ mccmd
+;
+
+126 
+scmd
+
+ mscmd
+;
+
+127 }
+ mucmd
+;
+
+128 
+ mc_¦’
+;
+
+129
+VOLATILE
+ 
+ mc_æags
+;
+
+130
+HASH
+ *
+ mc_¡ash
+;
+
+131
+STAB
+ *
+ mc_fže¡ab
+;
+
+132
+lše_t
+
+ mc_lše
+;
+
+133 
+ mc_ty³
+;
+
+136 
+ #NuÎcmd
+
+ `NuÎ
+(
+CMD
+*)
+
+ )
+
+137 
+ #NuÎcsv
+
+ `NuÎ
+(
+CSV
+*)
+
+ )
+
+139
+EXT
+
+CMD
+ *
+VOLATILE
+
+maš_roÙ
+
+INIT
+(
+NuÎcmd
+);
+
+140
+EXT
+
+CMD
+ *
+VOLATILE
+
+ev®_roÙ
+
+INIT
+(
+NuÎcmd
+);
+
+142
+EXT
+
+CMD
+
+ gcompžšg
+;
+
+143
+EXT
+
+CMD
+ *
+VOLATILE
+
+curcmd
+
+INIT
+(&
+compžšg
+);
+
+144
+EXT
+
+CSV
+ *
+VOLATILE
+
+curcsv
+
+INIT
+(
+NuÎcsv
+);
+
+146 
+ sÿΧve
+ {
+
+147
+SUBR
+ *
+ msub
+;
+
+148
+STAB
+ *
+ m¡ab
+;
+
+149
+CSV
+ *
+ mcurcsv
+;
+
+150
+CMD
+ *
+ mcurcmd
+;
+
+151
+ARRAY
+ *
+ m§v—¼ay
+;
+
+152
+ARRAY
+ *
+ m¬g¬¿y
+;
+
+153 
+ md•th
+;
+
+154 
+ mwª¼ay
+;
+
+155 
+ mha§rgs
+;
+
+158 
+ scompcmd
+ {
+
+159
+CMD
+ *
+ mcomp_Œue
+;
+
+160
+CMD
+ *
+ mcomp_®t
+;
+
+163 
+Ýt_¬g
+();
+
+164 
+ev®¡©ic
+();
+
+165 
+cmd_exec
+();
+
+ @config.h
+
+1 #iâdeà
+cÚfig_h
+
+
+2 
+ #cÚfig_h
+
+
+ )
+
+32 
+ #ALIGNBYTES
+ 8
+
+ )
+
+39 
+ #BIN
+ "/u¤/loÿl/bš"
+
+ )
+
+45 
+ #BYTEORDER
+ 0x4321
+
+ )
+
+58 
+ #CPPSTDIN
+ "/u¤/loÿl/lib/gcc-ýp"
+
+ )
+
+59 
+ #CPPMINUS
+ ""
+
+ )
+
+66 
+ #HAS_BCMP
+
+
+ )
+
+72 
+ #HAS_BCOPY
+
+
+ )
+
+79 
+ #HAS_BZERO
+
+
+ )
+
+92 
+ #CASTNEGFLOAT
+
+
+ )
+
+93 
+ #CASTFLAGS
+ 0
+
+ )
+
+101 
+ #CHARSPRINTF
+
+
+ )
+
+113 
+ #HAS_CRYPT
+
+
+ )
+
+140 
+ #HAS_DUP2
+
+
+ )
+
+146 
+ #HAS_FCHMOD
+
+
+ )
+
+152 
+ #HAS_FCHOWN
+
+
+ )
+
+158 
+ #HAS_FCNTL
+
+
+ )
+
+164 
+ #FLEXFILENAMES
+
+
+ )
+
+170 
+ #HAS_FLOCK
+
+
+ )
+
+177 
+ #HAS_GETGROUPS
+
+
+ )
+
+189 
+ #HAS_GETPGRP
+
+
+ )
+
+201 
+ #HAS_GETPRIORITY
+
+
+ )
+
+219 
+ #HAS_HTONS
+
+
+ )
+
+220 
+ #HAS_HTONL
+
+
+ )
+
+221 
+ #HAS_NTOHS
+
+
+ )
+
+222 
+ #HAS_NTOHL
+
+
+ )
+
+240 
+ #HAS_KILLPG
+
+
+ )
+
+246 
+ #HAS_LSTAT
+
+
+ )
+
+252 
+ #HAS_MEMCMP
+
+
+ )
+
+259 
+ #HAS_MEMCPY
+
+
+ )
+
+266 
+ #HAS_MKDIR
+
+
+ )
+
+272 
+ #HAS_MSG
+
+
+ )
+
+278 
+ #HAS_MSGCTL
+
+
+ )
+
+284 
+ #HAS_MSGGET
+
+
+ )
+
+290 
+ #HAS_MSGRCV
+
+
+ )
+
+296 
+ #HAS_MSGSND
+
+
+ )
+
+314 
+ #HAS_OPEN3
+
+
+ )
+
+320 
+ #HAS_READDIR
+
+
+ )
+
+327 
+ #HAS_RENAME
+
+
+ )
+
+334 
+ #HAS_RMDIR
+
+
+ )
+
+340 
+ #HAS_SELECT
+
+
+ )
+
+346 
+ #HAS_SEM
+
+
+ )
+
+352 
+ #HAS_SEMCTL
+
+
+ )
+
+358 
+ #HAS_SEMGET
+
+
+ )
+
+364 
+ #HAS_SEMOP
+
+
+ )
+
+370 
+ #HAS_SETEGID
+
+
+ )
+
+376 
+ #HAS_SETEUID
+
+
+ )
+
+382 
+ #HAS_SETPGRP
+
+
+ )
+
+394 
+ #HAS_SETPRIORITY
+
+
+ )
+
+405 
+ #HAS_SETREGID
+
+
+ )
+
+417 
+ #HAS_SETREUID
+
+
+ )
+
+436 
+ #HAS_SHM
+
+
+ )
+
+442 
+ #HAS_SHMAT
+
+
+ )
+
+448 
+ #HAS_SHMCTL
+
+
+ )
+
+454 
+ #HAS_SHMDT
+
+
+ )
+
+460 
+ #HAS_SHMGET
+
+
+ )
+
+474 
+ #HAS_SOCKET
+
+
+ )
+
+476 
+ #HAS_SOCKETPAIR
+
+
+ )
+
+484 
+ #STATBLOCKS
+
+
+ )
+
+497 
+ #STRUCTCOPY
+
+
+ )
+
+509 
+ #HAS_SYMLINK
+
+
+ )
+
+515 
+ #HAS_SYSCALL
+
+
+ )
+
+521 
+ #HAS_TRUNCATE
+
+
+ )
+
+526 
+ #HAS_VFORK
+
+
+ )
+
+540 
+ #VOIDSIG
+
+
+ )
+
+541 
+ #TO_SIGNAL
+ 
+
+ )
+
+547 
+ #HASVOLATILE
+
+
+ )
+
+560 
+ #HAS_VPRINTF
+
+
+ )
+
+561 
+ #CHARVSPRINTF
+
+
+ )
+
+571 
+ #HAS_WAITPID
+
+
+ )
+
+577 
+ #GIDTYPE
+
+gid_t
+
+
+ )
+
+583 
+ #GROUPSTYPE
+ 
+
+ )
+
+600 
+ #I_GRP
+
+
+ )
+
+610 
+ #I_NETINET_IN
+
+
+ )
+
+641 
+ #I_PWD
+
+
+ )
+
+652 
+ #I_SYS_FILE
+
+
+ )
+
+658 
+ #I_SYSIOCTL
+
+
+ )
+
+673 
+ #I_TIME
+
+
+ )
+
+674 
+ #I_SYS_TIME
+
+
+ )
+
+682 
+ #I_UTIME
+
+
+ )
+
+700 
+ #INTSIZE
+ 4
+
+ )
+
+727 
+ #I_DIRENT
+
+
+ )
+
+737 
+ #MALLOCPTRTYPE
+ 
+
+ )
+
+744 
+ #RANDBITS
+ 31
+
+ )
+
+751 
+ #SCRIPTDIR
+ "/u¤/loÿl/bš"
+
+ )
+
+756 
+ #SIG_NAME
+ "ZERO","HUP","INT","QUIT","ILL","TRAP","ABRT","EMT","FPE","KILL","BUS","SEGV","SYS","PIPE","ALRM","TERM","URG","STOP","TSTP","CONT","CLD","TTIN","TTOU","IO","XCPU","XFSZ","VTALRM","PROF","WINCH","LOST","USR1","USR2"
+
+ )
+
+762 
+ #STDCHAR
+ 
+
+ )
+
+768 
+ #UIDTYPE
+
+uid_t
+
+
+ )
+
+801 #iâdeà
+VOIDWANT
+
+
+802 
+ #VOIDWANT
+ 7
+
+ )
+
+804 
+ #VOIDHAVE
+ 7
+
+ )
+
+805 #ià(
+VOIDHAVE
+ &
+VOIDWANT
+) != VOIDWANT
+
+806 
+
+ )
+
+807 
+ #VOID
+
+
+ )
+
+808 
+ #VOIDP
+ (*)
+
+ )
+
+809 
+ #M_VOID
+
+
+ )
+
+811 
+ #VOID
+ 
+
+ )
+
+812 
+ #VOIDP
+ (*)
+
+ )
+
+821 
+ #PRIVLIB
+ "/u¤/loÿl/lib/³¾"
+
+ )
+
+ @cons.c
+
+14 
+ ~"EXTERN.h
+"
+
+15 
+ ~"³¾.h
+"
+
+16 
+ ~"³¾y.h
+"
+
+18
+*
+tok’ame
+[];
+
+19
+
+yych¬
+;
+
+21 
+cmd_to§ve
+();
+
+22 
+¬g_to§ve
+();
+
+23 
+¥©_to§ve
+();
+
+25 
+boÞ
+
+ g§w_»tuº
+;
+
+27
+SUBR
+ *
+
+28
+ $make_sub
+(
+Çme
+,
+cmd
+)
+
+29 *
+Çme
+;
+
+30
+CMD
+ *
+cmd
+;
+
+32 
+SUBR
+ *
+sub
+;
+
+33
+STAB
+ *
+¡ab
+ =
+ `¡ab’t
+(
+Çme
+,
+TRUE
+);
+
+35
+ `Newz
+(101,
+sub
+,1,
+SUBR
+);
+
+36 ià(
+ `¡ab_sub
+(
+¡ab
+)) {
+
+37 ià(
+dow¬n
+) {
+
+38
+CMD
+ *
+Þdcurcmd
+ =
+curcmd
+;
+
+40 ià(
+cmd
+)
+
+41
+curcmd
+ =
+cmd
+;
+
+42
+ `w¬n
+("Subroutš% »defšed",
+Çme
+);
+
+43
+curcmd
+ =
+Þdcurcmd
+;
+
+45 ià(
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+) {
+
+46
+ `cmd_ä“
+(
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+);
+
+47
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+ =
+NuÎcmd
+;
+
+48
+ `aä“
+(
+ `¡ab_sub
+(
+¡ab
+)->
+to§ve
+);
+
+50
+ `Saãä“
+(
+ `¡ab_sub
+(
+¡ab
+));
+
+52
+ `¡ab_sub
+(
+¡ab
+èð
+sub
+;
+
+53
+sub
+->
+fže¡ab
+ =
+curcmd
+->
+c_fže¡ab
+;
+
+54
+§w_»tuº
+ =
+FALSE
+;
+
+55
+to§ve
+ =
+ `ªew
+(
+NuΡab
+);
+
+56
+to§ve
+->
+¬y_fžl
+ = 0;
+
+57 ()
+ `cmd_to§ve
+(
+cmd
+,
+FALSE
+);
+
+58
+sub
+->
+to§ve
+ =osave;
+
+59 ià(
+§w_»tuº
+) {
+
+60 
+compcmd
+
+mycompblock
+;
+
+62
+mycompblock
+.
+comp_Œue
+ =
+cmd
+;
+
+63
+mycompblock
+.
+comp_®t
+ =
+NuÎcmd
+;
+
+64
+cmd
+ =
+ `add_Ïb–
+(
+ `§ve¡r
+("_SUB_"),
+ `make_ccmd
+(
+C_BLOCK
+,
+Nuάg
+,
+mycompblock
+));
+
+65
+§w_»tuº
+ =
+FALSE
+;
+
+66
+cmd
+->
+c_æags
+ |ð
+CF_TERM
+;
+
+68
+sub
+->
+cmd
+ = cmd;
+
+69 ià(
+³¾db
+) {
+
+70
+STR
+ *
+¡r
+;
+
+71
+STR
+ *
+tmp¡r
+ =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+73
+ `¥rštf
+(
+buf
+,"%s:%ld",
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+,
+
+74 ()
+sublše
+);
+
+75
+¡r
+ =
+ `¡r_make
+(
+buf
+,0);
+
+76
+ `¡r_ÿt
+(
+¡r
+,"-");
+
+77
+ `¥rštf
+(
+buf
+,"%ld",()
+curcmd
+->
+c_lše
+);
+
+78
+ `¡r_ÿt
+(
+¡r
+,
+buf
+);
+
+79
+Çme
+ =
+ `¡r_g‘
+(
+subÇme
+);
+
+80
+ `¡ab_fuÎÇme
+(
+tmp¡r
+,
+¡ab
+);
+
+81
+ `h¡Üe
+(
+ `¡ab_xhash
+(
+DBsub
+),
+tmp¡r
+->
+¡r_±r
+,mp¡r->
+¡r_cur
+,
+¡r
+, 0);
+
+82
+ `¡r_£t
+(
+subÇme
+,"main");
+
+84
+sublše
+ = 0;
+
+85 
+sub
+;
+
+86
+ }
+}
+
+88
+SUBR
+ *
+
+89
+ $make_usub
+(
+Çme
+,
+ix
+,
+subaddr
+,
+fž’ame
+)
+
+90 *
+Çme
+;
+
+91 
+ix
+;
+
+92 (*
+subaddr
+)();
+
+93 *
+fž’ame
+;
+
+95 
+SUBR
+ *
+sub
+;
+
+96
+STAB
+ *
+¡ab
+ =
+ `¡ab’t
+(
+Çme
+,
+®l¡abs
+);
+
+98 ià(!
+¡ab
+)
+
+99 
+ `NuÎ
+(
+SUBR
+*);
+
+100
+ `Newz
+(101,
+sub
+,1,
+SUBR
+);
+
+101 ià(
+ `¡ab_sub
+(
+¡ab
+)) {
+
+102 ià(
+dow¬n
+)
+
+103
+ `w¬n
+("Subroutš% »defšed",
+Çme
+);
+
+104 ià(
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+) {
+
+105
+ `cmd_ä“
+(
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+);
+
+106
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+ =
+NuÎcmd
+;
+
+107
+ `aä“
+(
+ `¡ab_sub
+(
+¡ab
+)->
+to§ve
+);
+
+109
+ `Saãä“
+(
+ `¡ab_sub
+(
+¡ab
+));
+
+111
+ `¡ab_sub
+(
+¡ab
+èð
+sub
+;
+
+112
+sub
+->
+fže¡ab
+ =
+ `f¡ab
+(
+fž’ame
+);
+
+113
+sub
+->
+u£rsub
+ =
+subaddr
+;
+
+114
+sub
+->
+u£ršdex
+ =
+ix
+;
+
+115 
+sub
+;
+
+116
+ }
+}
+
+118
+ $make_fÜm
+(
+¡ab
+,
+fcmd
+)
+
+119
+STAB
+ *
+¡ab
+;
+
+120
+FCMD
+ *
+fcmd
+;
+
+122 ià(
+ `¡ab_fÜm
+(
+¡ab
+)) {
+
+123
+FCMD
+ *
+tmpfcmd
+;
+
+124
+FCMD
+ *
+Ãxtfcmd
+;
+
+126 
+tmpfcmd
+ =
+ `¡ab_fÜm
+(
+¡ab
+);mpfcmd;mpfcmd =
+Ãxtfcmd
+) {
+
+127
+Ãxtfcmd
+ =
+tmpfcmd
+->
+f_Ãxt
+;
+
+128 ià(
+tmpfcmd
+->
+f_ex´
+)
+
+129
+ `¬g_ä“
+(
+tmpfcmd
+->
+f_ex´
+);
+
+130 ià(
+tmpfcmd
+->
+f_uŬ£d
+)
+
+131
+ `¡r_ä“
+(
+tmpfcmd
+->
+f_uŬ£d
+);
+
+132 ià(
+tmpfcmd
+->
+f_´e
+)
+
+133
+ `Saãä“
+(
+tmpfcmd
+->
+f_´e
+);
+
+134
+ `Saãä“
+(
+tmpfcmd
+);
+
+137
+ `¡ab_fÜm
+(
+¡ab
+èð
+fcmd
+;
+
+138
+ }
+}
+
+140
+CMD
+ *
+
+141
+ $block_h—d
+(
+)
+
+142 
+CMD
+ *
+;
+
+144
+CMD
+ *
+h—d
+;
+
+145 
+Ýt
+;
+
+146 
+Ï¡_Ýt
+ = 0;
+
+147 
+STAB
+ *
+Ï¡_¡ab
+ =
+NuΡab
+;
+
+148 
+couÁ
+ = 0;
+
+149 
+CMD
+ *
+sw™chbeg
+ =
+NuÎcmd
+;
+
+151 ià(
+ =ð
+NuÎcmd
+) {
+
+152 
+;
+
+154
+h—d
+ =
+->
+c_h—d
+;
+
+156 
+ =
+h—d
+;až;až =až->
+c_Ãxt
+) {
+
+159 ià(
+->
+c_ty³
+ =ð
+C_IF
+) {
+
+160 ià(!(
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =až->ucmd.ccmd.cc_®t->
+c_Ãxt
+))
+
+161
+->
+c_æags
+ |ð
+CF_TERM
+;
+
+163 ià(
+->
+c_ty³
+ =ð
+C_EXPR
+) {
+
+164
+ARG
+ *
+¬g
+;
+
+166 ià(
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+)
+
+167
+¬g
+ =
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+;
+
+169
+¬g
+ =
+->
+c_ex´
+;
+
+170 ià(
+¬g
+) {
+
+171 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_RETURN
+)
+
+172
+->
+c_æags
+ |ð
+CF_TERM
+;
+
+173 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&‡rg[1].¬g_ty³ =ð
+A_CMD
+)
+
+174
+->
+c_æags
+ |ð
+CF_TERM
+;
+
+177 ià(!
+->
+c_Ãxt
+)
+
+178
+->
+c_æags
+ |ð
+CF_TERM
+;
+
+180 ià(
+->
+c_ex´
+ && (ž->
+c_æags
+ &
+CF_OPTIMIZE
+è=ð
+CFT_FALSE
+)
+
+181
+ `Ýt_¬g
+(
+,1,až->
+c_ty³
+ =ð
+C_EXPR
+);
+
+184 
+->
+c_æags
+ & (
+CF_OPTIMIZE
+|
+CF_FIRSTNEG
+|
+CF_INVERT
+)) {
+
+185 
+CFT_ANCHOR
+:
+
+186 ià(
+ `¡ab’t
+("*",
+FALSE
+)) {
+
+187
+Ýt
+ = 0;
+
+191 
+CFT_STROP
+:
+
+192
+Ýt
+ = (
+->
+c_æags
+ &
+CF_NESURE
+è?
+CFT_STROP
+ : 0;
+
+194 
+CFT_CCLASS
+:
+
+195
+Ýt
+ =
+CFT_STROP
+;
+
+197 
+CFT_NUMOP
+:
+
+198
+Ýt
+ = (
+->
+c_¦’
+ =ð
+O_NE
+ ? 0 :
+CFT_NUMOP
+);
+
+199 ià((
+->
+c_æags
+&(
+CF_NESURE
+|
+CF_EQSURE
+)) != (CF_NESURE|CF_EQSURE))
+
+200
+Ýt
+ = 0;
+
+203
+Ýt
+ = 0;
+
+205 ià(
+Ýt
+ && o± =ð
+Ï¡_Ýt
+ &&
+->
+c_¡ab
+ =ð
+Ï¡_¡ab
+)
+
+206
+couÁ
+++;
+
+208 ià(
+couÁ
+ >= 3) {
+
+209 ià(
+Ï¡_Ýt
+ =ð
+CFT_NUMOP
+)
+
+210
+ `make_nsw™ch
+(
+sw™chbeg
+,
+couÁ
+);
+
+212
+ `make_csw™ch
+(
+sw™chbeg
+,
+couÁ
+);
+
+214 ià(
+Ýt
+) {
+
+215
+couÁ
+ = 1;
+
+216
+sw™chbeg
+ =
+;
+
+219
+couÁ
+ = 0;
+
+221
+Ï¡_Ýt
+ =
+Ýt
+;
+
+222
+Ï¡_¡ab
+ =
+->
+c_¡ab
+;
+
+224 ià(
+couÁ
+ >= 3) {
+
+225 ià(
+Ï¡_Ýt
+ =ð
+CFT_NUMOP
+)
+
+226
+ `make_nsw™ch
+(
+sw™chbeg
+,
+couÁ
+);
+
+228
+ `make_csw™ch
+(
+sw™chbeg
+,
+couÁ
+);
+
+230 
+h—d
+;
+
+231
+ }
+}
+
+237
+ $make_csw™ch
+(
+h—d
+,
+couÁ
+)
+
+238 
+CMD
+ *
+h—d
+;
+
+239 
+couÁ
+;
+
+241 
+CMD
+ *
+cur
+;
+
+242 
+CMD
+ **
+loc
+;
+
+243 
+i
+;
+
+244 
+mš
+ = 255;
+
+245 
+max
+ = 0;
+
+248
+ `New
+(102,
+cur
+, 1,
+CMD
+);
+
+249 #ifdeà
+STRUCTCOPY
+
+
+250 *
+cur
+ = *
+h—d
+;
+
+252
+ `CÝy
+(
+h—d
+,
+cur
+,1,
+CMD
+);
+
+254
+ `Z”o
+(
+h—d
+,1,
+CMD
+);
+
+255
+h—d
+->
+c_ty³
+ =
+C_CSWITCH
+;
+
+256
+h—d
+->
+c_Ãxt
+ =
+cur
+;
+
+257
+h—d
+->
+c_¡ab
+ =
+cur
+->c_stab;
+
+259
+ `Newz
+(103,
+loc
+,258,
+CMD
+*);
+
+260
+loc
+++;
+
+261 
+couÁ
+--) {
+
+262 ià((
+cur
+->
+c_æags
+ &
+CF_OPTIMIZE
+è=ð
+CFT_CCLASS
+) {
+
+263 
+i
+ = 0; i <= 255; i++) {
+
+264 ià(!
+loc
+[
+i
+] &&
+cur
+->
+c_shÜt
+->
+¡r_±r
+[i>>3] & (1 << (i&7))) {
+
+265
+loc
+[
+i
+] =
+cur
+;
+
+266 ià(
+i
+ <
+mš
+)
+
+267
+mš
+ =
+i
+;
+
+268 ià(
+i
+ >
+max
+)
+
+269
+max
+ =
+i
+;
+
+274
+i
+ = *
+cur
+->
+c_shÜt
+->
+¡r_±r
+ & 255;
+
+275 ià(!
+loc
+[
+i
+]) {
+
+276
+loc
+[
+i
+] =
+cur
+;
+
+277 ià(
+i
+ <
+mš
+)
+
+278
+mš
+ =
+i
+;
+
+279 ià(
+i
+ >
+max
+)
+
+280
+max
+ =
+i
+;
+
+283
+cur
+ = cur->
+c_Ãxt
+;
+
+285
+max
+++;
+
+286 ià(
+mš
+ > 0)
+
+287
+ `CÝy
+(&
+loc
+[
+mš
+],&loc[0],
+max
+ - mš,
+CMD
+*);
+
+288
+loc
+--;
+
+289
+mš
+--;
+
+290
+max
+ -ð
+mš
+;
+
+291 
+i
+ = 0; i <ð
+max
+; i++)
+
+292 ià(!
+loc
+[
+i
+])
+
+293
+loc
+[
+i
+] =
+cur
+;
+
+294
+ `R’ew
+(
+loc
+,
+max
++1,
+CMD
+*);
+
+295
+h—d
+->
+ucmd
+.
+scmd
+.
+sc_off£t
+ =
+mš
+;
+
+296
+h—d
+->
+ucmd
+.
+scmd
+.
+sc_max
+ =
+max
+;
+
+297
+h—d
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+ =
+loc
+;
+
+298
+ }
+}
+
+300
+ $make_nsw™ch
+(
+h—d
+,
+couÁ
+)
+
+301 
+CMD
+ *
+h—d
+;
+
+302 
+couÁ
+;
+
+304 
+CMD
+ *
+cur
+ =
+h—d
+;
+
+305 
+CMD
+ **
+loc
+;
+
+306 
+i
+;
+
+307 
+mš
+ = 32767;
+
+308 
+max
+ = -32768;
+
+309 
+ÜigcouÁ
+ =
+couÁ
+;
+
+310 
+v®ue
+;
+
+311 
+chªged
+;
+
+313 
+couÁ
+--) {
+
+314
+i
+ = ()
+ `¡r_gnum
+(
+cur
+->
+c_shÜt
+);
+
+315
+v®ue
+ = ()
+i
+;
+
+316 ià(
+v®ue
+ !ð
+cur
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_nv®
+)
+
+318
+chªged
+ =
+i
+;
+
+319 ià(
+chªged
+ !ð
+i
+)
+
+321 ià(
+cur
+->
+c_¦’
+ =ð
+O_LE
+)
+
+322
+i
+++;
+
+323 ià(
+cur
+->
+c_¦’
+ =ð
+O_GE
+)
+
+324
+i
+--;
+
+325 ià(
+i
+ <
+mš
+)
+
+326
+mš
+ =
+i
+;
+
+327 ià(
+i
+ >
+max
+)
+
+328
+max
+ =
+i
+;
+
+329
+cur
+ = cur->
+c_Ãxt
+;
+
+331
+couÁ
+ =
+ÜigcouÁ
+;
+
+332 ià(
+max
+ -
+mš
+ >
+couÁ
+ * 2 + 10)
+
+336
+ `New
+(104,
+cur
+, 1,
+CMD
+);
+
+337 #ifdeà
+STRUCTCOPY
+
+
+338 *
+cur
+ = *
+h—d
+;
+
+340
+ `CÝy
+(
+h—d
+,
+cur
+,1,
+CMD
+);
+
+342
+ `Z”o
+(
+h—d
+,1,
+CMD
+);
+
+343
+h—d
+->
+c_ty³
+ =
+C_NSWITCH
+;
+
+344
+h—d
+->
+c_Ãxt
+ =
+cur
+;
+
+345
+h—d
+->
+c_¡ab
+ =
+cur
+->c_stab;
+
+347
+ `Newz
+(105,
+loc
+,
+max
+ -
+mš
+ + 3,
+CMD
+*);
+
+348
+loc
+++;
+
+349
+max
+ -ð
+mš
+;
+
+350
+max
+++;
+
+351 
+couÁ
+--) {
+
+352
+i
+ = ()
+ `¡r_gnum
+(
+cur
+->
+c_shÜt
+);
+
+353
+i
+ -ð
+mš
+;
+
+354 
+cur
+->
+c_¦’
+) {
+
+355 
+O_LE
+:
+
+356
+i
+++;
+
+357 
+O_LT
+:
+
+358 
+i
+--; i >= -1; i--)
+
+359 ià(!
+loc
+[
+i
+])
+
+360
+loc
+[
+i
+] =
+cur
+;
+
+362 
+O_GE
+:
+
+363
+i
+--;
+
+364 
+O_GT
+:
+
+365 
+i
+++; i <ð
+max
+; i++)
+
+366 ià(!
+loc
+[
+i
+])
+
+367
+loc
+[
+i
+] =
+cur
+;
+
+369 
+O_EQ
+:
+
+370 ià(!
+loc
+[
+i
+])
+
+371
+loc
+[
+i
+] =
+cur
+;
+
+374
+cur
+ = cur->
+c_Ãxt
+;
+
+376
+loc
+--;
+
+377
+mš
+--;
+
+378
+max
+++;
+
+379 
+i
+ = 0; i <ð
+max
+; i++)
+
+380 ià(!
+loc
+[
+i
+])
+
+381
+loc
+[
+i
+] =
+cur
+;
+
+382
+h—d
+->
+ucmd
+.
+scmd
+.
+sc_off£t
+ =
+mš
+;
+
+383
+h—d
+->
+ucmd
+.
+scmd
+.
+sc_max
+ =
+max
+;
+
+384
+h—d
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+ =
+loc
+;
+
+385
+ }
+}
+
+387
+CMD
+ *
+
+388
+ $­³nd_lše
+(
+h—d
+,
+)
+
+389 
+CMD
+ *
+h—d
+;
+
+390 
+CMD
+ *
+;
+
+392 ià(
+ =ð
+NuÎcmd
+)
+
+393 
+h—d
+;
+
+394 ià(!
+->
+c_h—d
+)
+
+395
+->
+c_h—d
+ =ail;
+
+396 ià(
+h—d
+ !ð
+NuÎcmd
+) {
+
+397
+ =až->
+c_h—d
+;
+
+398 ià(!
+h—d
+->
+c_h—d
+)
+
+399
+h—d
+->
+c_h—d
+ = head;
+
+400 
+h—d
+->
+c_Ãxt
+) {
+
+401
+h—d
+->
+c_Ãxt
+->
+c_h—d
+ = head->c_head;
+
+402
+h—d
+ = h—d->
+c_Ãxt
+;
+
+404
+h—d
+->
+c_Ãxt
+ =
+;
+
+405
+->
+c_h—d
+ =
+h—d
+->c_head;
+
+407 
+->
+c_Ãxt
+) {
+
+408
+->
+c_Ãxt
+->
+c_h—d
+ =ail->c_head;
+
+409
+ =až->
+c_Ãxt
+;
+
+411 
+;
+
+412
+ }
+}
+
+414
+CMD
+ *
+
+415
+ $dodb
+(
+cur
+)
+
+416
+CMD
+ *
+cur
+;
+
+418 
+CMD
+ *
+cmd
+;
+
+419 
+CMD
+ *
+h—d
+ =
+cur
+->
+c_h—d
+;
+
+420
+STR
+ *
+¡r
+;
+
+422 ià(!
+h—d
+)
+
+423
+h—d
+ =
+cur
+;
+
+424 ià(!
+h—d
+->
+c_lše
+)
+
+425 
+cur
+;
+
+426
+¡r
+ =
+ `aãtch
+(
+ `¡ab_x¬¿y
+(
+curcmd
+->
+c_fže¡ab
+),()
+h—d
+->
+c_lše
+,
+FALSE
+);
+
+427 ià(
+¡r
+ =ð&
+¡r_undef
+ || sŒ->
+¡r_nok
+)
+
+428 
+cur
+;
+
+429
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ = ()
+h—d
+->
+c_lše
+;
+
+430
+¡r
+->
+¡r_nok
+ = 1;
+
+431
+ `Newz
+(106,
+cmd
+,1,
+CMD
+);
+
+432
+ `¡r_magic
+(
+¡r
+,
+curcmd
+->
+c_fže¡ab
+, 0,
+NuÎch
+, 0);
+
+433
+¡r
+->
+¡r_magic
+->
+¡r_u
+.
+¡r_cmd
+ =
+cmd
+;
+
+434
+cmd
+->
+c_ty³
+ =
+C_EXPR
+;
+
+435
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_¡ab
+ =
+NuΡab
+;
+
+436
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ =
+Nuάg
+;
+
+437
+cmd
+->
+c_ex´
+ =
+ `make_Ý
+(
+O_SUBR
+, 2,
+
+438
+ `¡ab2¬g
+(
+A_WORD
+,
+DB¡ab
+),
+
+439
+Nuάg
+,
+
+440
+Nuάg
+);
+
+441
+cmd
+->
+c_æags
+ |ð
+CF_COND
+|
+CF_DBSUB
+|
+CFT_D0
+;
+
+442
+cmd
+->
+c_lše
+ =
+h—d
+->c_line;
+
+443
+cmd
+->
+c_Ïb–
+ =
+h—d
+->c_label;
+
+444
+cmd
+->
+c_fže¡ab
+ =
+curcmd
+->c_filestab;
+
+445
+cmd
+->
+c_¡ash
+ =
+cur¡ash
+;
+
+446 
+ `­³nd_lše
+(
+cmd
+,
+cur
+);
+
+447
+ }
+}
+
+449
+CMD
+ *
+
+450
+ $make_acmd
+(
+ty³
+,
+¡ab
+,
+cÚd
+,
+¬g
+)
+
+451 
+ty³
+;
+
+452
+STAB
+ *
+¡ab
+;
+
+453
+ARG
+ *
+cÚd
+;
+
+454
+ARG
+ *
+¬g
+;
+
+456 
+CMD
+ *
+cmd
+;
+
+458
+ `Newz
+(107,
+cmd
+,1,
+CMD
+);
+
+459
+cmd
+->
+c_ty³
+ =
+ty³
+;
+
+460
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_¡ab
+ =
+¡ab
+;
+
+461
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ =
+¬g
+;
+
+462
+cmd
+->
+c_ex´
+ =
+cÚd
+;
+
+463 ià(
+cÚd
+)
+
+464
+cmd
+->
+c_æags
+ |ð
+CF_COND
+;
+
+465 ià(
+cmdlše
+ =ð
+NOLINE
+)
+
+466
+cmd
+->
+c_lše
+ =
+curcmd
+->c_line;
+
+468
+cmd
+->
+c_lše
+ =
+cmdlše
+;
+
+469
+cmdlše
+ =
+NOLINE
+;
+
+471
+cmd
+->
+c_fže¡ab
+ =
+curcmd
+->c_filestab;
+
+472
+cmd
+->
+c_¡ash
+ =
+cur¡ash
+;
+
+473 ià(
+³¾db
+)
+
+474
+cmd
+ =
+ `dodb
+(cmd);
+
+475 
+cmd
+;
+
+476
+ }
+}
+
+478
+CMD
+ *
+
+479
+ $make_ccmd
+(
+ty³
+,
+¬g
+,
+cblock
+)
+
+480 
+ty³
+;
+
+481
+ARG
+ *
+¬g
+;
+
+482 
+compcmd
+
+cblock
+;
+
+484 
+CMD
+ *
+cmd
+;
+
+486
+ `Newz
+(108,
+cmd
+, 1,
+CMD
+);
+
+487
+cmd
+->
+c_ty³
+ =
+ty³
+;
+
+488
+cmd
+->
+c_ex´
+ =
+¬g
+;
+
+489
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+ =
+cblock
+.
+comp_Œue
+;
+
+490
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+cblock
+.
+comp_®t
+;
+
+491 ià(
+¬g
+)
+
+492
+cmd
+->
+c_æags
+ |ð
+CF_COND
+;
+
+493 ià(
+cmdlše
+ =ð
+NOLINE
+)
+
+494
+cmd
+->
+c_lše
+ =
+curcmd
+->c_line;
+
+496
+cmd
+->
+c_lše
+ =
+cmdlše
+;
+
+497
+cmdlše
+ =
+NOLINE
+;
+
+499
+cmd
+->
+c_fže¡ab
+ =
+curcmd
+->c_filestab;
+
+500
+cmd
+->
+c_¡ash
+ =
+cur¡ash
+;
+
+501 ià(
+³¾db
+)
+
+502
+cmd
+ =
+ `dodb
+(cmd);
+
+503 
+cmd
+;
+
+504
+ }
+}
+
+506
+CMD
+ *
+
+507
+ $make_icmd
+(
+ty³
+,
+¬g
+,
+cblock
+)
+
+508 
+ty³
+;
+
+509
+ARG
+ *
+¬g
+;
+
+510 
+compcmd
+
+cblock
+;
+
+512 
+CMD
+ *
+cmd
+;
+
+513 
+CMD
+ *
+®t
+;
+
+514 
+CMD
+ *
+cur
+;
+
+515 
+CMD
+ *
+h—d
+;
+
+516 
+compcmd
+
+ncblock
+;
+
+518
+ `Newz
+(109,
+cmd
+, 1,
+CMD
+);
+
+519
+h—d
+ =
+cmd
+;
+
+520
+cmd
+->
+c_ty³
+ =
+ty³
+;
+
+521
+cmd
+->
+c_ex´
+ =
+¬g
+;
+
+522
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+ =
+cblock
+.
+comp_Œue
+;
+
+523
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+cblock
+.
+comp_®t
+;
+
+524 ià(
+¬g
+)
+
+525
+cmd
+->
+c_æags
+ |ð
+CF_COND
+;
+
+526 ià(
+cmdlše
+ =ð
+NOLINE
+)
+
+527
+cmd
+->
+c_lše
+ =
+curcmd
+->c_line;
+
+529
+cmd
+->
+c_lše
+ =
+cmdlše
+;
+
+530
+cmdlše
+ =
+NOLINE
+;
+
+532
+cmd
+->
+c_fže¡ab
+ =
+curcmd
+->c_filestab;
+
+533
+cmd
+->
+c_¡ash
+ =
+cur¡ash
+;
+
+534
+cur
+ =
+cmd
+;
+
+535
+®t
+ =
+cblock
+.
+comp_®t
+;
+
+536 
+®t
+ &&‡É->
+c_ty³
+ =ð
+C_ELSIF
+) {
+
+537
+cur
+ =
+®t
+;
+
+538
+®t
+ =‡É->
+ucmd
+.
+ccmd
+.
+cc_®t
+;
+
+540 ià(
+®t
+) {
+
+541
+ncblock
+.
+comp_Œue
+ =
+®t
+;
+
+542
+ncblock
+.
+comp_®t
+ =
+NuÎcmd
+;
+
+543
+®t
+ =
+ `­³nd_lše
+(
+cur
+,
+ `make_ccmd
+(
+C_ELSE
+,
+Nuάg
+,
+ncblock
+));
+
+544
+cur
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+®t
+;
+
+547
+®t
+ =
+cur
+;
+
+549
+cur
+ =
+cmd
+;
+
+550 
+cmd
+) {
+
+551
+cur
+ =
+cmd
+;
+
+552
+cmd
+ =
+cur
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+;
+
+553
+cur
+->
+c_h—d
+ =
+h—d
+;
+
+554 ià(
+cur
+->
+c_ty³
+ =ð
+C_ELSIF
+)
+
+555
+cur
+->
+c_ty³
+ =
+C_IF
+;
+
+556 ià(
+cur
+->
+c_ty³
+ =ð
+C_IF
+)
+
+557
+cur
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+®t
+;
+
+558 ià(
+cur
+ =ð
+®t
+)
+
+560
+cur
+->
+c_Ãxt
+ =
+cmd
+;
+
+562 ià(
+³¾db
+)
+
+563
+cur
+ =
+ `dodb
+(cur);
+
+564 
+cur
+;
+
+565
+ }
+}
+
+568
+ $Ýt_¬g
+(
+cmd
+,
+æÜæÝ
+,
+acmd
+)
+
+569 
+CMD
+ *
+cmd
+;
+
+570 
+æÜæÝ
+;
+
+571 
+acmd
+;
+
+573 
+ARG
+ *
+¬g
+;
+
+574 
+Ýt
+ =
+CFT_EVAL
+;
+
+575 
+su»
+ = 0;
+
+576
+ARG
+ *
+¬g2
+;
+
+577 
+cÚ‹xt
+ = 0;
+
+578 
+æp
+ =
+æÜæÝ
+;
+
+580 ià(!
+cmd
+)
+
+582 ià(!(
+¬g
+ =
+cmd
+->
+c_ex´
+)) {
+
+583
+cmd
+->
+c_æags
+ &ð~
+CF_COND
+;
+
+589 ià(
+acmd
+ && !
+cmd
+->
+ucmd
+.acmd.
+ac_ex´
+ && !(cmd->
+c_æags
+ &
+CF_TERM
+) &&
+
+590 (
+¬g
+->
+¬g_ty³
+ =ð
+O_AND
+ ||‡rg->¬g_ty³ =ð
+O_OR
+) ) {
+
+591
+ `dehoi¡
+(
+¬g
+,1);
+
+592
+¬g
+[2].
+¬g_ty³
+ &ð
+A_MASK
+;
+
+593
+ `dehoi¡
+(
+¬g
+,2);
+
+594
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¬g
+;
+
+595
+cmd
+->
+c_ex´
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+;
+
+596 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_OR
+)
+
+597
+cmd
+->
+c_æags
+ ^ð
+CF_INVERT
+;
+
+598
+¬g
+->
+¬g_Ën
+ = 0;
+
+599
+ `ä“_¬g
+(
+¬g
+);
+
+600
+¬g
+ =
+cmd
+->
+c_ex´
+;
+
+605 ià(!(
+cmd
+->
+c_æags
+ &
+CF_TERM
+)) {
+
+606 
+¬g
+->
+¬g_ty³
+ =ð
+O_NOT
+) {
+
+607
+ `dehoi¡
+(
+¬g
+,1);
+
+608
+cmd
+->
+c_æags
+ ^ð
+CF_INVERT
+;
+
+609
+cmd
+->
+c_ex´
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+;
+
+610
+ `ä“_¬g
+(
+¬g
+);
+
+611
+¬g
+ =
+cmd
+->
+c_ex´
+;
+
+615 ià(!
+¬g
+->
+¬g_Ën
+) {
+
+616
+cmd
+->
+c_æags
+ |ð
+Ýt
+;
+
+622 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_FLIP
+)
+
+623
+cÚ‹xt
+ |= 4;
+
+627
+mÜecÚ‹xt
+:
+
+628 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_AND
+)
+
+629
+cÚ‹xt
+ |= 1;
+
+630 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_OR
+)
+
+631
+cÚ‹xt
+ |= 2;
+
+632 ià(
+cÚ‹xt
+ && (
+¬g
+[
+æp
+].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_EXPR
+) {
+
+633
+¬g
+ =‡rg[
+æp
+].
+¬g_±r
+.
+¬g_¬g
+;
+
+634
+æp
+ = 1;
+
+635 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_AND
+ ||‡rg->¬g_ty³ =ð
+O_OR
+)
+
+636 
+mÜecÚ‹xt
+;
+
+638 ià((
+cÚ‹xt
+ & 3) == 3)
+
+641 ià(
+¬g
+[
+æp
+].
+¬g_æags
+ & (
+AF_PRE
+|
+AF_POST
+)) {
+
+642
+cmd
+->
+c_æags
+ |ð
+Ýt
+;
+
+643 ià(
+acmd
+ && !
+cmd
+->
+ucmd
+.acmd.
+ac_ex´
+ && !(cmd->
+c_æags
+ &
+CF_TERM
+)
+
+644 &&
+cmd
+->
+c_ex´
+->
+¬g_ty³
+ =ð
+O_ITEM
+) {
+
+645
+¬g
+[
+æp
+].
+¬g_æags
+ &ð~
+AF_POST
+;
+
+646
+¬g
+[
+æp
+].
+¬g_æags
+ |ð
+AF_PRE
+;
+
+651 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ITEM
+ ||‡rg->¬g_ty³ =ð
+O_FLIP
+ ||
+
+652
+¬g
+->
+¬g_ty³
+ =ð
+O_AND
+ ||‡rg->¬g_ty³ =ð
+O_OR
+) {
+
+653 ià((
+¬g
+[
+æp
+].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+) {
+
+654
+Ýt
+ = (
+ `¡r_Œue
+(
+¬g
+[
+æp
+].
+¬g_±r
+.
+¬g_¡r
+è?
+CFT_TRUE
+ :
+CFT_FALSE
+);
+
+655
+cmd
+->
+c_shÜt
+ =
+ `¡r_smake
+(
+¬g
+[
+æp
+].
+¬g_±r
+.
+¬g_¡r
+);
+
+656 
+l™”®
+;
+
+658 ià((
+¬g
+[
+æp
+].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_STAB
+ ||
+
+659 (
+¬g
+[
+æp
+].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_LVAL
+) {
+
+660
+cmd
+->
+c_¡ab
+ =
+¬g
+[
+æp
+].
+¬g_±r
+.
+¬g_¡ab
+;
+
+661 ià(!
+cÚ‹xt
+)
+
+662
+¬g
+[
+æp
+].
+¬g_±r
+.
+¬g_¡ab
+ =
+NuΡab
+;
+
+663
+Ýt
+ =
+CFT_REG
+;
+
+664
+l™”®
+:
+
+665 ià(!
+cÚ‹xt
+) {
+
+666
+ `¬g_ä“
+(
+¬g
+);
+
+667
+cmd
+->
+c_ex´
+ =
+Nuάg
+;
+
+669 ià(!(
+cÚ‹xt
+ & 1))
+
+670
+cmd
+->
+c_æags
+ |ð
+CF_EQSURE
+;
+
+671 ià(!(
+cÚ‹xt
+ & 2))
+
+672
+cmd
+->
+c_æags
+ |ð
+CF_NESURE
+;
+
+675 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_MATCH
+ ||‡rg->¬g_ty³ =ð
+O_SUBST
+ ||
+
+676
+¬g
+->
+¬g_ty³
+ =ð
+O_NMATCH
+ ||‡rg->¬g_ty³ =ð
+O_NSUBST
+) {
+
+677 ià((
+¬g
+[1].
+¬g_ty³
+ =ð
+A_STAB
+ ||‡rg[1].¬g_ty³ =ð
+A_LVAL
+) &&
+
+678 (
+¬g
+[2].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SPAT
+ &&
+
+679
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+->
+¥©_shÜt
+ ) {
+
+680
+cmd
+->
+c_¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+681
+cmd
+->
+c_shÜt
+ =
+ `¡r_smake
+(
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+->
+¥©_shÜt
+);
+
+682
+cmd
+->
+c_¦’
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+->
+¥©_¦’
+;
+
+683 ià(
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+->
+¥©_æags
+ &
+SPAT_ALL
+ &&
+
+684 !(
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+->
+¥©_æags
+ &
+SPAT_ONCE
+) &&
+
+685 (
+¬g
+->
+¬g_ty³
+ =ð
+O_MATCH
+ ||‡rg->¬g_ty³ =ð
+O_NMATCH
+) )
+
+686
+su»
+ |ð
+CF_EQSURE
+;
+
+688 ià(
+¬g
+->
+¬g_ty³
+ !ð
+O_SUBST
+) {
+
+689
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+->
+¥©_shÜt
+ =
+NuΡr
+;
+
+690
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+->
+¥©_¦’
+ = 0;
+
+692
+su»
+ |ð
+CF_NESURE
+;
+
+693 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_NMATCH
+ ||‡rg->¬g_ty³ =ð
+O_NSUBST
+)
+
+694
+cmd
+->
+c_æags
+ |ð
+CF_FIRSTNEG
+;
+
+695 ià(
+cÚ‹xt
+ & 1) {
+
+696 ià(
+cmd
+->
+c_æags
+ &
+CF_FIRSTNEG
+)
+
+697
+su»
+ &ð~
+CF_NESURE
+;
+
+699
+su»
+ &ð~
+CF_EQSURE
+;
+
+701 ià(
+cÚ‹xt
+ & 2) {
+
+702 ià(
+cmd
+->
+c_æags
+ &
+CF_FIRSTNEG
+)
+
+703
+su»
+ &ð~
+CF_EQSURE
+;
+
+705
+su»
+ &ð~
+CF_NESURE
+;
+
+707 ià(
+su»
+ & (
+CF_EQSURE
+|
+CF_NESURE
+)) {
+
+708 ià(
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+->
+¥©_æags
+ &
+SPAT_SCANFIRST
+)
+
+709
+Ýt
+ =
+CFT_SCAN
+;
+
+711
+Ýt
+ =
+CFT_ANCHOR
+;
+
+712 ià(
+su»
+ =ð(
+CF_EQSURE
+|
+CF_NESURE
+)
+
+713 &&
+¬g
+->
+¬g_ty³
+ =ð
+O_MATCH
+
+
+714 &&
+cÚ‹xt
+ & 4
+
+715 &&
+æÜæÝ
+ == 1) {
+
+716
+ `¥©_ä“
+(
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+);
+
+717
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+ =
+Nu봩
+;
+
+720
+cmd
+->
+c_¥©
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+;
+
+721
+cmd
+->
+c_æags
+ |ð
+su»
+;
+
+725 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_SEQ
+ ||‡rg->¬g_ty³ =ð
+O_SNE
+ ||
+
+726
+¬g
+->
+¬g_ty³
+ =ð
+O_SLT
+ ||‡rg->¬g_ty³ =ð
+O_SGT
+) {
+
+727 ià(
+¬g
+[1].
+¬g_ty³
+ =ð
+A_STAB
+ ||‡rg[1].¬g_ty³ =ð
+A_LVAL
+) {
+
+728 ià(
+¬g
+[2].
+¬g_ty³
+ =ð
+A_SINGLE
+) {
+
+729 *
+junk
+ =
+ `¡r_g‘
+(
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+);
+
+731
+cmd
+->
+c_¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+732
+cmd
+->
+c_shÜt
+ =
+ `¡r_smake
+(
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+);
+
+733
+cmd
+->
+c_¦’
+ = cmd->
+c_shÜt
+->
+¡r_cur
++1;
+
+734 
+¬g
+->
+¬g_ty³
+) {
+
+735 
+O_SLT
+: 
+O_SGT
+:
+
+736
+su»
+ |ð
+CF_EQSURE
+;
+
+737
+cmd
+->
+c_æags
+ |ð
+CF_FIRSTNEG
+;
+
+739 
+O_SNE
+:
+
+740
+cmd
+->
+c_æags
+ |ð
+CF_FIRSTNEG
+;
+
+742 
+O_SEQ
+:
+
+743
+su»
+ |ð
+CF_NESURE
+|
+CF_EQSURE
+;
+
+746 ià(
+cÚ‹xt
+ & 1) {
+
+747 ià(
+cmd
+->
+c_æags
+ &
+CF_FIRSTNEG
+)
+
+748
+su»
+ &ð~
+CF_NESURE
+;
+
+750
+su»
+ &ð~
+CF_EQSURE
+;
+
+752 ià(
+cÚ‹xt
+ & 2) {
+
+753 ià(
+cmd
+->
+c_æags
+ &
+CF_FIRSTNEG
+)
+
+754
+su»
+ &ð~
+CF_EQSURE
+;
+
+756
+su»
+ &ð~
+CF_NESURE
+;
+
+758 ià(
+su»
+ & (
+CF_EQSURE
+|
+CF_NESURE
+)) {
+
+759
+Ýt
+ =
+CFT_STROP
+;
+
+760
+cmd
+->
+c_æags
+ |ð
+su»
+;
+
+765 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_EQ
+ ||‡rg->¬g_ty³ =ð
+O_NE
+ ||
+
+766
+¬g
+->
+¬g_ty³
+ =ð
+O_LE
+ ||‡rg->¬g_ty³ =ð
+O_GE
+ ||
+
+767
+¬g
+->
+¬g_ty³
+ =ð
+O_LT
+ ||‡rg->¬g_ty³ =ð
+O_GT
+) {
+
+768 ià(
+¬g
+[1].
+¬g_ty³
+ =ð
+A_STAB
+ ||‡rg[1].¬g_ty³ =ð
+A_LVAL
+) {
+
+769 ià(
+¬g
+[2].
+¬g_ty³
+ =ð
+A_SINGLE
+) {
+
+770
+cmd
+->
+c_¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+771 ià(
+dow¬n
+) {
+
+772
+STR
+ *
+¡r
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+;
+
+774 ià((!
+¡r
+->
+¡r_nok
+ && !
+ `looks_like_numb”
+(str)))
+
+775
+ `w¬n
+("Possible use of == on string value");
+
+777
+cmd
+->
+c_shÜt
+ =
+ `¡r_nmake
+(
+ `¡r_gnum
+(
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+));
+
+778
+cmd
+->
+c_¦’
+ =
+¬g
+->
+¬g_ty³
+;
+
+779
+su»
+ |ð
+CF_NESURE
+|
+CF_EQSURE
+;
+
+780 ià(
+cÚ‹xt
+ & 1) {
+
+781
+su»
+ &ð~
+CF_EQSURE
+;
+
+783 ià(
+cÚ‹xt
+ & 2) {
+
+784
+su»
+ &ð~
+CF_NESURE
+;
+
+786 ià(
+su»
+ & (
+CF_EQSURE
+|
+CF_NESURE
+)) {
+
+787
+Ýt
+ =
+CFT_NUMOP
+;
+
+788
+cmd
+->
+c_æags
+ |ð
+su»
+;
+
+793 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+ &&
+
+794 (
+¬g
+[1].
+¬g_ty³
+ =ð
+A_STAB
+ ||‡rg[1].¬g_ty³ =ð
+A_LVAL
+) &&
+
+795
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =ð
+def¡ab
+ &&
+
+796
+¬g
+[2].
+¬g_ty³
+ =ð
+A_EXPR
+ ) {
+
+797
+¬g2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¬g
+;
+
+798 ià(
+¬g2
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&‡rg2[1].¬g_ty³ =ð
+A_READ
+) {
+
+799
+Ýt
+ =
+CFT_GETS
+;
+
+800
+cmd
+->
+c_¡ab
+ =
+¬g2
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+801 ià(!(
+ `¡ab_io
+(
+¬g2
+[1].
+¬g_±r
+.
+¬g_¡ab
+)->
+æags
+ &
+IOF_ARGV
+)) {
+
+802
+ `ä“_¬g
+(
+¬g2
+);
+
+803
+¬g
+[2].
+¬g_±r
+.
+¬g_¬g
+ =
+Nuάg
+;
+
+804
+ `ä“_¬g
+(
+¬g
+);
+
+805
+cmd
+->
+c_ex´
+ =
+Nuάg
+;
+
+809 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_CHOP
+ &&
+
+810 (
+¬g
+[1].
+¬g_ty³
+ =ð
+A_STAB
+ ||‡rg[1].¬g_ty³ =ð
+A_LVAL
+) ) {
+
+811
+Ýt
+ =
+CFT_CHOP
+;
+
+812
+cmd
+->
+c_¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+813
+ `ä“_¬g
+(
+¬g
+);
+
+814
+cmd
+->
+c_ex´
+ =
+Nuάg
+;
+
+816 ià(
+cÚ‹xt
+ & 4)
+
+817
+Ýt
+ |ð
+CF_FLIP
+;
+
+818
+cmd
+->
+c_æags
+ |ð
+Ýt
+;
+
+820 ià(
+cmd
+->
+c_æags
+ &
+CF_FLIP
+) {
+
+821 ià(
+æÜæÝ
+ == 1) {
+
+822
+¬g
+ =
+cmd
+->
+c_ex´
+;
+
+823
+ `New
+(110,
+¬g
+[3].
+¬g_±r
+.
+¬g_cmd
+, 1,
+CMD
+);
+
+824
+ `CÝy
+(
+cmd
+,
+¬g
+[3].
+¬g_±r
+.
+¬g_cmd
+, 1,
+CMD
+);
+
+825
+ `New
+(111,
+¬g
+[4].
+¬g_±r
+.
+¬g_cmd
+,1,
+CMD
+);
+
+826
+ `CÝy
+(
+cmd
+,
+¬g
+[4].
+¬g_±r
+.
+¬g_cmd
+, 1,
+CMD
+);
+
+827
+ `Ýt_¬g
+(
+¬g
+[4].
+¬g_±r
+.
+¬g_cmd
+,2,
+acmd
+);
+
+828
+¬g
+->
+¬g_Ën
+ = 2;
+
+831 ià((
+Ýt
+ &
+CF_OPTIMIZE
+è=ð
+CFT_EVAL
+)
+
+832
+cmd
+->
+c_æags
+ = (cmd->c_æag & ~
+CF_OPTIMIZE
+è|
+CFT_UNFLIP
+;
+
+835
+ }
+}
+
+837
+CMD
+ *
+
+838
+ $add_Ïb–
+(
+lbl
+,
+cmd
+)
+
+839 *
+lbl
+;
+
+840 
+CMD
+ *
+cmd
+;
+
+842 ià(
+cmd
+)
+
+843
+cmd
+->
+c_Ïb–
+ =
+lbl
+;
+
+844 
+cmd
+;
+
+845
+ }
+}
+
+847
+CMD
+ *
+
+848
+ $addcÚd
+(
+cmd
+,
+¬g
+)
+
+849 
+CMD
+ *
+cmd
+;
+
+850 
+ARG
+ *
+¬g
+;
+
+852
+cmd
+->
+c_ex´
+ =
+¬g
+;
+
+853
+cmd
+->
+c_æags
+ |ð
+CF_COND
+;
+
+854 
+cmd
+;
+
+855
+ }
+}
+
+857
+CMD
+ *
+
+858
+ $addloÝ
+(
+cmd
+,
+¬g
+)
+
+859 
+CMD
+ *
+cmd
+;
+
+860 
+ARG
+ *
+¬g
+;
+
+862 
+ `whže_io
+();
+
+864
+cmd
+->
+c_ex´
+ =
+¬g
+;
+
+865
+cmd
+->
+c_æags
+ |ð
+CF_COND
+|
+CF_LOOP
+;
+
+867 ià(!(
+cmd
+->
+c_æags
+ &
+CF_INVERT
+))
+
+868
+ `whže_io
+(
+cmd
+);
+
+870 ià(
+cmd
+->
+c_ty³
+ =ð
+C_BLOCK
+)
+
+871
+cmd
+->
+c_æags
+ &ð~
+CF_COND
+;
+
+873
+¬g
+ =
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+;
+
+874 ià(
+¬g
+ &&‡rg->
+¬g_ty³
+ =ð
+O_ITEM
+ &&‡rg[1].¬g_ty³ =ð
+A_CMD
+)
+
+875
+cmd
+->
+c_æags
+ &ð~
+CF_COND
+;
+
+876 ià(
+¬g
+ && (¬g->
+¬g_æags
+ &
+AF_DEPR
+) &&
+
+877 (
+¬g
+->
+¬g_ty³
+ =ð
+O_SUBR
+ ||‡rg->¬g_ty³ =ð
+O_DBSUBR
+) )
+
+878
+cmd
+->
+c_æags
+ &ð~
+CF_COND
+;
+
+880 
+cmd
+;
+
+881
+ }
+}
+
+883
+CMD
+ *
+
+884
+ $šv”t
+(
+cmd
+)
+
+885
+CMD
+ *
+cmd
+;
+
+887 
+CMD
+ *
+rg
+ =
+cmd
+;
+
+888 ià(
+rg
+->
+c_h—d
+)
+
+889
+rg
+ =¬g->
+c_h—d
+;
+
+890 ià(
+rg
+->
+c_æags
+ &
+CF_DBSUB
+)
+
+891
+rg
+ =¬g->
+c_Ãxt
+;
+
+892
+rg
+->
+c_æags
+ ^ð
+CF_INVERT
+;
+
+893 
+cmd
+;
+
+894
+ }
+}
+
+896
+ $yy”rÜ
+(
+s
+)
+
+897 *
+s
+;
+
+899 
+tmpbuf
+[258];
+
+900 
+tmp2buf
+[258];
+
+901 *
+Šame
+ =
+tmpbuf
+;
+
+903 ià(
+buåŒ
+ >
+ÞdÞdbuåŒ
+ && bufptr - oldoldbufptr < 200 &&
+
+904
+ÞdÞdbuåŒ
+ !ð
+ÞdbuåŒ
+ && oldbuåŒ !ð
+buåŒ
+) {
+
+905 
+ `is¥aû
+(*
+ÞdÞdbuåŒ
+))
+
+906
+ÞdÞdbuåŒ
+++;
+
+907
+ `¡ºýy
+(
+tmp2buf
+,
+ÞdÞdbuåŒ
+,
+buåŒ
+ - oldoldbufptr);
+
+908
+tmp2buf
+[
+buåŒ
+ -
+ÞdÞdbuåŒ
+] = '\0';
+
+909
+ `¥rštf
+(
+Šame
+,"Ãxˆ2ok’ \"%s\"",
+tmp2buf
+);
+
+911 ià(
+buåŒ
+ >
+ÞdbuåŒ
+ && bufptr - oldbufptr < 200 &&
+
+912
+ÞdbuåŒ
+ !ð
+buåŒ
+) {
+
+913 
+ `is¥aû
+(*
+ÞdbuåŒ
+))
+
+914
+ÞdbuåŒ
+++;
+
+915
+ `¡ºýy
+(
+tmp2buf
+,
+ÞdbuåŒ
+,
+buåŒ
+ - oldbufptr);
+
+916
+tmp2buf
+[
+buåŒ
+ -
+ÞdbuåŒ
+] = '\0';
+
+917
+ `¥rštf
+(
+Šame
+,"Ãxˆtok’ \"%s\"",
+tmp2buf
+);
+
+919 ià(
+yych¬
+ > 256)
+
+920
+Šame
+ = "nextoken ???";
+
+921 ià(!
+yych¬
+)
+
+922 ()
+ `¡rýy
+(
+Šame
+,"at EOF");
+
+923 ià(
+yych¬
+ < 32)
+
+924 ()
+ `¥rštf
+(
+Šame
+,"Ãxˆch¬ ^%c",
+yych¬
++64);
+
+925 ià(
+yych¬
+ == 127)
+
+926 ()
+ `¡rýy
+(
+Šame
+,"at EOF");
+
+928 ()
+ `¥rštf
+(
+Šame
+,"Ãxˆch¬ %c",
+yych¬
+);
+
+929 ()
+ `¥rštf
+(
+buf
+, "%s in file %s‡t†ine %d, %s\n",
+
+930
+s
+,
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+,curcmd->
+c_lše
+,
+Šame
+);
+
+931 ià(
+curcmd
+->
+c_lše
+ =ð
+muÉi_’d
+ &&
+muÉi_¡¬t
+ < multi_end)
+
+932
+ `¥rštf
+(
+buf
++
+ `¡¾’
+(buf),
+
+934
+muÉi_Ý’
+,
+muÉi_þo£
+,
+muÉi_¡¬t
+);
+
+935 ià(
+š_ev®
+)
+
+936
+ `¡r_ÿt
+(
+ `¡ab_v®
+(
+ `¡ab’t
+("@",
+TRUE
+)),
+buf
+);
+
+938
+ `åuts
+(
+buf
+,
+¡d”r
+);
+
+939 ià(++
+”rÜ_couÁ
+ >= 10)
+
+940
+ `çl
+("%s hasoo manyƒrrors.\n",
+
+941
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+);
+
+942
+ }
+}
+
+945
+ $whže_io
+(
+cmd
+)
+
+946 
+CMD
+ *
+cmd
+;
+
+948 
+ARG
+ *
+¬g
+ =
+cmd
+->
+c_ex´
+;
+
+949
+STAB
+ *
+asgn¡ab
+;
+
+953 ià(
+¬g
+ &&‡rg->
+¬g_ty³
+ =ð
+O_ITEM
+ &&‡rg[1].¬g_ty³ =ð
+A_READ
+) {
+
+954
+cmd
+->
+c_æags
+ &ð~
+CF_OPTIMIZE
+;
+
+955
+cmd
+->
+c_æags
+ |ð
+CFT_GETS
+;
+
+956
+cmd
+->
+c_¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+957 ià(
+ `¡ab_io
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+)->
+æags
+ &
+IOF_ARGV
+) {
+
+958
+cmd
+->
+c_ex´
+ =
+ `l
+(
+ `make_Ý
+(
+O_ASSIGN
+, 2,
+
+959
+ `¡ab2¬g
+(
+A_LVAL
+,
+def¡ab
+),
+¬g
+,
+Nuάg
+));
+
+962
+ `ä“_¬g
+(
+¬g
+);
+
+963
+cmd
+->
+c_ex´
+ =
+Nuάg
+;
+
+966 ià(
+¬g
+ &&‡rg->
+¬g_ty³
+ =ð
+O_ITEM
+ &&‡rg[1].¬g_ty³ =ð
+A_INDREAD
+) {
+
+967
+cmd
+->
+c_æags
+ &ð~
+CF_OPTIMIZE
+;
+
+968
+cmd
+->
+c_æags
+ |ð
+CFT_INDGETS
+;
+
+969
+cmd
+->
+c_¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+970
+ `ä“_¬g
+(
+¬g
+);
+
+971
+cmd
+->
+c_ex´
+ =
+Nuάg
+;
+
+973 ià(
+¬g
+ &&‡rg->
+¬g_ty³
+ =ð
+O_ITEM
+ &&‡rg[1].¬g_ty³ =ð
+A_GLOB
+) {
+
+974 ià((
+cmd
+->
+c_æags
+ &
+CF_OPTIMIZE
+è=ð
+CFT_ARRAY
+)
+
+975
+asgn¡ab
+ =
+cmd
+->
+c_¡ab
+;
+
+977
+asgn¡ab
+ =
+def¡ab
+;
+
+978
+cmd
+->
+c_ex´
+ =
+ `l
+(
+ `make_Ý
+(
+O_ASSIGN
+, 2,
+
+979
+ `¡ab2¬g
+(
+A_LVAL
+,
+asgn¡ab
+),
+¬g
+,
+Nuάg
+));
+
+980
+cmd
+->
+c_æags
+ &ð~
+CF_OPTIMIZE
+;
+
+982
+ }
+}
+
+984
+CMD
+ *
+
+985
+ $wÝt
+(
+cmd
+)
+
+986 
+CMD
+ *
+cmd
+;
+
+988 
+CMD
+ *
+;
+
+989
+CMD
+ *
+Ãwž
+;
+
+990 
+i
+;
+
+992 ià(
+cmd
+->
+c_ex´
+ && (cmd->
+c_æags
+ &
+CF_OPTIMIZE
+è=ð
+CFT_FALSE
+)
+
+993
+ `Ýt_¬g
+(
+cmd
+,1, cmd->
+c_ty³
+ =ð
+C_EXPR
+);
+
+995
+ `whže_io
+(
+cmd
+);
+
+999
+ =
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+;
+
+1000 ià(
+ =ð
+NuÎcmd
+)
+
+1001 
+cmd
+;
+
+1002
+ `New
+(112,
+Ãwž
+, 1,
+CMD
+);
+
+1005 ià(
+->
+c_ty³
+ =ð
+C_EXPR
+ &&
+
+1006
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ &&
+
+1007
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+->
+¬g_ty³
+ =ð
+O_NEXT
+ &&
+
+1008 (
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+->
+¬g_Ën
+ == 0 ||
+
+1009 (
+cmd
+->
+c_Ïb–
+ &&
+
+1010
+ `¡rEQ
+(
+cmd
+->
+c_Ïb–
+,
+
+1011
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+[1].
+¬g_±r
+.
+¬g_¡r
+->
+¡r_±r
+) )))
+
+1013
+ `¬g_ä“
+(
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+);
+
+1014
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ =
+Nuάg
+;
+
+1015
+->
+c_ty³
+ =
+C_NEXT
+;
+
+1016 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ !ð
+NuÎcmd
+)
+
+1017
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+cmd
+->ucmd.ccmd.cc_alt;
+
+1019
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+Ãwž
+;
+
+1020
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+ =
+NuÎcmd
+;
+
+1022 ià(
+->
+c_ty³
+ =ð
+C_IF
+ && !ž->
+ucmd
+.
+ccmd
+.
+cc_®t
+) {
+
+1023 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ !ð
+NuÎcmd
+)
+
+1024
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+cmd
+->ucmd.ccmd.cc_alt;
+
+1026
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+Ãwž
+;
+
+1028 ià(
+->
+c_ty³
+ =ð
+C_CSWITCH
+ ||až->c_ty³ =ð
+C_NSWITCH
+) {
+
+1029 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ !ð
+NuÎcmd
+) {
+
+1030 
+i
+ =
+->
+ucmd
+.
+scmd
+.
+sc_max
+; i >= 0; i--)
+
+1031 ià(!
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+i
+])
+
+1032
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+i
+] =
+cmd
+->ucmd.
+ccmd
+.
+cc_®t
+;
+
+1035 
+i
+ =
+->
+ucmd
+.
+scmd
+.
+sc_max
+; i >= 0; i--)
+
+1036 ià(!
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+i
+])
+
+1037
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+i
+] =
+Ãwž
+;
+
+1041 ià(!
+->
+c_Ãxt
+)
+
+1043
+ =až->
+c_Ãxt
+;
+
+1048 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ !ð
+NuÎcmd
+) {
+
+1049
+->
+c_Ãxt
+ =
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+;
+
+1050
+ =až->
+c_Ãxt
+;
+
+1053 ià(
+->
+c_ty³
+ =ð
+C_EXPR
+ &&
+
+1054
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ &&
+
+1055
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+->
+¬g_ty³
+ =ð
+O_NEXT
+ &&
+
+1056 (
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+->
+¬g_Ën
+ == 0 ||
+
+1057 (
+cmd
+->
+c_Ïb–
+ &&
+
+1058
+ `¡rEQ
+(
+cmd
+->
+c_Ïb–
+,
+
+1059
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+[1].
+¬g_±r
+.
+¬g_¡r
+->
+¡r_±r
+) )))
+
+1061
+ `¬g_ä“
+(
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+);
+
+1062
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ =
+Nuάg
+;
+
+1063
+->
+c_ty³
+ =
+C_NEXT
+;
+
+1064
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+Ãwž
+;
+
+1065
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+ =
+NuÎcmd
+;
+
+1067 ià(
+->
+c_ty³
+ =ð
+C_IF
+ && !ž->
+ucmd
+.
+ccmd
+.
+cc_®t
+) {
+
+1068
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+Ãwž
+;
+
+1070 ià(
+->
+c_ty³
+ =ð
+C_CSWITCH
+ ||až->c_ty³ =ð
+C_NSWITCH
+) {
+
+1071 
+i
+ =
+->
+ucmd
+.
+scmd
+.
+sc_max
+; i >= 0; i--)
+
+1072 ià(!
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+i
+])
+
+1073
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+i
+] =
+Ãwž
+;
+
+1076 ià(!
+->
+c_Ãxt
+)
+
+1078
+ =až->
+c_Ãxt
+;
+
+1080  ;
+->
+c_Ãxt
+;ail =ail->c_next) ;
+
+1089
+->
+c_Ãxt
+ =
+Ãwž
+;
+
+1090
+ =
+Ãwž
+;
+
+1091 ià(!
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+)
+
+1092
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+ =
+;
+
+1094 #iâdeà
+lšt
+
+
+1095 ()
+ `bcÝy
+((*)
+cmd
+, (*)
+, (
+CMD
+));
+
+1097
+->
+c_ty³
+ =
+C_EXPR
+;
+
+1098
+->
+c_æags
+ ^ð
+CF_INVERT
+;
+
+1099
+->
+c_Ãxt
+ =až->
+ucmd
+.
+ccmd
+.
+cc_Œue
+;
+
+1100
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ =
+ `make_Ý
+(
+O_LAST
+,0,
+Nuάg
+,Nullarg,Nullarg);
+
+1101
+->
+ucmd
+.
+acmd
+.
+ac_¡ab
+ =
+NuΡab
+;
+
+1102 
+cmd
+;
+
+1103
+ }
+}
+
+1105
+CMD
+ *
+
+1106
+ $ov”
+(
+—ch¡ab
+,
+cmd
+)
+
+1107
+STAB
+ *
+—ch¡ab
+;
+
+1108 
+CMD
+ *
+cmd
+;
+
+1112
+cmd
+->
+c_æags
+ &ð~
+CF_OPTIMIZE
+;
+
+1113
+cmd
+->
+c_æags
+ |ð
+CFT_ARRAY
+;
+
+1114
+cmd
+->
+c_¡ab
+ =
+—ch¡ab
+;
+
+1115
+cmd
+->
+c_shÜt
+ =
+ `¡r_Ãw
+(0);
+
+1116
+cmd
+->
+c_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+ = -1;
+
+1118 
+cmd
+;
+
+1119
+ }
+}
+
+1121
+ $cmd_ä“
+(
+cmd
+)
+
+1122 
+CMD
+ *
+cmd
+;
+
+1124 
+CMD
+ *
+toä“
+;
+
+1125 
+CMD
+ *
+h—d
+ =
+cmd
+;
+
+1127 
+cmd
+) {
+
+1128 ià(
+cmd
+->
+c_ty³
+ !ð
+C_WHILE
+) {
+
+1129 ià(
+cmd
+->
+c_Ïb–
+) {
+
+1130
+ `Saãä“
+(
+cmd
+->
+c_Ïb–
+);
+
+1131
+cmd
+->
+c_Ïb–
+ =
+NuÎch
+;
+
+1133 ià(
+cmd
+->
+c_shÜt
+) {
+
+1134
+ `¡r_ä“
+(
+cmd
+->
+c_shÜt
+);
+
+1135
+cmd
+->
+c_shÜt
+ =
+NuΡr
+;
+
+1137 ià(
+cmd
+->
+c_ex´
+) {
+
+1138
+ `¬g_ä“
+(
+cmd
+->
+c_ex´
+);
+
+1139
+cmd
+->
+c_ex´
+ =
+Nuάg
+;
+
+1142 
+cmd
+->
+c_ty³
+) {
+
+1143 
+C_WHILE
+:
+
+1144 
+C_BLOCK
+:
+
+1145 
+C_ELSE
+:
+
+1146 
+C_IF
+:
+
+1147 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+1148
+ `cmd_ä“
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+);
+
+1149
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+ =
+NuÎcmd
+;
+
+1152 
+C_EXPR
+:
+
+1153 ià(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+) {
+
+1154
+ `¬g_ä“
+(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+);
+
+1155
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+ =
+Nuάg
+;
+
+1159
+toä“
+ =
+cmd
+;
+
+1160
+cmd
+ = cmd->
+c_Ãxt
+;
+
+1161 ià(
+toä“
+ !ð
+h—d
+)
+
+1162
+ `Saãä“
+(
+toä“
+);
+
+1163 ià(
+cmd
+ && cmd =ð
+h—d
+)
+
+1166
+ `Saãä“
+(
+h—d
+);
+
+1167
+ }
+}
+
+1169
+ $¬g_ä“
+(
+¬g
+)
+
+1170 
+ARG
+ *
+¬g
+;
+
+1172 
+i
+;
+
+1174 
+i
+ = 1; i <ð
+¬g
+->
+¬g_Ën
+; i++) {
+
+1175 
+¬g
+[
+i
+].
+¬g_ty³
+ &
+A_MASK
+) {
+
+1176 
+A_NULL
+:
+
+1177 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_TRANS
+) {
+
+1178
+ `Saãä“
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_cv®
+);
+
+1179
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_cv®
+ =
+NuÎch
+;
+
+1182 
+A_LEXPR
+:
+
+1183 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_AASSIGN
+ &&
+
+1184
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =ð
+O_LARRAY
+) {
+
+1185 *
+Çme
+ =
+
+1186
+ `¡ab_Çme
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+[1].¬g_±r.
+¬g_¡ab
+);
+
+1188 ià(
+ `¡ºEQ
+("_GEN_",
+Çme
+, 5))
+
+1189
+ `hd–‘e
+(
+def¡ash
+,
+Çme
+,
+ `¡¾’
+(name));
+
+1192 
+A_EXPR
+:
+
+1193
+ `¬g_ä“
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+);
+
+1194
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+ =
+Nuάg
+;
+
+1196 
+A_CMD
+:
+
+1197
+ `cmd_ä“
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_cmd
+);
+
+1198
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_cmd
+ =
+NuÎcmd
+;
+
+1200 
+A_WORD
+:
+
+1201 
+A_STAB
+:
+
+1202 
+A_LVAL
+:
+
+1203 
+A_READ
+:
+
+1204 
+A_GLOB
+:
+
+1205 
+A_ARYLEN
+:
+
+1206 
+A_LARYLEN
+:
+
+1207 
+A_ARYSTAB
+:
+
+1208 
+A_LARYSTAB
+:
+
+1210 
+A_SINGLE
+:
+
+1211 
+A_DOUBLE
+:
+
+1212 
+A_BACKTICK
+:
+
+1213
+ `¡r_ä“
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¡r
+);
+
+1214
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¡r
+ =
+NuΡr
+;
+
+1216 
+A_SPAT
+:
+
+1217
+ `¥©_ä“
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¥©
+);
+
+1218
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¥©
+ =
+Nu봩
+;
+
+1222
+ `ä“_¬g
+(
+¬g
+);
+
+1223
+ }
+}
+
+1225
+ $¥©_ä“
+(
+¥©
+)
+
+1226 
+SPAT
+ *
+¥©
+;
+
+1228 
+SPAT
+ *
+;
+
+1229
+HENT
+ *
+’Œy
+;
+
+1231 ià(
+¥©
+->
+¥©_ruÁime
+) {
+
+1232
+ `¬g_ä“
+(
+¥©
+->
+¥©_ruÁime
+);
+
+1233
+¥©
+->
+¥©_ruÁime
+ =
+Nuάg
+;
+
+1235 ià(
+¥©
+->
+¥©_»¶
+) {
+
+1236
+ `¬g_ä“
+(
+¥©
+->
+¥©_»¶
+);
+
+1237
+¥©
+->
+¥©_»¶
+ =
+Nuάg
+;
+
+1239 ià(
+¥©
+->
+¥©_shÜt
+) {
+
+1240
+ `¡r_ä“
+(
+¥©
+->
+¥©_shÜt
+);
+
+1241
+¥©
+->
+¥©_shÜt
+ =
+NuΡr
+;
+
+1243 ià(
+¥©
+->
+¥©_»gexp
+) {
+
+1244
+ `»gä“
+(
+¥©
+->
+¥©_»gexp
+);
+
+1245
+¥©
+->
+¥©_»gexp
+ =
+ `NuÎ
+(
+REGEXP
+*);
+
+1250 
+’Œy
+ =
+def¡ash
+->
+tbl_¬¿y
+['_'];ƒÁry;ƒÁry =ƒÁry->
+h’t_Ãxt
+) {
+
+1251 
+HASH
+ *
+¡ash
+;
+
+1252
+STAB
+ *
+¡ab
+ = (STAB*)
+’Œy
+->
+h’t_v®
+;
+
+1254 ià(!
+¡ab
+)
+
+1256
+¡ash
+ =
+ `¡ab_hash
+(
+¡ab
+);
+
+1257 ià(!
+¡ash
+ || ssh->
+tbl_¥©roÙ
+ =ð
+ `NuÎ
+(
+SPAT
+*))
+
+1259 ià(
+¡ash
+->
+tbl_¥©roÙ
+ =ð
+¥©
+)
+
+1260
+¡ash
+->
+tbl_¥©roÙ
+ =
+¥©
+->
+¥©_Ãxt
+;
+
+1262 
+ =
+¡ash
+->
+tbl_¥©roÙ
+;
+
+1263
+ && sp->
+¥©_Ãxt
+ !ð
+¥©
+;
+
+1264
+ = sp->
+¥©_Ãxt
+)
+
+1266 ià(
+)
+
+1267
+->
+¥©_Ãxt
+ =
+¥©
+->spat_next;
+
+1270
+ `Saãä“
+(
+¥©
+);
+
+1271
+ }
+}
+
+1278
+ $cmd_to§ve
+(
+cmd
+,
+wžl§ve
+)
+
+1279 
+CMD
+ *
+cmd
+;
+
+1280 
+wžl§ve
+;
+
+1282 
+CMD
+ *
+h—d
+ =
+cmd
+;
+
+1283 
+should§ve
+ =
+FALSE
+;
+
+1284 
+tmp§ve
+;
+
+1285 
+CMD
+ *
+Ï¡cmd
+ =
+NuÎcmd
+;
+
+1287 
+cmd
+) {
+
+1288 ià(
+cmd
+->
+c_ex´
+)
+
+1289
+should§ve
+ |ð
+ `¬g_to§ve
+(
+cmd
+->
+c_ex´
+,
+wžl§ve
+);
+
+1290 
+cmd
+->
+c_ty³
+) {
+
+1291 
+C_WHILE
+:
+
+1292 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+1293
+tmp§ve
+ =
+ `cmd_to§ve
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,
+wžl§ve
+);
+
+1298 ià(
+tmp§ve
+ && (
+cmd
+->
+c_æags
+ &
+CF_OPTIMIZE
+è=ð
+CFT_ARRAY
+) {
+
+1299 ià(
+Ï¡cmd
+ &&
+
+1300
+Ï¡cmd
+->
+c_ty³
+ =ð
+C_EXPR
+ &&
+
+1301
+Ï¡cmd
+->
+c_ex´
+) {
+
+1302
+ARG
+ *
+¬g
+ =
+Ï¡cmd
+->
+c_ex´
+;
+
+1304 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+ &&
+
+1305
+¬g
+[1].
+¬g_ty³
+ =ð
+A_LEXPR
+ &&
+
+1306
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =ð
+O_LARRAY
+ &&
+
+1307
+ `¡ºEQ
+("_GEN_",
+
+1308
+ `¡ab_Çme
+(
+
+1309
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+[1].¬g_±r.
+¬g_¡ab
+),
+
+1311 ()
+ `loÿlize
+(
+¬g
+);
+
+1317 ()
+ `­ush
+(
+to§ve
+,
+cmd
+->
+c_shÜt
+);
+
+1319
+should§ve
+ |ð
+tmp§ve
+;
+
+1322 
+C_BLOCK
+:
+
+1323 
+C_ELSE
+:
+
+1324 
+C_IF
+:
+
+1325 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+)
+
+1326
+should§ve
+ |ð
+ `cmd_to§ve
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,
+wžl§ve
+);
+
+1328 
+C_EXPR
+:
+
+1329 ià(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+)
+
+1330
+should§ve
+ |ð
+ `¬g_to§ve
+(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+,
+wžl§ve
+);
+
+1333
+Ï¡cmd
+ =
+cmd
+;
+
+1334
+cmd
+ = cmd->
+c_Ãxt
+;
+
+1335 ià(
+cmd
+ && cmd =ð
+h—d
+)
+
+1338 
+should§ve
+;
+
+1339
+ }
+}
+
+1342
+ $¬g_to§ve
+(
+¬g
+,
+wžl§ve
+)
+
+1343 
+ARG
+ *
+¬g
+;
+
+1344 
+wžl§ve
+;
+
+1346 
+i
+;
+
+1347 
+should§ve
+ =
+FALSE
+;
+
+1349 
+i
+ =
+¬g
+->
+¬g_Ën
+; i >= 1; i--) {
+
+1350 
+¬g
+[
+i
+].
+¬g_ty³
+ &
+A_MASK
+) {
+
+1351 
+A_NULL
+:
+
+1353 
+A_LEXPR
+:
+
+1354 
+A_EXPR
+:
+
+1355
+should§ve
+ |ð
+ `¬g_to§ve
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+,shouldsave);
+
+1357 
+A_CMD
+:
+
+1358
+should§ve
+ |ð
+ `cmd_to§ve
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_cmd
+,shouldsave);
+
+1360 
+A_WORD
+:
+
+1361 
+A_STAB
+:
+
+1362 
+A_LVAL
+:
+
+1363 
+A_READ
+:
+
+1364 
+A_GLOB
+:
+
+1365 
+A_ARYLEN
+:
+
+1366 
+A_SINGLE
+:
+
+1367 
+A_DOUBLE
+:
+
+1368 
+A_BACKTICK
+:
+
+1370 
+A_SPAT
+:
+
+1371
+should§ve
+ |ð
+ `¥©_to§ve
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¥©
+);
+
+1375 
+¬g
+->
+¬g_ty³
+) {
+
+1376 
+O_RETURN
+:
+
+1377
+§w_»tuº
+ =
+TRUE
+;
+
+1379 
+O_EVAL
+:
+
+1380 
+O_SUBR
+:
+
+1381
+should§ve
+ =
+TRUE
+;
+
+1384 ià(
+wžl§ve
+)
+
+1385 ()
+ `­ush
+(
+to§ve
+,
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+);
+
+1386 
+should§ve
+;
+
+1387
+ }
+}
+
+1390
+ $¥©_to§ve
+(
+¥©
+)
+
+1391 
+SPAT
+ *
+¥©
+;
+
+1393 
+should§ve
+ =
+FALSE
+;
+
+1395 ià(
+¥©
+->
+¥©_ruÁime
+)
+
+1396
+should§ve
+ |ð
+ `¬g_to§ve
+(
+¥©
+->
+¥©_ruÁime
+,
+FALSE
+);
+
+1397 ià(
+¥©
+->
+¥©_»¶
+) {
+
+1398
+should§ve
+ |ð
+ `¬g_to§ve
+(
+¥©
+->
+¥©_»¶
+,
+FALSE
+);
+
+1401 
+should§ve
+;
+
+1402
+ }
+}
+
+ @consarg.c
+
+17 
+ ~"EXTERN.h
+"
+
+18 
+ ~"³¾.h
+"
+
+19 
+nÙhšg_š_commÚ
+();
+
+20 
+¬g_commÚ
+();
+
+21 
+¥©_commÚ
+();
+
+23
+ARG
+ *
+
+24
+ $make_¥l™
+(
+¡ab
+,
+¬g
+,
+lim¬g
+)
+
+25 
+STAB
+ *
+¡ab
+;
+
+26 
+ARG
+ *
+¬g
+;
+
+27
+ARG
+ *
+lim¬g
+;
+
+29 
+SPAT
+ *
+¥©
+;
+
+31 ià(
+¬g
+->
+¬g_ty³
+ !ð
+O_MATCH
+) {
+
+32
+ `Newz
+(201,
+¥©
+,1,
+SPAT
+);
+
+33
+¥©
+->
+¥©_Ãxt
+ =
+cur¡ash
+->
+tbl_¥©roÙ
+;
+
+34
+cur¡ash
+->
+tbl_¥©roÙ
+ =
+¥©
+;
+
+36
+¥©
+->
+¥©_ruÁime
+ =
+¬g
+;
+
+37
+¬g
+ =
+ `make_m©ch
+(
+O_MATCH
+,
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+¥©
+);
+
+39
+ `R’ew
+(
+¬g
+,4,
+ARG
+);
+
+40
+¬g
+->
+¬g_Ën
+ = 3;
+
+41 ià(
+lim¬g
+) {
+
+42 ià(
+lim¬g
+->
+¬g_ty³
+ =ð
+O_ITEM
+) {
+
+43
+ `CÝy
+(
+lim¬g
++1,
+¬g
++3,1,
+ARG
+);
+
+44
+lim¬g
+[1].
+¬g_ty³
+ =
+A_NULL
+;
+
+45
+ `¬g_ä“
+(
+lim¬g
+);
+
+48
+¬g
+[3].
+¬g_æags
+ = 0;
+
+49
+¬g
+[3].
+¬g_ty³
+ =
+A_EXPR
+;
+
+50
+¬g
+[3].
+¬g_±r
+.
+¬g_¬g
+ =
+lim¬g
+;
+
+54
+¬g
+[3].
+¬g_ty³
+ =
+A_NULL
+;
+
+55
+¬g
+->
+¬g_ty³
+ =
+O_SPLIT
+;
+
+56
+¥©
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+;
+
+57
+¥©
+->
+¥©_»¶
+ =
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¯dd
+(
+¡ab
+));
+
+58 ià(
+¥©
+->
+¥©_shÜt
+) {
+
+59 ià(!((
+¥©
+->
+¥©_æags
+ &
+SPAT_SCANFIRST
+) &&
+
+60 (
+¥©
+->
+¥©_æags
+ &
+SPAT_ALL
+) )) {
+
+61
+ `¡r_ä“
+(
+¥©
+->
+¥©_shÜt
+);
+
+62
+¥©
+->
+¥©_shÜt
+ =
+NuΡr
+;
+
+65 
+¬g
+;
+
+66
+ }
+}
+
+68
+ARG
+ *
+
+69
+ $mod_m©ch
+(
+ty³
+,
+Ëá
+,
+·t
+)
+
+70 
+ARG
+ *
+Ëá
+;
+
+71 
+ARG
+ *
+·t
+;
+
+74 
+SPAT
+ *
+¥©
+;
+
+75 
+ARG
+ *
+Ãw¬g
+;
+
+77 ià(!
+·t
+)
+
+78 
+Nuάg
+;
+
+80 ià((
+·t
+->
+¬g_ty³
+ =ð
+O_MATCH
+ ||
+
+81
+·t
+->
+¬g_ty³
+ =ð
+O_SUBST
+ ||
+
+82
+·t
+->
+¬g_ty³
+ =ð
+O_TRANS
+ ||
+
+83
+·t
+->
+¬g_ty³
+ =ð
+O_SPLIT
+
+
+85
+·t
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =ð
+def¡ab
+ ) {
+
+86 
+·t
+->
+¬g_ty³
+) {
+
+87 
+O_MATCH
+:
+
+88
+Ãw¬g
+ =
+ `make_Ý
+(
+ty³
+ =ð
+O_MATCH
+ ? O_MATCH :
+O_NMATCH
+,
+
+89
+·t
+->
+¬g_Ën
+,
+
+90
+Ëá
+,
+Nuάg
+,Nullarg);
+
+92 
+O_SUBST
+:
+
+93
+Ãw¬g
+ =
+ `l
+(
+ `make_Ý
+(
+ty³
+ =ð
+O_MATCH
+ ?
+O_SUBST
+ :
+O_NSUBST
+,
+
+94
+·t
+->
+¬g_Ën
+,
+
+95
+Ëá
+,
+Nuάg
+,Nullarg));
+
+97 
+O_TRANS
+:
+
+98
+Ãw¬g
+ =
+ `l
+(
+ `make_Ý
+(
+ty³
+ =ð
+O_MATCH
+ ?
+O_TRANS
+ :
+O_NTRANS
+,
+
+99
+·t
+->
+¬g_Ën
+,
+
+100
+Ëá
+,
+Nuάg
+,Nullarg));
+
+102 
+O_SPLIT
+:
+
+103
+Ãw¬g
+ =
+ `make_Ý
+(
+ty³
+ =ð
+O_MATCH
+ ?
+O_SPLIT
+ : O_SPLIT,
+
+104
+·t
+->
+¬g_Ën
+,
+
+105
+Ëá
+,
+Nuάg
+,Nullarg);
+
+108 ià(
+·t
+->
+¬g_Ën
+ >= 2) {
+
+109
+Ãw¬g
+[2].
+¬g_ty³
+ =
+·t
+[2].arg_type;
+
+110
+Ãw¬g
+[2].
+¬g_±r
+ =
+·t
+[2].arg_ptr;
+
+111
+Ãw¬g
+[2].
+¬g_Ën
+ =
+·t
+[2].arg_len;
+
+112
+Ãw¬g
+[2].
+¬g_æags
+ =
+·t
+[2].arg_flags;
+
+113 ià(
+·t
+->
+¬g_Ën
+ >= 3) {
+
+114
+Ãw¬g
+[3].
+¬g_ty³
+ =
+·t
+[3].arg_type;
+
+115
+Ãw¬g
+[3].
+¬g_±r
+ =
+·t
+[3].arg_ptr;
+
+116
+Ãw¬g
+[3].
+¬g_Ën
+ =
+·t
+[3].arg_len;
+
+117
+Ãw¬g
+[3].
+¬g_æags
+ =
+·t
+[3].arg_flags;
+
+120
+ `ä“_¬g
+(
+·t
+);
+
+123
+ `Newz
+(202,
+¥©
+,1,
+SPAT
+);
+
+124
+¥©
+->
+¥©_Ãxt
+ =
+cur¡ash
+->
+tbl_¥©roÙ
+;
+
+125
+cur¡ash
+->
+tbl_¥©roÙ
+ =
+¥©
+;
+
+127
+¥©
+->
+¥©_ruÁime
+ =
+·t
+;
+
+128
+Ãw¬g
+ =
+ `make_Ý
+(
+ty³
+,2,
+Ëá
+,
+Nuάg
+,Nullarg);
+
+129
+Ãw¬g
+[2].
+¬g_ty³
+ =
+A_SPAT
+ |
+A_DONT
+;
+
+130
+Ãw¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+ =
+¥©
+;
+
+133 
+Ãw¬g
+;
+
+134
+ }
+}
+
+136
+ARG
+ *
+
+137
+ $make_Ý
+(
+ty³
+,
+ÃwËn
+,
+¬g1
+,
+¬g2
+,
+¬g3
+)
+
+138 
+ty³
+;
+
+139 
+ÃwËn
+;
+
+140
+ARG
+ *
+¬g1
+;
+
+141
+ARG
+ *
+¬g2
+;
+
+142
+ARG
+ *
+¬g3
+;
+
+144 
+ARG
+ *
+¬g
+;
+
+145 
+ARG
+ *
+chld
+;
+
+146 
+dßrg
+;
+
+147 
+i
+;
+
+148
+ARG
+ *
+¬g4
+;
+
+149
+ARG
+ *
+¬g5
+;
+
+151
+¬g
+ =
+ `Ý_Ãw
+(
+ÃwËn
+);
+
+152
+¬g
+->
+¬g_ty³
+ =
+ty³
+;
+
+153 ià(
+chld
+ =
+¬g1
+) {
+
+154 ià(
+chld
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&
+
+155 (
+hoi¡abË
+[
+i
+ = (
+chld
+[1].
+¬g_ty³
+&
+A_MASK
+)] || i =ð
+A_LVAL
+ ||
+
+156 (
+i
+ =ð
+A_LEXPR
+ &&
+
+157 (
+chld
+[1].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =ð
+O_LIST
+ ||
+
+158
+chld
+[1].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =ð
+O_ARRAY
+ ||
+
+159
+chld
+[1].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =ð
+O_HASH
+ ))))
+
+161
+¬g
+[1].
+¬g_ty³
+ =
+chld
+[1].arg_type;
+
+162
+¬g
+[1].
+¬g_±r
+ =
+chld
+[1].arg_ptr;
+
+163
+¬g
+[1].
+¬g_æags
+ |ð
+chld
+[1].arg_flags;
+
+164
+¬g
+[1].
+¬g_Ën
+ =
+chld
+[1].arg_len;
+
+165
+ `ä“_¬g
+(
+chld
+);
+
+168
+¬g
+[1].
+¬g_ty³
+ =
+A_EXPR
+;
+
+169
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+ =
+chld
+;
+
+172 ià(
+chld
+ =
+¬g2
+) {
+
+173 ià(
+chld
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&
+
+174 (
+hoi¡abË
+[
+chld
+[1].
+¬g_ty³
+&
+A_MASK
+] ||
+
+175 (
+ty³
+ =ð
+O_ASSIGN
+ &&
+
+176 ((
+chld
+[1].
+¬g_ty³
+ =ð
+A_READ
+ && !(
+¬g
+[1].¬g_ty³ &
+A_DONT
+))
+
+178 (
+chld
+[1].
+¬g_ty³
+ =ð
+A_INDREAD
+ && !(
+¬g
+[1].¬g_ty³ &
+A_DONT
+))
+
+180 (
+chld
+[1].
+¬g_ty³
+ =ð
+A_GLOB
+ && !(
+¬g
+[1].¬g_ty³ &
+A_DONT
+))
+
+182
+¬g
+[2].
+¬g_ty³
+ =
+chld
+[1].arg_type;
+
+183
+¬g
+[2].
+¬g_±r
+ =
+chld
+[1].arg_ptr;
+
+184
+¬g
+[2].
+¬g_Ën
+ =
+chld
+[1].arg_len;
+
+185
+ `ä“_¬g
+(
+chld
+);
+
+188
+¬g
+[2].
+¬g_ty³
+ =
+A_EXPR
+;
+
+189
+¬g
+[2].
+¬g_±r
+.
+¬g_¬g
+ =
+chld
+;
+
+192 ià(
+chld
+ =
+¬g3
+) {
+
+193 ià(
+chld
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&
+hoi¡abË
+[chld[1].¬g_ty³&
+A_MASK
+]) {
+
+194
+¬g
+[3].
+¬g_ty³
+ =
+chld
+[1].arg_type;
+
+195
+¬g
+[3].
+¬g_±r
+ =
+chld
+[1].arg_ptr;
+
+196
+¬g
+[3].
+¬g_Ën
+ =
+chld
+[1].arg_len;
+
+197
+ `ä“_¬g
+(
+chld
+);
+
+200
+¬g
+[3].
+¬g_ty³
+ =
+A_EXPR
+;
+
+201
+¬g
+[3].
+¬g_±r
+.
+¬g_¬g
+ =
+chld
+;
+
+204 ià(
+ÃwËn
+ >ð4 && (
+chld
+ =
+¬g4
+)) {
+
+205 ià(
+chld
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&
+hoi¡abË
+[chld[1].¬g_ty³&
+A_MASK
+]) {
+
+206
+¬g
+[4].
+¬g_ty³
+ =
+chld
+[1].arg_type;
+
+207
+¬g
+[4].
+¬g_±r
+ =
+chld
+[1].arg_ptr;
+
+208
+¬g
+[4].
+¬g_Ën
+ =
+chld
+[1].arg_len;
+
+209
+ `ä“_¬g
+(
+chld
+);
+
+212
+¬g
+[4].
+¬g_ty³
+ =
+A_EXPR
+;
+
+213
+¬g
+[4].
+¬g_±r
+.
+¬g_¬g
+ =
+chld
+;
+
+216 ià(
+ÃwËn
+ >ð5 && (
+chld
+ =
+¬g5
+)) {
+
+217 ià(
+chld
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&
+hoi¡abË
+[chld[1].¬g_ty³&
+A_MASK
+]) {
+
+218
+¬g
+[5].
+¬g_ty³
+ =
+chld
+[1].arg_type;
+
+219
+¬g
+[5].
+¬g_±r
+ =
+chld
+[1].arg_ptr;
+
+220
+¬g
+[5].
+¬g_Ën
+ =
+chld
+[1].arg_len;
+
+221
+ `ä“_¬g
+(
+chld
+);
+
+224
+¬g
+[5].
+¬g_ty³
+ =
+A_EXPR
+;
+
+225
+¬g
+[5].
+¬g_±r
+.
+¬g_¬g
+ =
+chld
+;
+
+228
+dßrg
+ =
+ݬgs
+[
+ty³
+];
+
+229 
+i
+ = 1; i <ð
+ÃwËn
+; ++i) {
+
+230 ià(!(
+dßrg
+ & 1))
+
+231
+¬g
+[
+i
+].
+¬g_ty³
+ |ð
+A_DONT
+;
+
+232 ià(
+dßrg
+ & 2)
+
+233
+¬g
+[
+i
+].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+234
+dßrg
+ >>= 2;
+
+236 #ifdeà
+DEBUGGING
+
+
+237 ià(
+debug
+ & 16) {
+
+238
+ `årštf
+(
+¡d”r
+,"%lx <ðmake_Ý(%s",
+¬g
+,
+ÝÇme
+[¬g->
+¬g_ty³
+]);
+
+239 ià(
+¬g1
+)
+
+240
+ `årštf
+(
+¡d”r
+,",%s=%lx",
+
+241
+¬gÇme
+[
+¬g
+[1].
+¬g_ty³
+&
+A_MASK
+],¬g[1].
+¬g_±r
+.
+¬g_¬g
+);
+
+242 ià(
+¬g2
+)
+
+243
+ `årštf
+(
+¡d”r
+,",%s=%lx",
+
+244
+¬gÇme
+[
+¬g
+[2].
+¬g_ty³
+&
+A_MASK
+],¬g[2].
+¬g_±r
+.
+¬g_¬g
+);
+
+245 ià(
+¬g3
+)
+
+246
+ `årštf
+(
+¡d”r
+,",%s=%lx",
+
+247
+¬gÇme
+[
+¬g
+[3].
+¬g_ty³
+&
+A_MASK
+],¬g[3].
+¬g_±r
+.
+¬g_¬g
+);
+
+248 ià(
+ÃwËn
+ >= 4)
+
+249
+ `årštf
+(
+¡d”r
+,",%s=%lx",
+
+250
+¬gÇme
+[
+¬g
+[4].
+¬g_ty³
+&
+A_MASK
+],¬g[4].
+¬g_±r
+.
+¬g_¬g
+);
+
+251 ià(
+ÃwËn
+ >= 5)
+
+252
+ `årštf
+(
+¡d”r
+,",%s=%lx",
+
+253
+¬gÇme
+[
+¬g
+[5].
+¬g_ty³
+&
+A_MASK
+],¬g[5].
+¬g_±r
+.
+¬g_¬g
+);
+
+254
+ `årštf
+(
+¡d”r
+,")\n");
+
+257
+ `ev®¡©ic
+(
+¬g
+);
+
+258 
+¬g
+;
+
+259
+ }
+}
+
+262
+ $ev®¡©ic
+(
+¬g
+)
+
+263 
+ARG
+ *
+¬g
+;
+
+265 
+STR
+ *
+¡r
+;
+
+266 
+STR
+ *
+s1
+;
+
+267 
+STR
+ *
+s2
+;
+
+268 
+v®ue
+;
+
+269 *
+tmps
+;
+
+270 
+i
+;
+
+271 
+tm¶Úg
+;
+
+272 
+tmp2
+;
+
+273 
+ `exp
+(),
+ `log
+(),
+ `sq¹
+(),
+ `modf
+();
+
+274 *
+ `üy±
+();
+
+275 
+ `sš
+(),
+ `cos
+(),
+ `©ª2
+(),
+ `pow
+();
+
+277 ià(!
+¬g
+ || !¬g->
+¬g_Ën
+)
+
+280 ià((
+¬g
+[1].
+¬g_ty³
+ =ð
+A_SINGLE
+ ||‡rg->¬g_ty³ =ð
+O_AELEM
+) &&
+
+281 (
+¬g
+->
+¬g_Ën
+ =ð1 ||‡rg[2].
+¬g_ty³
+ =ð
+A_SINGLE
+) ) {
+
+282
+¡r
+ =
+ `SŒ_Ãw
+(20,0);
+
+283
+s1
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+;
+
+284 ià(
+¬g
+->
+¬g_Ën
+ > 1)
+
+285
+s2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+;
+
+287
+s2
+ =
+NuΡr
+;
+
+288 
+¬g
+->
+¬g_ty³
+) {
+
+289 
+O_AELEM
+:
+
+290
+i
+ = ()
+ `¡r_gnum
+(
+s2
+);
+
+291 ià(
+i
+ < 32767 && i >= 0) {
+
+292
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+293
+¬g
+->
+¬g_Ën
+ = 1;
+
+294
+¬g
+[1].
+¬g_ty³
+ =
+A_ARYSTAB
+;
+
+295
+¬g
+[1].
+¬g_Ën
+ =
+i
+;
+
+296
+ `¡r_ä“
+(
+s2
+);
+
+297
+¬g
+[2].
+¬g_ty³
+ =
+A_NULL
+;
+
+298
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+ =
+NuΡr
+;
+
+302
+ `¡r_ä“
+(
+¡r
+);
+
+303
+¡r
+ =
+NuΡr
+;
+
+305 
+O_CONCAT
+:
+
+306
+ `¡r_s£t
+(
+¡r
+,
+s1
+);
+
+307
+ `¡r_sÿt
+(
+¡r
+,
+s2
+);
+
+309 
+O_REPEAT
+:
+
+310
+i
+ = ()
+ `¡r_gnum
+(
+s2
+);
+
+311
+tmps
+ =
+ `¡r_g‘
+(
+s1
+);
+
+312
+ `¡r_n£t
+(
+¡r
+,"",0);
+
+313
+ `STR_GROW
+(
+¡r
+,
+i
+ *
+s1
+->
+¡r_cur
+ + 1);
+
+314
+ `»³©ýy
+(
+¡r
+->
+¡r_±r
+,
+tmps
+,
+s1
+->
+¡r_cur
+,
+i
+);
+
+315
+¡r
+->
+¡r_cur
+ =
+i
+ *
+s1
+->str_cur;
+
+316
+¡r
+->
+¡r_±r
+[¡r->
+¡r_cur
+] = '\0';
+
+318 
+O_MULTIPLY
+:
+
+319
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+320
+ `¡r_num£t
+(
+¡r
+,
+v®ue
+ *
+ `¡r_gnum
+(
+s2
+));
+
+322 
+O_DIVIDE
+:
+
+323
+v®ue
+ =
+ `¡r_gnum
+(
+s2
+);
+
+324 ià(
+v®ue
+ == 0.0)
+
+325
+ `yy”rÜ
+("Illegal division by constant zero");
+
+327 #ifdeà
+üay
+
+
+330 
+x
+;
+
+331 
+k
+;
+
+332
+x
+ =
+ `¡r_gnum
+(
+s1
+);
+
+333 ià(()()
+x
+ == x &&
+
+334 ()()
+v®ue
+ == value &&
+
+335 (
+k
+ = ()
+x
+/()
+v®ue
+)*()value == ()x) {
+
+336
+v®ue
+ =
+k
+;
+
+338
+v®ue
+ =
+x
+/value;
+
+340
+ `¡r_num£t
+(
+¡r
+,
+v®ue
+);
+
+343
+ `¡r_num£t
+(
+¡r
+,
+ `¡r_gnum
+(
+s1
+è/
+v®ue
+);
+
+346 
+O_MODULO
+:
+
+347
+tm¶Úg
+ = ()
+ `¡r_gnum
+(
+s2
+);
+
+348 ià(
+tm¶Úg
+ == 0L) {
+
+349
+ `yy”rÜ
+("Illegal modulus of constant zero");
+
+352
+tmp2
+ = ()
+ `¡r_gnum
+(
+s1
+);
+
+353 #iâdeà
+lšt
+
+
+354 ià(
+tmp2
+ >= 0)
+
+355
+ `¡r_num£t
+(
+¡r
+,()(
+tmp2
+ %
+tm¶Úg
+));
+
+357
+ `¡r_num£t
+(
+¡r
+,()((
+tm¶Úg
+-((-
+tmp2
+ - 1) %mplong)) - 1));
+
+359
+tmp2
+ =mp2;
+
+362 
+O_ADD
+:
+
+363
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+364
+ `¡r_num£t
+(
+¡r
+,
+v®ue
+ +
+ `¡r_gnum
+(
+s2
+));
+
+366 
+O_SUBTRACT
+:
+
+367
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+368
+ `¡r_num£t
+(
+¡r
+,
+v®ue
+ -
+ `¡r_gnum
+(
+s2
+));
+
+370 
+O_LEFT_SHIFT
+:
+
+371
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+372
+i
+ = ()
+ `¡r_gnum
+(
+s2
+);
+
+373 #iâdeà
+lšt
+
+
+374
+ `¡r_num£t
+(
+¡r
+,()((()
+v®ue
+è<<
+i
+));
+
+377 
+O_RIGHT_SHIFT
+:
+
+378
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+379
+i
+ = ()
+ `¡r_gnum
+(
+s2
+);
+
+380 #iâdeà
+lšt
+
+
+381
+ `¡r_num£t
+(
+¡r
+,()((()
+v®ue
+è>>
+i
+));
+
+384 
+O_LT
+:
+
+385
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+386
+ `¡r_num£t
+(
+¡r
+,(
+v®ue
+ <
+ `¡r_gnum
+(
+s2
+)) ? 1.0 : 0.0);
+
+388 
+O_GT
+:
+
+389
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+390
+ `¡r_num£t
+(
+¡r
+,(
+v®ue
+ >
+ `¡r_gnum
+(
+s2
+)) ? 1.0 : 0.0);
+
+392 
+O_LE
+:
+
+393
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+394
+ `¡r_num£t
+(
+¡r
+,(
+v®ue
+ <ð
+ `¡r_gnum
+(
+s2
+)) ? 1.0 : 0.0);
+
+396 
+O_GE
+:
+
+397
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+398
+ `¡r_num£t
+(
+¡r
+,(
+v®ue
+ >ð
+ `¡r_gnum
+(
+s2
+)) ? 1.0 : 0.0);
+
+400 
+O_EQ
+:
+
+401 ià(
+dow¬n
+) {
+
+402 ià((!
+s1
+->
+¡r_nok
+ && !
+ `looks_like_numb”
+(s1)) ||
+
+403 (!
+s2
+->
+¡r_nok
+ && !
+ `looks_like_numb”
+(s2)) )
+
+404
+ `w¬n
+("Possible use of == on string value");
+
+406
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+407
+ `¡r_num£t
+(
+¡r
+,(
+v®ue
+ =ð
+ `¡r_gnum
+(
+s2
+)) ? 1.0 : 0.0);
+
+409 
+O_NE
+:
+
+410
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+411
+ `¡r_num£t
+(
+¡r
+,(
+v®ue
+ !ð
+ `¡r_gnum
+(
+s2
+)) ? 1.0 : 0.0);
+
+413 
+O_NCMP
+:
+
+414
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+415
+v®ue
+ -ð
+ `¡r_gnum
+(
+s2
+);
+
+416 ià(
+v®ue
+ > 0.0)
+
+417
+v®ue
+ = 1.0;
+
+418 ià(
+v®ue
+ < 0.0)
+
+419
+v®ue
+ = -1.0;
+
+420
+ `¡r_num£t
+(
+¡r
+,
+v®ue
+);
+
+422 
+O_BIT_AND
+:
+
+423
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+424 #iâdeà
+lšt
+
+
+425
+ `¡r_num£t
+(
+¡r
+,()(
+ `U_L
+(
+v®ue
+è& U_L(
+ `¡r_gnum
+(
+s2
+))));
+
+428 
+O_XOR
+:
+
+429
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+430 #iâdeà
+lšt
+
+
+431
+ `¡r_num£t
+(
+¡r
+,()(
+ `U_L
+(
+v®ue
+è^ U_L(
+ `¡r_gnum
+(
+s2
+))));
+
+434 
+O_BIT_OR
+:
+
+435
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+436 #iâdeà
+lšt
+
+
+437
+ `¡r_num£t
+(
+¡r
+,()(
+ `U_L
+(
+v®ue
+è| U_L(
+ `¡r_gnum
+(
+s2
+))));
+
+440 
+O_AND
+:
+
+441 ià(
+ `¡r_Œue
+(
+s1
+))
+
+442
+ `¡r_s£t
+(
+¡r
+,
+s2
+);
+
+444
+ `¡r_s£t
+(
+¡r
+,
+s1
+);
+
+446 
+O_OR
+:
+
+447 ià(
+ `¡r_Œue
+(
+s1
+))
+
+448
+ `¡r_s£t
+(
+¡r
+,
+s1
+);
+
+450
+ `¡r_s£t
+(
+¡r
+,
+s2
+);
+
+452 
+O_COND_EXPR
+:
+
+453 ià((
+¬g
+[3].
+¬g_ty³
+ &
+A_MASK
+è!ð
+A_SINGLE
+) {
+
+454
+ `¡r_ä“
+(
+¡r
+);
+
+455
+¡r
+ =
+NuΡr
+;
+
+458 ià(
+ `¡r_Œue
+(
+s1
+))
+
+459
+ `¡r_s£t
+(
+¡r
+,
+s2
+);
+
+461
+ `¡r_s£t
+(
+¡r
+,
+¬g
+[3].
+¬g_±r
+.
+¬g_¡r
+);
+
+462
+ `¡r_ä“
+(
+¬g
+[3].
+¬g_±r
+.
+¬g_¡r
+);
+
+463
+¬g
+[3].
+¬g_±r
+.
+¬g_¡r
+ =
+NuΡr
+;
+
+466 
+O_NEGATE
+:
+
+467
+ `¡r_num£t
+(
+¡r
+,()(-
+ `¡r_gnum
+(
+s1
+)));
+
+469 
+O_NOT
+:
+
+470
+ `¡r_num£t
+(
+¡r
+,()(!
+ `¡r_Œue
+(
+s1
+)));
+
+472 
+O_COMPLEMENT
+:
+
+473 #iâdeà
+lšt
+
+
+474
+ `¡r_num£t
+(
+¡r
+,()(~
+ `U_L
+(
+ `¡r_gnum
+(
+s1
+))));
+
+477 
+O_SIN
+:
+
+478
+ `¡r_num£t
+(
+¡r
+,
+ `sš
+(
+ `¡r_gnum
+(
+s1
+)));
+
+480 
+O_COS
+:
+
+481
+ `¡r_num£t
+(
+¡r
+,
+ `cos
+(
+ `¡r_gnum
+(
+s1
+)));
+
+483 
+O_ATAN2
+:
+
+484
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+485
+ `¡r_num£t
+(
+¡r
+,
+ `©ª2
+(
+v®ue
+,
+ `¡r_gnum
+(
+s2
+)));
+
+487 
+O_POW
+:
+
+488
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+489
+ `¡r_num£t
+(
+¡r
+,
+ `pow
+(
+v®ue
+,
+ `¡r_gnum
+(
+s2
+)));
+
+491 
+O_LENGTH
+:
+
+492
+ `¡r_num£t
+(
+¡r
+, ()
+ `¡r_Ën
+(
+s1
+));
+
+494 
+O_SLT
+:
+
+495
+ `¡r_num£t
+(
+¡r
+,()(
+ `¡r_cmp
+(
+s1
+,
+s2
+) < 0));
+
+497 
+O_SGT
+:
+
+498
+ `¡r_num£t
+(
+¡r
+,()(
+ `¡r_cmp
+(
+s1
+,
+s2
+) > 0));
+
+500 
+O_SLE
+:
+
+501
+ `¡r_num£t
+(
+¡r
+,()(
+ `¡r_cmp
+(
+s1
+,
+s2
+) <= 0));
+
+503 
+O_SGE
+:
+
+504
+ `¡r_num£t
+(
+¡r
+,()(
+ `¡r_cmp
+(
+s1
+,
+s2
+) >= 0));
+
+506 
+O_SEQ
+:
+
+507
+ `¡r_num£t
+(
+¡r
+,()(
+ `¡r_eq
+(
+s1
+,
+s2
+)));
+
+509 
+O_SNE
+:
+
+510
+ `¡r_num£t
+(
+¡r
+,()(!
+ `¡r_eq
+(
+s1
+,
+s2
+)));
+
+512 
+O_SCMP
+:
+
+513
+ `¡r_num£t
+(
+¡r
+,()(
+ `¡r_cmp
+(
+s1
+,
+s2
+)));
+
+515 
+O_CRYPT
+:
+
+516 #ifdeà
+HAS_CRYPT
+
+
+517
+tmps
+ =
+ `¡r_g‘
+(
+s1
+);
+
+518
+ `¡r_£t
+(
+¡r
+,
+ `üy±
+(
+tmps
+,
+ `¡r_g‘
+(
+s2
+)));
+
+520
+ `yy”rÜ
+(
+
+524 
+O_EXP
+:
+
+525
+ `¡r_num£t
+(
+¡r
+,
+ `exp
+(
+ `¡r_gnum
+(
+s1
+)));
+
+527 
+O_LOG
+:
+
+528
+ `¡r_num£t
+(
+¡r
+,
+ `log
+(
+ `¡r_gnum
+(
+s1
+)));
+
+530 
+O_SQRT
+:
+
+531
+ `¡r_num£t
+(
+¡r
+,
+ `sq¹
+(
+ `¡r_gnum
+(
+s1
+)));
+
+533 
+O_INT
+:
+
+534
+v®ue
+ =
+ `¡r_gnum
+(
+s1
+);
+
+535 ià(
+v®ue
+ >= 0.0)
+
+536 ()
+ `modf
+(
+v®ue
+,&value);
+
+538 ()
+ `modf
+(-
+v®ue
+,&value);
+
+539
+v®ue
+ = -value;
+
+541
+ `¡r_num£t
+(
+¡r
+,
+v®ue
+);
+
+543 
+O_ORD
+:
+
+544 #iâdeà
+I286
+
+
+545
+ `¡r_num£t
+(
+¡r
+,()(*
+ `¡r_g‘
+(
+s1
+)));
+
+548 
+z­c
+;
+
+549 *
+z­s
+;
+
+551
+z­s
+ =
+ `¡r_g‘
+(
+s1
+);
+
+552
+z­c
+ = (è*
+z­s
+;
+
+553
+ `¡r_num£t
+(
+¡r
+,()(
+z­c
+));
+
+558 ià(
+¡r
+) {
+
+559
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+560
+ `¡r_ä“
+(
+s1
+);
+
+561
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+¡r
+;
+
+562 ià(
+s2
+) {
+
+563
+ `¡r_ä“
+(
+s2
+);
+
+564
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+ =
+NuΡr
+;
+
+565
+¬g
+[2].
+¬g_ty³
+ =
+A_NULL
+;
+
+569
+ }
+}
+
+571
+ARG
+ *
+
+572
+ $l
+(
+¬g
+)
+
+573 
+ARG
+ *
+¬g
+;
+
+575 
+i
+;
+
+576 
+ARG
+ *
+¬g1
+;
+
+577 
+ARG
+ *
+¬g2
+;
+
+578
+SPAT
+ *
+¥©
+;
+
+579 
+¬ghog
+ = 0;
+
+581
+i
+ =
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+;
+
+583
+¬g
+->
+¬g_æags
+ |ð
+AF_COMMON
+;
+
+586 ià(
+i
+ =ð
+A_ARYLEN
+) {
+
+587
+¬g
+[1].
+¬g_ty³
+ =
+A_LARYLEN
+;
+
+588 
+¬g
+;
+
+590 ià(
+i
+ =ð
+A_ARYSTAB
+) {
+
+591
+¬g
+[1].
+¬g_ty³
+ =
+A_LARYSTAB
+;
+
+592 
+¬g
+;
+
+597 ià(
+i
+ =ð
+A_EXPR
+ || i =ð
+A_LEXPR
+) {
+
+598
+¬g1
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+;
+
+600 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_LIST
+ ||‡rg1->¬g_ty³ =ð
+O_ITEM
+) {
+
+602 ià(
+¬g
+->
+¬g_Ën
+ > 1) {
+
+603
+ `dehoi¡
+(
+¬g
+,2);
+
+604
+¬g2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¬g
+;
+
+605 ià(
+ `nÙhšg_š_commÚ
+(
+¬g1
+,
+¬g2
+))
+
+606
+¬g
+->
+¬g_æags
+ &ð~
+AF_COMMON
+;
+
+607 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+) {
+
+608 ià(
+¬g1
+->
+¬g_æags
+ &
+AF_LOCAL
+)
+
+609
+¬g
+->
+¬g_æags
+ |ð
+AF_LOCAL
+;
+
+610
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+611
+¬g
+[2].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+614 ià(
+¬g
+->
+¬g_ty³
+ !ð
+O_CHOP
+)
+
+615
+¬g
+->
+¬g_ty³
+ =
+O_ASSIGN
+;
+
+616 
+i
+ =
+¬g1
+->
+¬g_Ën
+; i >= 1; i--) {
+
+617 
+¬g1
+[
+i
+].
+¬g_ty³
+) {
+
+618 
+A_STAR
+: 
+A_LSTAR
+:
+
+619
+¬g1
+[
+i
+].
+¬g_ty³
+ =
+A_LSTAR
+;
+
+621 
+A_STAB
+: 
+A_LVAL
+:
+
+622
+¬g1
+[
+i
+].
+¬g_ty³
+ =
+A_LVAL
+;
+
+624 
+A_ARYLEN
+: 
+A_LARYLEN
+:
+
+625
+¬g1
+[
+i
+].
+¬g_ty³
+ =
+A_LARYLEN
+;
+
+627 
+A_ARYSTAB
+: 
+A_LARYSTAB
+:
+
+628
+¬g1
+[
+i
+].
+¬g_ty³
+ =
+A_LARYSTAB
+;
+
+630 
+A_EXPR
+: 
+A_LEXPR
+:
+
+631
+¬g1
+[
+i
+].
+¬g_ty³
+ =
+A_LEXPR
+;
+
+632 
+¬g1
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+) {
+
+633 
+O_ARRAY
+: 
+O_LARRAY
+:
+
+634
+¬g1
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =
+O_LARRAY
+;
+
+635
+¬ghog
+ = 1;
+
+637 
+O_AELEM
+: 
+O_LAELEM
+:
+
+638
+¬g1
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =
+O_LAELEM
+;
+
+640 
+O_HASH
+: 
+O_LHASH
+:
+
+641
+¬g1
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =
+O_LHASH
+;
+
+642
+¬ghog
+ = 1;
+
+644 
+O_HELEM
+: 
+O_LHELEM
+:
+
+645
+¬g1
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =
+O_LHELEM
+;
+
+647 
+O_ASLICE
+: 
+O_LASLICE
+:
+
+648
+¬g1
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =
+O_LASLICE
+;
+
+650 
+O_HSLICE
+: 
+O_LHSLICE
+:
+
+651
+¬g1
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ =
+O_LHSLICE
+;
+
+654 
+žl_™em
+;
+
+658
+žl_™em
+:
+
+659 ()
+ `¥rštf
+(
+tok’buf
+, "Illegal item (%s)‡s†value",
+
+660
+¬gÇme
+[
+¬g1
+[
+i
+].
+¬g_ty³
+&
+A_MASK
+]);
+
+661
+ `yy”rÜ
+(
+tok’buf
+);
+
+664 ià(
+¬g
+->
+¬g_Ën
+ > 1) {
+
+665 ià(
+¬g2
+->
+¬g_ty³
+ =ð
+O_SPLIT
+ && !¬g2[3].¬g_ty³ && !
+¬ghog
+) {
+
+666
+¬g2
+[3].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+667
+¬g2
+[3].
+¬g_±r
+.
+¬g_¡r
+ =
+
+668
+ `¡r_nmake
+(()
+¬g1
+->
+¬g_Ën
+ + 1);
+
+672 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_AELEM
+ ||‡rg1->¬g_ty³ =ð
+O_LAELEM
+)
+
+673 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_DEFINED
+)
+
+674
+¬g1
+->
+¬g_ty³
+ =
+O_AELEM
+;
+
+676
+¬g1
+->
+¬g_ty³
+ =
+O_LAELEM
+;
+
+677 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_ARRAY
+ ||‡rg1->¬g_ty³ =ð
+O_LARRAY
+) {
+
+678
+¬g1
+->
+¬g_ty³
+ =
+O_LARRAY
+;
+
+679 ià(
+¬g
+->
+¬g_Ën
+ > 1) {
+
+680
+ `dehoi¡
+(
+¬g
+,2);
+
+681
+¬g2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¬g
+;
+
+682 ià(
+¬g2
+->
+¬g_ty³
+ =ð
+O_SPLIT
+) {
+
+683
+¥©
+ =
+¬g2
+[2].
+¬g_±r
+.
+¬g_¥©
+;
+
+684 ià(!(
+¥©
+->
+¥©_æags
+ &
+SPAT_ONCE
+) &&
+
+685
+ `nÙhšg_š_commÚ
+(
+¬g1
+,
+¥©
+->
+¥©_»¶
+)) {
+
+686
+¥©
+->
+¥©_»¶
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =
+
+687
+¬g1
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+688
+¬g1
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =
+NuΡab
+;
+
+689
+¥©
+->
+¥©_æags
+ |ð
+SPAT_ONCE
+;
+
+690
+ `¬g_ä“
+(
+¬g1
+);
+
+691
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+ =
+Nuάg
+;
+
+692
+ `ä“_¬g
+(
+¬g
+);
+
+693 
+¬g2
+;
+
+696 ià(
+ `nÙhšg_š_commÚ
+(
+¬g1
+,
+¬g2
+))
+
+697
+¬g
+->
+¬g_æags
+ &ð~
+AF_COMMON
+;
+
+698 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+) {
+
+699
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+700
+¬g
+[2].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+703 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+)
+
+704
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+706 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_HELEM
+ ||‡rg1->¬g_ty³ =ð
+O_LHELEM
+)
+
+707 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_DEFINED
+)
+
+708
+¬g1
+->
+¬g_ty³
+ =
+O_HELEM
+;
+
+710
+¬g1
+->
+¬g_ty³
+ =
+O_LHELEM
+;
+
+711 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_HASH
+ ||‡rg1->¬g_ty³ =ð
+O_LHASH
+) {
+
+712
+¬g1
+->
+¬g_ty³
+ =
+O_LHASH
+;
+
+713 ià(
+¬g
+->
+¬g_Ën
+ > 1) {
+
+714
+ `dehoi¡
+(
+¬g
+,2);
+
+715
+¬g2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¬g
+;
+
+716 ià(
+ `nÙhšg_š_commÚ
+(
+¬g1
+,
+¬g2
+))
+
+717
+¬g
+->
+¬g_æags
+ &ð~
+AF_COMMON
+;
+
+718 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+) {
+
+719
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+720
+¬g
+[2].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+723 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+)
+
+724
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+726 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_ASLICE
+) {
+
+727
+¬g1
+->
+¬g_ty³
+ =
+O_LASLICE
+;
+
+728 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+) {
+
+729
+ `dehoi¡
+(
+¬g
+,2);
+
+730
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+731
+¬g
+[2].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+734 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_HSLICE
+) {
+
+735
+¬g1
+->
+¬g_ty³
+ =
+O_LHSLICE
+;
+
+736 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+) {
+
+737
+ `dehoi¡
+(
+¬g
+,2);
+
+738
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+739
+¬g
+[2].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+742 ià((
+¬g
+->
+¬g_ty³
+ =ð
+O_DEFINED
+ ||‡rg->¬g_ty³ =ð
+O_UNDEF
+) &&
+
+743 (
+¬g1
+->
+¬g_ty³
+ =ð(
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+)) ) {
+
+744
+¬g
+[1].
+¬g_ty³
+ |ð
+A_DONT
+;
+
+746 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_SUBSTR
+ ||‡rg1->¬g_ty³ =ð
+O_VEC
+) {
+
+747 ()
+ `l
+(
+¬g1
+);
+
+748
+ `R’ewc
+(
+¬g1
+->
+¬g_±r
+.
+¬g_¡r
+, 1, 
+l¡ršg
+,
+STR
+);
+
+751 ià(
+¬g1
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+) {
+
+756 ()
+ `¥rštf
+(
+tok’buf
+,
+
+757 "IÎeg®ƒx´essiÚ (%sèa lv®ue",
+ÝÇme
+[
+¬g1
+->
+¬g_ty³
+]);
+
+758
+ `yy”rÜ
+(
+tok’buf
+);
+
+760
+¬g
+[1].
+¬g_ty³
+ =
+A_LEXPR
+ | (¬g[1].¬g_ty³ &
+A_DONT
+);
+
+761 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+ && (
+¬g1
+[1].
+¬g_æags
+ &
+AF_ARYOK
+)) {
+
+762
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+763 ià(
+¬g
+->
+¬g_Ën
+ > 1)
+
+764
+¬g
+[2].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+766 #ifdeà
+DEBUGGING
+
+
+767 ià(
+debug
+ & 16)
+
+768
+ `årštf
+(
+¡d”r
+,"lval LEXPR\n");
+
+770 
+¬g
+;
+
+772 ià(
+i
+ =ð
+A_STAR
+ || i =ð
+A_LSTAR
+) {
+
+773
+¬g
+[1].
+¬g_ty³
+ =
+A_LSTAR
+ | (¬g[1].¬g_ty³ &
+A_DONT
+);
+
+774 
+¬g
+;
+
+779 ià(
+i
+ !ð
+A_STAB
+ && i !ð
+A_LVAL
+) {
+
+780 ()
+ `¥rštf
+(
+tok’buf
+,
+
+781 "IÎeg® i‹m (%sèa lv®ue",
+¬gÇme
+[
+¬g
+[1].
+¬g_ty³
+&
+A_MASK
+]);
+
+782
+ `yy”rÜ
+(
+tok’buf
+);
+
+784
+¬g
+[1].
+¬g_ty³
+ =
+A_LVAL
+ | (¬g[1].¬g_ty³ &
+A_DONT
+);
+
+785 #ifdeà
+DEBUGGING
+
+
+786 ià(
+debug
+ & 16)
+
+787
+ `årštf
+(
+¡d”r
+,"lval LVAL\n");
+
+789 
+¬g
+;
+
+790
+ }
+}
+
+792
+ARG
+ *
+
+793
+ $fixl
+(
+ty³
+,
+¬g
+)
+
+794 
+ty³
+;
+
+795
+ARG
+ *
+¬g
+;
+
+797 ià(
+ty³
+ =ð
+O_DEFINED
+ ||y³ =ð
+O_UNDEF
+) {
+
+798 ià(
+¬g
+->
+¬g_ty³
+ !ð
+O_ITEM
+)
+
+799
+¬g
+ =
+ `hide_¬y
+(arg);
+
+800 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ITEM
+) {
+
+801
+ty³
+ =
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+;
+
+802 ià(
+ty³
+ =ð
+A_EXPR
+ ||y³ =ð
+A_LEXPR
+)
+
+803
+¬g
+[1].
+¬g_ty³
+ =
+A_LEXPR
+|
+A_DONT
+;
+
+806 
+¬g
+;
+
+807
+ }
+}
+
+809
+ $dehoi¡
+(
+¬g
+,
+i
+)
+
+810
+ARG
+ *
+¬g
+;
+
+812
+ARG
+ *
+tm·rg
+;
+
+814 ià(
+¬g
+[
+i
+].
+¬g_ty³
+ !ð
+A_EXPR
+) {
+
+815
+tm·rg
+ =
+ `make_Ý
+(
+O_ITEM
+,1,
+Nuάg
+,Nullarg,Nullarg);
+
+816
+tm·rg
+[1] =
+¬g
+[
+i
+];
+
+817
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+ =
+tm·rg
+;
+
+818
+¬g
+[
+i
+].
+¬g_ty³
+ =
+A_EXPR
+;
+
+820
+ }
+}
+
+822
+ARG
+ *
+
+823
+ $addæags
+(
+i
+,
+æags
+,
+¬g
+)
+
+824 
+ARG
+ *
+¬g
+;
+
+826
+¬g
+[
+i
+].
+¬g_æags
+ |ð
+æags
+;
+
+827 
+¬g
+;
+
+828
+ }
+}
+
+830
+ARG
+ *
+
+831
+ $hide_¬y
+(
+¬g
+)
+
+832
+ARG
+ *
+¬g
+;
+
+834 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_ARRAY
+ ||‡rg->¬g_ty³ =ð
+O_HASH
+)
+
+835 
+ `make_Ý
+(
+O_ITEM
+,1,
+¬g
+,
+Nuάg
+,Nullarg);
+
+836 
+¬g
+;
+
+837
+ }
+}
+
+841
+ARG
+ *
+
+842
+ $jmaybe
+(
+¬g
+)
+
+843 
+ARG
+ *
+¬g
+;
+
+845 ià(
+¬g
+ &&‡rg->
+¬g_ty³
+ =ð
+O_COMMA
+) {
+
+846
+¬g
+ =
+ `li¡ish
+(arg);
+
+847
+¬g
+ =
+ `make_Ý
+(
+O_JOIN
+, 2,
+
+848
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¡ab’t
+(";",
+TRUE
+)),
+
+849
+ `make_li¡
+(
+¬g
+),
+
+850
+Nuάg
+);
+
+852 
+¬g
+;
+
+853
+ }
+}
+
+855
+ARG
+ *
+
+856
+ $make_li¡
+(
+¬g
+)
+
+857 
+ARG
+ *
+¬g
+;
+
+859 
+i
+;
+
+860 
+ARG
+ *
+node
+;
+
+861 
+ARG
+ *
+nxŠode
+;
+
+862 
+j
+;
+
+863
+STR
+ *
+tmp¡r
+;
+
+865 ià(!
+¬g
+) {
+
+866
+¬g
+ =
+ `Ý_Ãw
+(0);
+
+867
+¬g
+->
+¬g_ty³
+ =
+O_LIST
+;
+
+869 ià(
+¬g
+->
+¬g_ty³
+ !ð
+O_COMMA
+) {
+
+870 ià(
+¬g
+->
+¬g_ty³
+ !ð
+O_ARRAY
+)
+
+871
+¬g
+->
+¬g_æags
+ |ð
+AF_LISTISH
+;
+
+872
+¬g
+->
+¬g_æags
+ |ð
+AF_LISTISH
+;
+
+873 
+¬g
+;
+
+875 
+i
+ = 2,
+node
+ =
+¬g
+; ; i++) {
+
+876 ià(
+node
+->
+¬g_Ën
+ < 2)
+
+878 ià(
+node
+[1].
+¬g_ty³
+ !ð
+A_EXPR
+)
+
+880
+node
+ =‚ode[1].
+¬g_±r
+.
+¬g_¬g
+;
+
+881 ià(
+node
+->
+¬g_ty³
+ !ð
+O_COMMA
+)
+
+884 ià(
+i
+ > 2) {
+
+885
+node
+ =
+¬g
+;
+
+886
+¬g
+ =
+ `Ý_Ãw
+(
+i
+);
+
+887
+tmp¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+888 #ifdeà
+STRUCTCOPY
+
+
+889 *
+¬g
+ = *
+node
+;
+
+891 ()
+ `bcÝy
+((*)
+node
+, (*)
+¬g
+, (
+ARG
+));
+
+893
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+ =
+tmp¡r
+;
+
+894 
+j
+ =
+i
+; ; ) {
+
+895 #ifdeà
+STRUCTCOPY
+
+
+896
+¬g
+[
+j
+] =
+node
+[2];
+
+898 ()
+ `bcÝy
+((*)(
+node
++2), (*)(
+¬g
++
+j
+), (
+ARG
+));
+
+900
+¬g
+[
+j
+].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+901 --
+j
+;
+
+902 ià(
+j
+ < 2) {
+
+903 #ifdeà
+STRUCTCOPY
+
+
+904
+¬g
+[1] =
+node
+[1];
+
+906 ()
+ `bcÝy
+((*)(
+node
++1), (*)(
+¬g
++1), (
+ARG
+));
+
+908
+ `ä“_¬g
+(
+node
+);
+
+911
+nxŠode
+ =
+node
+[1].
+¬g_±r
+.
+¬g_¬g
+;
+
+912
+ `ä“_¬g
+(
+node
+);
+
+913
+node
+ =
+nxŠode
+;
+
+916
+¬g
+[1].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+917
+¬g
+[2].
+¬g_æags
+ |ð
+AF_ARYOK
+;
+
+918
+¬g
+->
+¬g_ty³
+ =
+O_LIST
+;
+
+919
+¬g
+->
+¬g_Ën
+ =
+i
+;
+
+920 
+¬g
+;
+
+921
+ }
+}
+
+925
+ARG
+ *
+
+926
+ $li¡ish
+(
+¬g
+)
+
+927
+ARG
+ *
+¬g
+;
+
+929 ià(
+¬g
+->
+¬g_æags
+ &
+AF_LISTISH
+)
+
+930
+¬g
+ =
+ `make_Ý
+(
+O_LIST
+,1,¬g,
+Nuάg
+,Nullarg);
+
+931 
+¬g
+;
+
+932
+ }
+}
+
+934
+ARG
+ *
+
+935
+ $mayb–i¡ish
+(
+Ýty³
+,
+¬g
+)
+
+936 
+Ýty³
+;
+
+937
+ARG
+ *
+¬g
+;
+
+939
+ARG
+ *
+tm·rg
+ =
+¬g
+;
+
+941 ià(
+Ýty³
+ =ð
+O_RETURN
+ &&
+¬g
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&
+
+942
+¬g
+[1].
+¬g_ty³
+ =ð
+A_EXPR
+ && (
+tm·rg
+ =‡rg[1].
+¬g_±r
+.
+¬g_¬g
+) &&
+
+943 ((
+tm·rg
+->
+¬g_æags
+ &
+AF_LISTISH
+è|| (tm·rg->
+¬g_ty³
+ =ð
+O_ARRAY
+) )) {
+
+944
+tm·rg
+ =
+ `li¡ish
+(tmparg);
+
+945
+ `ä“_¬g
+(
+¬g
+);
+
+946
+¬g
+ =
+tm·rg
+;
+
+948 ià(
+Ýty³
+ =ð
+O_PRTF
+ ||
+
+949 (
+¬g
+->
+¬g_ty³
+ =ð
+O_ASLICE
+ ||‡rg->¬g_ty³ =ð
+O_HSLICE
+ ||
+
+950
+¬g
+->
+¬g_ty³
+ =ð
+O_F_OR_R
+) )
+
+951
+¬g
+ =
+ `li¡ish
+(arg);
+
+952 
+¬g
+;
+
+953
+ }
+}
+
+957
+ARG
+ *
+
+958
+ $loÿlize
+(
+¬g
+)
+
+959
+ARG
+ *
+¬g
+;
+
+961
+¬g
+->
+¬g_æags
+ |ð
+AF_LOCAL
+;
+
+962 
+¬g
+;
+
+963
+ }
+}
+
+965
+ARG
+ *
+
+966
+ $rÿtmaybe
+(
+¬g
+)
+
+967
+ARG
+ *
+¬g
+;
+
+969
+ARG
+ *
+¬g2
+;
+
+971 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_CONCAT
+ &&‡rg[2].¬g_ty³ =ð
+A_EXPR
+) {
+
+972
+¬g2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¬g
+;
+
+973 ià(
+¬g2
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&‡rg2[1].¬g_ty³ =ð
+A_READ
+) {
+
+974
+¬g
+->
+¬g_ty³
+ =
+O_RCAT
+;
+
+975
+¬g
+[2].
+¬g_ty³
+ =
+¬g2
+[1].arg_type;
+
+976
+¬g
+[2].
+¬g_±r
+ =
+¬g2
+[1].arg_ptr;
+
+977
+ `ä“_¬g
+(
+¬g2
+);
+
+980 
+¬g
+;
+
+981
+ }
+}
+
+983
+ARG
+ *
+
+984
+ $¡ab2¬g
+(
+©y³
+,
+¡ab
+)
+
+985 
+©y³
+;
+
+986 
+STAB
+ *
+¡ab
+;
+
+988 
+ARG
+ *
+¬g
+;
+
+990
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+991
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+992
+¬g
+[1].
+¬g_ty³
+ =
+©y³
+;
+
+993
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =
+¡ab
+;
+
+994 
+¬g
+;
+
+995
+ }
+}
+
+997
+ARG
+ *
+
+998
+ $cv®_to_¬g
+(
+cv®
+)
+
+999 *
+cv®
+;
+
+1001 
+ARG
+ *
+¬g
+;
+
+1003
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+1004
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+1005
+¬g
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+1006
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+ `¡r_make
+(
+cv®
+,0);
+
+1007
+ `Saãä“
+(
+cv®
+);
+
+1008 
+¬g
+;
+
+1009
+ }
+}
+
+1011
+ARG
+ *
+
+1012
+ $Ý_Ãw
+(
+num¬gs
+)
+
+1013 
+num¬gs
+;
+
+1015 
+ARG
+ *
+¬g
+;
+
+1017
+ `Newz
+(203,
+¬g
+,
+num¬gs
+ + 1,
+ARG
+);
+
+1018
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+ =
+ `SŒ_Ãw
+(21,0);
+
+1019
+¬g
+->
+¬g_Ën
+ =
+num¬gs
+;
+
+1020 
+¬g
+;
+
+1021
+ }
+}
+
+1024
+ $ä“_¬g
+(
+¬g
+)
+
+1025
+ARG
+ *
+¬g
+;
+
+1027
+ `¡r_ä“
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+);
+
+1028
+ `Saãä“
+(
+¬g
+);
+
+1029
+ }
+}
+
+1031
+ARG
+ *
+
+1032
+ $make_m©ch
+(
+ty³
+,
+ex´
+,
+¥©
+)
+
+1033 
+ty³
+;
+
+1034
+ARG
+ *
+ex´
+;
+
+1035
+SPAT
+ *
+¥©
+;
+
+1037 
+ARG
+ *
+¬g
+;
+
+1039
+¬g
+ =
+ `make_Ý
+(
+ty³
+,2,
+ex´
+,
+Nuάg
+,Nullarg);
+
+1041
+¬g
+[2].
+¬g_ty³
+ =
+A_SPAT
+|
+A_DONT
+;
+
+1042
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+ =
+¥©
+;
+
+1043 #ifdeà
+DEBUGGING
+
+
+1044 ià(
+debug
+ & 16)
+
+1045
+ `årštf
+(
+¡d”r
+,"make_m©ch SPAT=%lx\n",()
+¥©
+);
+
+1048 ià(
+ty³
+ =ð
+O_SUBST
+ ||y³ =ð
+O_NSUBST
+) {
+
+1049 ià(
+¬g
+[1].
+¬g_ty³
+ !ð
+A_STAB
+) {
+
+1050
+ `yy”rÜ
+("Illegal†value");
+
+1052
+¬g
+[1].
+¬g_ty³
+ =
+A_LVAL
+;
+
+1054 
+¬g
+;
+
+1055
+ }
+}
+
+1057
+ARG
+ *
+
+1058
+ $cmd_to_¬g
+(
+cmd
+)
+
+1059
+CMD
+ *
+cmd
+;
+
+1061 
+ARG
+ *
+¬g
+;
+
+1063
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+1064
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+1065
+¬g
+[1].
+¬g_ty³
+ =
+A_CMD
+;
+
+1066
+¬g
+[1].
+¬g_±r
+.
+¬g_cmd
+ =
+cmd
+;
+
+1067 
+¬g
+;
+
+1068
+ }
+}
+
+1073
+ $nÙhšg_š_commÚ
+(
+¬g1
+,
+¬g2
+)
+
+1074
+ARG
+ *
+¬g1
+;
+
+1075
+ARG
+ *
+¬g2
+;
+
+1077 
+thi£x´
+ = 0;
+
+1079
+thi£x´
+++;
+
+1080 ià(
+ `¬g_commÚ
+(
+¬g1
+,
+thi£x´
+,1))
+
+1082
+ `¡ab_Ï¡ex´
+(
+def¡ab
+èð
+thi£x´
+;
+
+1083 ià(
+ `¬g_commÚ
+(
+¬g2
+,
+thi£x´
+,0))
+
+1086
+ }
+}
+
+1093
+ $¬g_commÚ
+(
+¬g
+,
+ex´num
+,
+m¬kšg
+)
+
+1094 
+ARG
+ *
+¬g
+;
+
+1095 
+ex´num
+;
+
+1096 
+m¬kšg
+;
+
+1098 
+i
+;
+
+1100 ià(!
+¬g
+)
+
+1102 
+i
+ =
+¬g
+->
+¬g_Ën
+; i >= 1; i--) {
+
+1103 
+¬g
+[
+i
+].
+¬g_ty³
+ &
+A_MASK
+) {
+
+1104 
+A_NULL
+:
+
+1106 
+A_LEXPR
+:
+
+1107 
+A_EXPR
+:
+
+1108 ià(
+ `¬g_commÚ
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+,
+ex´num
+,
+m¬kšg
+))
+
+1111 
+A_CMD
+:
+
+1113 
+A_STAR
+:
+
+1114 
+A_LSTAR
+:
+
+1115 
+A_STAB
+:
+
+1116 
+A_LVAL
+:
+
+1117 
+A_ARYLEN
+:
+
+1118 
+A_LARYLEN
+:
+
+1119 ià(
+m¬kšg
+)
+
+1120
+ `¡ab_Ï¡ex´
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¡ab
+èð
+ex´num
+;
+
+1121 ià(
+ `¡ab_Ï¡ex´
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¡ab
+è=ð
+ex´num
+)
+
+1124 
+A_DOUBLE
+:
+
+1125 
+A_BACKTICK
+:
+
+1127 *
+s
+ =
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¡r
+->
+¡r_±r
+;
+
+1128 *
+£nd
+ =
+s
+ +
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¡r
+->
+¡r_cur
+;
+
+1129 
+STAB
+ *
+¡ab
+;
+
+1131 *
+s
+) {
+
+1132 ià(*
+s
+ == '$' && s[1]) {
+
+1133
+s
+ =
+ `sÿnid’t
+(s,
+£nd
+,
+tok’buf
+);
+
+1134
+¡ab
+ =
+ `¡ab’t
+(
+tok’buf
+,
+TRUE
+);
+
+1135 ià(
+m¬kšg
+)
+
+1136
+ `¡ab_Ï¡ex´
+(
+¡ab
+èð
+ex´num
+;
+
+1137 ià(
+ `¡ab_Ï¡ex´
+(
+¡ab
+è=ð
+ex´num
+)
+
+1141 ià(*
+s
+ == '\\' && s[1])
+
+1142
+s
+++;
+
+1143
+s
+++;
+
+1147 
+A_SPAT
+:
+
+1148 ià(
+ `¥©_commÚ
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¥©
+,
+ex´num
+,
+m¬kšg
+))
+
+1151 
+A_READ
+:
+
+1152 
+A_INDREAD
+:
+
+1153 
+A_GLOB
+:
+
+1154 
+A_WORD
+:
+
+1155 
+A_SINGLE
+:
+
+1159 
+¬g
+->
+¬g_ty³
+) {
+
+1160 
+O_ARRAY
+:
+
+1161 
+O_LARRAY
+:
+
+1162 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_STAB
+)
+
+1163 ()
+ `¯dd
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+1165 
+O_HASH
+:
+
+1166 
+O_LHASH
+:
+
+1167 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_STAB
+)
+
+1168 ()
+ `hadd
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+1170 
+O_EVAL
+:
+
+1171 
+O_SUBR
+:
+
+1172 
+O_DBSUBR
+:
+
+1176
+ }
+}
+
+1179
+ $¥©_commÚ
+(
+¥©
+,
+ex´num
+,
+m¬kšg
+)
+
+1180 
+SPAT
+ *
+¥©
+;
+
+1181 
+ex´num
+;
+
+1182 
+m¬kšg
+;
+
+1184 ià(
+¥©
+->
+¥©_ruÁime
+)
+
+1185 ià(
+ `¬g_commÚ
+(
+¥©
+->
+¥©_ruÁime
+,
+ex´num
+,
+m¬kšg
+))
+
+1187 ià(
+¥©
+->
+¥©_»¶
+) {
+
+1188 ià(
+ `¬g_commÚ
+(
+¥©
+->
+¥©_»¶
+,
+ex´num
+,
+m¬kšg
+))
+
+1192
+ }
+}
+
+ @doarg.c
+
+18 
+ ~"EXTERN.h
+"
+
+19 
+ ~"³¾.h
+"
+
+21 #ià!
+defšed
+(
+NSIG
+è|| defšed(
+M_UNIX
+è|| defšed(
+M_XENIX
+)
+
+22 
+ ~<sigÇl.h
+>
+
+25
+
+fÞd
+[];
+
+27 #ifdeà
+BUGGY_MSC
+
+
+28 #´agm¨
+funùiÚ
+(
+memcmp
+)
+
+32
+ $do_sub¡
+(
+¡r
+,
+¬g
+,
+)
+
+33
+STR
+ *
+¡r
+;
+
+34
+ARG
+ *
+¬g
+;
+
+35 
+;
+
+37 
+SPAT
+ *
+¥©
+;
+
+38
+SPAT
+ *
+r¥©
+;
+
+39 
+STR
+ *
+d¡r
+;
+
+40 *
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+41 *
+¡»nd
+ =
+s
+ +
+¡r
+->
+¡r_cur
+;
+
+42 *
+m
+;
+
+43 *
+c
+;
+
+44 *
+d
+;
+
+45 
+þ’
+;
+
+46 
+™”s
+ = 0;
+
+47 
+max™”s
+ = (
+¡»nd
+ -
+s
+) + 10;
+
+48 
+i
+;
+
+49
+boÞ
+
+Úû
+;
+
+50 *
+Üig
+;
+
+51 
+§ãba£
+;
+
+53
+r¥©
+ =
+¥©
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+;
+
+54 ià(!
+¥©
+ || !
+s
+)
+
+55
+ `çl
+("panic: do_subst");
+
+56 ià(
+¥©
+->
+¥©_ruÁime
+) {
+
+57
+nošŒp
+ = "|)";
+
+58 ()
+ `ev®
+(
+¥©
+->
+¥©_ruÁime
+,
+G_SCALAR
+,
+);
+
+59
+m
+ =
+ `¡r_g‘
+(
+d¡r
+ =
+¡ack
+->
+¬y_¬¿y
+[
++1]);
+
+60
+nošŒp
+ = "";
+
+61 ià(
+¥©
+->
+¥©_»gexp
+) {
+
+62
+ `»gä“
+(
+¥©
+->
+¥©_»gexp
+);
+
+63
+¥©
+->
+¥©_»gexp
+ =
+ `NuÎ
+(
+REGEXP
+*);
+
+65
+¥©
+->
+¥©_»gexp
+ =
+ `»gcomp
+(
+m
+,m+
+d¡r
+->
+¡r_cur
+,
+
+66
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+67 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_KEEP
+) {
+
+68
+ `¬g_ä“
+(
+¥©
+->
+¥©_ruÁime
+);
+
+69
+¥©
+->
+¥©_ruÁime
+ =
+Nuάg
+;
+
+72 #ifdeà
+DEBUGGING
+
+
+73 ià(
+debug
+ & 8) {
+
+74
+ `deb
+("2.SPAT /%s/\n",
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+);
+
+77
+§ãba£
+ = ((!
+¥©
+->
+¥©_»gexp
+ || !¥©->¥©_»gexp->
+Ŭ’s
+) &&
+
+78 !
+§wam³r§nd
+);
+
+79 ià(!*
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+ &&
+Ï¡¥©
+)
+
+80
+¥©
+ =
+Ï¡¥©
+;
+
+81
+Üig
+ =
+m
+ =
+s
+;
+
+82 ià(
+hšt
+) {
+
+83 ià(
+hšt
+ <
+s
+ || hšˆ>
+¡»nd
+)
+
+84
+ `çl
+("panic: hint in do_match");
+
+85
+s
+ =
+hšt
+;
+
+86
+hšt
+ =
+NuÎch
+;
+
+87 ià(
+¥©
+->
+¥©_»gexp
+->
+»gback
+ >= 0) {
+
+88
+s
+ -ð
+¥©
+->
+¥©_»gexp
+->
+»gback
+;
+
+89 ià(
+s
+ <
+m
+)
+
+90
+s
+ =
+m
+;
+
+93
+s
+ =
+m
+;
+
+95 ià(
+¥©
+->
+¥©_shÜt
+) {
+
+96 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_SCANFIRST
+) {
+
+97 ià(
+¡r
+->
+¡r_pok
+ &
+SP_STUDIED
+) {
+
+98 ià(
+sü—mfœ¡
+[
+¥©
+->
+¥©_shÜt
+->
+¡r_¿»
+] < 0)
+
+99 
+nÝe
+;
+
+100 ià(!(
+s
+ =
+ `sü—mš¡r
+(
+¡r
+,
+¥©
+->
+¥©_shÜt
+)))
+
+101 
+nÝe
+;
+
+103 #iâdeà
+lšt
+
+
+104 ià(!(
+s
+ =
+ `fbmš¡r
+((*)s, (*)
+¡»nd
+,
+
+105
+¥©
+->
+¥©_shÜt
+)))
+
+106 
+nÝe
+;
+
+108 ià(
+s
+ &&
+¥©
+->
+¥©_»gexp
+->
+»gback
+ >= 0) {
+
+109 ++
+¥©
+->
+¥©_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+110
+s
+ -ð
+¥©
+->
+¥©_»gexp
+->
+»gback
+;
+
+111 ià(
+s
+ <
+m
+)
+
+112
+s
+ =
+m
+;
+
+115
+s
+ =
+m
+;
+
+117 ià(!
+muÉžše
+ && (*
+¥©
+->
+¥©_shÜt
+->
+¡r_±r
+ !ð*
+s
+ ||
+
+118
+ `bcmp
+(
+¥©
+->
+¥©_shÜt
+->
+¡r_±r
+,
+s
+, s·t->
+¥©_¦’
+) ))
+
+119 
+nÝe
+;
+
+120 ià(--
+¥©
+->
+¥©_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+ < 0) {
+
+121
+ `¡r_ä“
+(
+¥©
+->
+¥©_shÜt
+);
+
+122
+¥©
+->
+¥©_shÜt
+ =
+NuΡr
+;
+
+125
+Úû
+ = ((
+r¥©
+->
+¥©_æags
+ &
+SPAT_ONCE
+) != 0);
+
+126 ià(
+r¥©
+->
+¥©_æags
+ &
+SPAT_CONST
+) {
+
+127 ià((
+r¥©
+->
+¥©_»¶
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+)
+
+128
+d¡r
+ =
+r¥©
+->
+¥©_»¶
+[1].
+¬g_±r
+.
+¬g_¡r
+;
+
+130 ()
+ `ev®
+(
+r¥©
+->
+¥©_»¶
+,
+G_SCALAR
+,
+);
+
+131
+d¡r
+ =
+¡ack
+->
+¬y_¬¿y
+[
++1];
+
+133
+c
+ =
+ `¡r_g‘
+(
+d¡r
+);
+
+134
+þ’
+ =
+d¡r
+->
+¡r_cur
+;
+
+135 ià(
+þ’
+ <ð
+¥©
+->
+¥©_¦’
+ + ()¥©->
+¥©_»gexp
+->
+»gback
+) {
+
+137 ià(
+ `»gexec
+(
+¥©
+->
+¥©_»gexp
+,
+s
+,
+¡»nd
+,
+Üig
+, 0,
+
+138
+¡r
+->
+¡r_pok
+ &
+SP_STUDIED
+ ? sΠ:
+NuΡr
+,
+§ãba£
+)) {
+
+139 ià(
+¥©
+->
+¥©_»gexp
+->
+subba£
+)
+
+140 
+lÚg_way
+;
+
+141
+d
+ =
+s
+;
+
+142
+Ï¡¥©
+ =
+¥©
+;
+
+143
+¡r
+->
+¡r_pok
+ =
+SP_VALID
+;
+
+144 ià(
+Úû
+) {
+
+145
+m
+ =
+¥©
+->
+¥©_»gexp
+->
+¡¬
+[0];
+
+146
+d
+ =
+¥©
+->
+¥©_»gexp
+->
+’dp
+[0];
+
+147
+s
+ =
+Üig
+;
+
+148 ià(
+m
+ -
+s
+ >
+¡»nd
+ -
+d
+) {
+
+149 ià(
+þ’
+) {
+
+150 ()
+ `bcÝy
+(
+c
+,
+m
+,
+þ’
+);
+
+151
+m
+ +ð
+þ’
+;
+
+153
+i
+ =
+¡»nd
+ -
+d
+;
+
+154 ià(
+i
+ > 0) {
+
+155 ()
+ `bcÝy
+(
+d
+,
+m
+,
+i
+);
+
+156
+m
+ +ð
+i
+;
+
+158 *
+m
+ = '\0';
+
+159
+¡r
+->
+¡r_cur
+ =
+m
+ -
+s
+;
+
+160
+ `STABSET
+(
+¡r
+);
+
+161
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, 1.0);
+
+162
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+163 
+;
+
+165 ià(
+i
+ =
+m
+ -
+s
+) {
+
+166
+d
+ -ð
+þ’
+;
+
+167
+m
+ =
+d
+;
+
+168
+ `¡r_chÝ
+(
+¡r
+,
+d
+-
+i
+);
+
+169
+s
+ +ð
+i
+;
+
+170 
+i
+--)
+
+171 *--
+d
+ = *--
+s
+;
+
+172 ià(
+þ’
+)
+
+173 ()
+ `bcÝy
+(
+c
+,
+m
+,
+þ’
+);
+
+174
+ `STABSET
+(
+¡r
+);
+
+175
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, 1.0);
+
+176
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+177 
+;
+
+179 ià(
+þ’
+) {
+
+180
+d
+ -ð
+þ’
+;
+
+181
+ `¡r_chÝ
+(
+¡r
+,
+d
+);
+
+182 ()
+ `bcÝy
+(
+c
+,
+d
+,
+þ’
+);
+
+183
+ `STABSET
+(
+¡r
+);
+
+184
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, 1.0);
+
+185
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+186 
+;
+
+189
+ `¡r_chÝ
+(
+¡r
+,
+d
+);
+
+190
+ `STABSET
+(
+¡r
+);
+
+191
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, 1.0);
+
+192
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+193 
+;
+
+198 ià(
+™”s
+++ >
+max™”s
+)
+
+199
+ `çl
+("Substitution†oop");
+
+200
+m
+ =
+¥©
+->
+¥©_»gexp
+->
+¡¬
+[0];
+
+201 ià(
+i
+ =
+m
+ -
+s
+) {
+
+202 ià(
+s
+ !ð
+d
+)
+
+203 ()
+ `bcÝy
+(
+s
+,
+d
+,
+i
+);
+
+204
+d
+ +ð
+i
+;
+
+206 ià(
+þ’
+) {
+
+207 ()
+ `bcÝy
+(
+c
+,
+d
+,
+þ’
+);
+
+208
+d
+ +ð
+þ’
+;
+
+210
+s
+ =
+¥©
+->
+¥©_»gexp
+->
+’dp
+[0];
+
+211 } 
+ `»gexec
+(
+¥©
+->
+¥©_»gexp
+,
+s
+,
+¡»nd
+,
+Üig
+, s =ð
+m
+,
+
+212
+NuΡr
+,
+TRUE
+));
+
+213 ià(
+s
+ !ð
+d
+) {
+
+214
+i
+ =
+¡»nd
+ -
+s
+;
+
+215
+¡r
+->
+¡r_cur
+ =
+d
+ - sŒ->
+¡r_±r
+ +
+i
+;
+
+216 ()
+ `bcÝy
+(
+s
+,
+d
+,
+i
++1);
+
+218
+ `STABSET
+(
+¡r
+);
+
+219
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, ()
+™”s
+);
+
+220
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+221 
+;
+
+223
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, 0.0);
+
+224
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+225 
+;
+
+229
+c
+ =
+NuÎch
+;
+
+230 ià(
+ `»gexec
+(
+¥©
+->
+¥©_»gexp
+,
+s
+,
+¡»nd
+,
+Üig
+, 0,
+
+231
+¡r
+->
+¡r_pok
+ &
+SP_STUDIED
+ ? sΠ:
+NuΡr
+,
+§ãba£
+)) {
+
+232
+lÚg_way
+:
+
+233
+d¡r
+ =
+ `SŒ_Ãw
+(25,
+ `¡r_Ën
+(
+¡r
+));
+
+234
+ `¡r_n£t
+(
+d¡r
+,
+m
+,
+s
+-m);
+
+235 ià(
+¥©
+->
+¥©_»gexp
+->
+subba£
+)
+
+236
+cur¥©
+ =
+¥©
+;
+
+237
+Ï¡¥©
+ =
+¥©
+;
+
+239 ià(
+™”s
+++ >
+max™”s
+)
+
+240
+ `çl
+("Substitution†oop");
+
+241 ià(
+¥©
+->
+¥©_»gexp
+->
+subba£
+
+
+242 &&
+¥©
+->
+¥©_»gexp
+->
+subba£
+ !ð
+Üig
+) {
+
+243
+m
+ =
+s
+;
+
+244
+s
+ =
+Üig
+;
+
+245
+Üig
+ =
+¥©
+->
+¥©_»gexp
+->
+subba£
+;
+
+246
+s
+ =
+Üig
+ + (
+m
+ - s);
+
+247
+¡»nd
+ =
+s
+ + (¡»nd -
+m
+);
+
+249
+m
+ =
+¥©
+->
+¥©_»gexp
+->
+¡¬
+[0];
+
+250
+ `¡r_nÿt
+(
+d¡r
+,
+s
+,
+m
+-s);
+
+251
+s
+ =
+¥©
+->
+¥©_»gexp
+->
+’dp
+[0];
+
+252 ià(
+c
+) {
+
+253 ià(
+þ’
+)
+
+254
+ `¡r_nÿt
+(
+d¡r
+,
+c
+,
+þ’
+);
+
+257 *
+mysubba£
+ =
+¥©
+->
+¥©_»gexp
+->
+subba£
+;
+
+259
+¥©
+->
+¥©_»gexp
+->
+subba£
+ =
+NuÎch
+;
+
+260 ()
+ `ev®
+(
+r¥©
+->
+¥©_»¶
+,
+G_SCALAR
+,
+);
+
+261
+ `¡r_sÿt
+(
+d¡r
+,
+¡ack
+->
+¬y_¬¿y
+[
++1]);
+
+262 ià(
+¥©
+->
+¥©_»gexp
+->
+subba£
+)
+
+263
+ `Saãä“
+(
+¥©
+->
+¥©_»gexp
+->
+subba£
+);
+
+264
+¥©
+->
+¥©_»gexp
+->
+subba£
+ =
+mysubba£
+;
+
+266 ià(
+Úû
+)
+
+268 } 
+ `»gexec
+(
+¥©
+->
+¥©_»gexp
+,
+s
+,
+¡»nd
+,
+Üig
+, s =ð
+m
+,
+NuΡr
+,
+
+269
+§ãba£
+));
+
+270
+ `¡r_nÿt
+(
+d¡r
+,
+s
+,
+¡»nd
+ - s);
+
+271
+ `¡r_»¶aû
+(
+¡r
+,
+d¡r
+);
+
+272
+ `STABSET
+(
+¡r
+);
+
+273
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, ()
+™”s
+);
+
+274
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+275 
+;
+
+277
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, 0.0);
+
+278
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+279 
+;
+
+281
+nÝe
+:
+
+282 ++
+¥©
+->
+¥©_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+283
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+, 0.0);
+
+284
+¡ack
+->
+¬y_¬¿y
+[++
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+285 
+;
+
+286
+ }
+}
+
+287 #ifdeà
+BUGGY_MSC
+
+
+288 #´agm¨
+šŒšsic
+(
+memcmp
+)
+
+292
+ $do_λs
+(
+¡r
+,
+¬g
+)
+
+293
+STR
+ *
+¡r
+;
+
+294
+ARG
+ *
+¬g
+;
+
+296 *
+tbl
+;
+
+297 *
+s
+;
+
+298 
+m©ches
+ = 0;
+
+299 
+ch
+;
+
+300 *
+£nd
+;
+
+301 *
+d
+;
+
+302 
+squash
+ =
+¬g
+[2].
+¬g_Ën
+ & 1;
+
+304
+tbl
+ = (*è
+¬g
+[2].
+¬g_±r
+.
+¬g_cv®
+;
+
+305
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+306
+£nd
+ =
+s
+ +
+¡r
+->
+¡r_cur
+;
+
+307 ià(!
+tbl
+ || !
+s
+)
+
+308
+ `çl
+("panic: do_trans");
+
+309 #ifdeà
+DEBUGGING
+
+
+310 ià(
+debug
+ & 8) {
+
+311
+ `deb
+("2.TBL\n");
+
+314 ià(!
+¬g
+[2].
+¬g_Ën
+) {
+
+315 
+s
+ <
+£nd
+) {
+
+316 ià((
+ch
+ =
+tbl
+[*
+s
+ & 0377]) >= 0) {
+
+317
+m©ches
+++;
+
+318 *
+s
+ =
+ch
+;
+
+320
+s
+++;
+
+324
+d
+ =
+s
+;
+
+325 
+s
+ <
+£nd
+) {
+
+326 ià((
+ch
+ =
+tbl
+[*
+s
+ & 0377]) >= 0) {
+
+327 *
+d
+ =
+ch
+;
+
+328 ià(
+m©ches
+++ &&
+squash
+) {
+
+329 ià(
+d
+[-1] == *d)
+
+330
+m©ches
+--;
+
+332
+d
+++;
+
+335
+d
+++;
+
+337 ià(
+ch
+ == -1)
+
+338 *
+d
+++ = *
+s
+;
+
+339
+s
+++;
+
+341
+m©ches
+ +ð
+£nd
+ -
+d
+;
+
+342 *
+d
+ = '\0';
+
+343
+¡r
+->
+¡r_cur
+ =
+d
+ - sŒ->
+¡r_±r
+;
+
+345
+ `STABSET
+(
+¡r
+);
+
+346 
+m©ches
+;
+
+347
+ }
+}
+
+350
+ $do_još
+(
+¡r
+,
+¬gÏ¡
+)
+
+351 
+STR
+ *
+¡r
+;
+
+352 *
+¬gÏ¡
+;
+
+354 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+355 
+ =
+¬gÏ¡
+[1];
+
+356 
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+357 *
+d–im
+ =
+ `¡r_g‘
+(
+[
+]);
+
+358 
+d–imËn
+ =
+[
+]->
+¡r_cur
+;
+
+360
+ +ð++
+;
+
+361 ià(
+™ems
+-- > 0)
+
+362
+ `¡r_s£t
+(
+¡r
+, *
+++);
+
+364
+ `¡r_£t
+(
+¡r
+,"");
+
+365 ià(
+d–imËn
+) {
+
+366 ;
+™ems
+ > 0; i‹ms--,
+++) {
+
+367
+ `¡r_nÿt
+(
+¡r
+,
+d–im
+,
+d–imËn
+);
+
+368
+ `¡r_sÿt
+(
+¡r
+,*
+);
+
+372 ;
+™ems
+ > 0; i‹ms--,
+++)
+
+373
+ `¡r_sÿt
+(
+¡r
+,*
+);
+
+375
+ `STABSET
+(
+¡r
+);
+
+376
+ }
+}
+
+379
+ $do_·ck
+(
+¡r
+,
+¬gÏ¡
+)
+
+380 
+STR
+ *
+¡r
+;
+
+381 *
+¬gÏ¡
+;
+
+383 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+384 
+ =
+¬gÏ¡
+[1];
+
+385 
+™ems
+;
+
+386 *
+·t
+ =
+ `¡r_g‘
+(
+[
+]);
+
+387 *
+·‹nd
+ =
+·t
+ +
+[
+]->
+¡r_cur
+;
+
+388 
+Ën
+;
+
+389 
+d©umty³
+;
+
+390
+STR
+ *
+äom¡r
+;
+
+391 *
+nuÎ10
+ = "\0\0\0\0\0\0\0\0\0\0";
+
+392 *
+¥aû10
+ = " ";
+
+395 
+ach¬
+;
+
+396 
+ashÜt
+;
+
+397 
+ašt
+;
+
+398 
+aušt
+;
+
+399 
+®Úg
+;
+
+400 
+aulÚg
+;
+
+401 *
+­Œ
+;
+
+402 
+aæßt
+;
+
+403 
+adoubË
+;
+
+405
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+406
+ +ð++
+;
+
+407
+ `¡r_n£t
+(
+¡r
+,"",0);
+
+408 
+·t
+ <
+·‹nd
+) {
+
+409 
+ #NEXTFROM
+ (
+™ems
+-- > 0 ? *
+++ : &
+¡r_no
+)
+
+ )
+
+410
+d©umty³
+ = *
+·t
+++;
+
+411 ià(*
+·t
+ == '*') {
+
+412
+Ën
+ =
+ `šdex
+("@Xxu",
+d©umty³
+è? 0 :
+™ems
+;
+
+413
+·t
+++;
+
+415 ià(
+ `isdig™
+(*
+·t
+)) {
+
+416
+Ën
+ = *
+·t
+++ - '0';
+
+417 
+ `isdig™
+(*
+·t
+))
+
+418
+Ën
+ = (ËÀ* 10è+ (*
+·t
+++ - '0');
+
+421
+Ën
+ = 1;
+
+422 
+d©umty³
+) {
+
+426
+ `çl
+("% may only be used in unpack");
+
+428
+Ën
+ -ð
+¡r
+->
+¡r_cur
+;
+
+429 ià(
+Ën
+ > 0)
+
+430 
+grow
+;
+
+431
+Ën
+ = -len;
+
+432 ià(
+Ën
+ > 0)
+
+433 
+shršk
+;
+
+436
+shršk
+:
+
+437 ià(
+¡r
+->
+¡r_cur
+ <
+Ën
+)
+
+438
+ `çl
+("X outside of string");
+
+439
+¡r
+->
+¡r_cur
+ -ð
+Ën
+;
+
+440
+¡r
+->
+¡r_±r
+[¡r->
+¡r_cur
+] = '\0';
+
+443
+grow
+:
+
+444 
+Ën
+ >= 10) {
+
+445
+ `¡r_nÿt
+(
+¡r
+,
+nuÎ10
+,10);
+
+446
+Ën
+ -= 10;
+
+448
+ `¡r_nÿt
+(
+¡r
+,
+nuÎ10
+,
+Ën
+);
+
+452
+äom¡r
+ =
+NEXTFROM
+;
+
+453
+­Œ
+ =
+ `¡r_g‘
+(
+äom¡r
+);
+
+454 ià(
+·t
+[-1] == '*')
+
+455
+Ën
+ =
+äom¡r
+->
+¡r_cur
+;
+
+456 ià(
+äom¡r
+->
+¡r_cur
+ >
+Ën
+)
+
+457
+ `¡r_nÿt
+(
+¡r
+,
+­Œ
+,
+Ën
+);
+
+459
+ `¡r_nÿt
+(
+¡r
+,
+­Œ
+,
+äom¡r
+->
+¡r_cur
+);
+
+460
+Ën
+ -ð
+äom¡r
+->
+¡r_cur
+;
+
+461 ià(
+d©umty³
+ == 'A') {
+
+462 
+Ën
+ >= 10) {
+
+463
+ `¡r_nÿt
+(
+¡r
+,
+¥aû10
+,10);
+
+464
+Ën
+ -= 10;
+
+466
+ `¡r_nÿt
+(
+¡r
+,
+¥aû10
+,
+Ën
+);
+
+469 
+Ën
+ >= 10) {
+
+470
+ `¡r_nÿt
+(
+¡r
+,
+nuÎ10
+,10);
+
+471
+Ën
+ -= 10;
+
+473
+ `¡r_nÿt
+(
+¡r
+,
+nuÎ10
+,
+Ën
+);
+
+480 *
+§v•©
+ =
+·t
+;
+
+481 
+§ve™ems
+ =
+™ems
+;
+
+483
+äom¡r
+ =
+NEXTFROM
+;
+
+484
+­Œ
+ =
+ `¡r_g‘
+(
+äom¡r
+);
+
+485 ià(
+·t
+[-1] == '*')
+
+486
+Ën
+ =
+äom¡r
+->
+¡r_cur
+;
+
+487
+·t
+ =
+­Œ
+;
+
+488
+ašt
+ =
+¡r
+->
+¡r_cur
+;
+
+489
+¡r
+->
+¡r_cur
+ +ð(
+Ën
++7)/8;
+
+490
+ `STR_GROW
+(
+¡r
+, sŒ->
+¡r_cur
+ + 1);
+
+491
+­Œ
+ =
+¡r
+->
+¡r_±r
+ +
+ašt
+;
+
+492 ià(
+Ën
+ >
+äom¡r
+->
+¡r_cur
+)
+
+493
+Ën
+ =
+äom¡r
+->
+¡r_cur
+;
+
+494
+ašt
+ =
+Ën
+;
+
+495
+™ems
+ = 0;
+
+496 ià(
+d©umty³
+ == 'B') {
+
+497 
+Ën
+ = 0;†’++ <
+ašt
+;) {
+
+498
+™ems
+ |ð*
+·t
+++ & 1;
+
+499 ià(
+Ën
+ & 7)
+
+500
+™ems
+ <<= 1;
+
+502 *
+­Œ
+++ =
+™ems
+ & 0xff;
+
+503
+™ems
+ = 0;
+
+508 
+Ën
+ = 0;†’++ <
+ašt
+;) {
+
+509 ià(*
+·t
+++ & 1)
+
+510
+™ems
+ |= 128;
+
+511 ià(
+Ën
+ & 7)
+
+512
+™ems
+ >>= 1;
+
+514 *
+­Œ
+++ =
+™ems
+ & 0xff;
+
+515
+™ems
+ = 0;
+
+519 ià(
+ašt
+ & 7) {
+
+520 ià(
+d©umty³
+ == 'B')
+
+521
+™ems
+ <<ð7 - (
+ašt
+ & 7);
+
+523
+™ems
+ >>ð7 - (
+ašt
+ & 7);
+
+524 *
+­Œ
+++ =
+™ems
+ & 0xff;
+
+526
+·t
+ =
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+;
+
+527 
+­Œ
+ <ð
+·t
+)
+
+528 *
+­Œ
+++ = '\0';
+
+530
+·t
+ =
+§v•©
+;
+
+531
+™ems
+ =
+§ve™ems
+;
+
+537 *
+§v•©
+ =
+·t
+;
+
+538 
+§ve™ems
+ =
+™ems
+;
+
+540
+äom¡r
+ =
+NEXTFROM
+;
+
+541
+­Œ
+ =
+ `¡r_g‘
+(
+äom¡r
+);
+
+542 ià(
+·t
+[-1] == '*')
+
+543
+Ën
+ =
+äom¡r
+->
+¡r_cur
+;
+
+544
+·t
+ =
+­Œ
+;
+
+545
+ašt
+ =
+¡r
+->
+¡r_cur
+;
+
+546
+¡r
+->
+¡r_cur
+ +ð(
+Ën
++1)/2;
+
+547
+ `STR_GROW
+(
+¡r
+, sŒ->
+¡r_cur
+ + 1);
+
+548
+­Œ
+ =
+¡r
+->
+¡r_±r
+ +
+ašt
+;
+
+549 ià(
+Ën
+ >
+äom¡r
+->
+¡r_cur
+)
+
+550
+Ën
+ =
+äom¡r
+->
+¡r_cur
+;
+
+551
+ašt
+ =
+Ën
+;
+
+552
+™ems
+ = 0;
+
+553 ià(
+d©umty³
+ == 'H') {
+
+554 
+Ën
+ = 0;†’++ <
+ašt
+;) {
+
+555 ià(
+ `i§Íha
+(*
+·t
+))
+
+556
+™ems
+ |ð((*
+·t
+++ & 15) + 9) & 15;
+
+558
+™ems
+ |ð*
+·t
+++ & 15;
+
+559 ià(
+Ën
+ & 1)
+
+560
+™ems
+ <<= 4;
+
+562 *
+­Œ
+++ =
+™ems
+ & 0xff;
+
+563
+™ems
+ = 0;
+
+568 
+Ën
+ = 0;†’++ <
+ašt
+;) {
+
+569 ià(
+ `i§Íha
+(*
+·t
+))
+
+570
+™ems
+ |ð(((*
+·t
+++ & 15) + 9) & 15) << 4;
+
+572
+™ems
+ |ð(*
+·t
+++ & 15) << 4;
+
+573 ià(
+Ën
+ & 1)
+
+574
+™ems
+ >>= 4;
+
+576 *
+­Œ
+++ =
+™ems
+ & 0xff;
+
+577
+™ems
+ = 0;
+
+581 ià(
+ašt
+ & 1)
+
+582 *
+­Œ
+++ =
+™ems
+ & 0xff;
+
+583
+·t
+ =
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+;
+
+584 
+­Œ
+ <ð
+·t
+)
+
+585 *
+­Œ
+++ = '\0';
+
+587
+·t
+ =
+§v•©
+;
+
+588
+™ems
+ =
+§ve™ems
+;
+
+593 
+Ën
+-- > 0) {
+
+594
+äom¡r
+ =
+NEXTFROM
+;
+
+595
+ašt
+ = ()
+ `¡r_gnum
+(
+äom¡r
+);
+
+596
+ach¬
+ =
+ašt
+;
+
+597
+ `¡r_nÿt
+(
+¡r
+,&
+ach¬
+,());
+
+603 
+Ën
+-- > 0) {
+
+604
+äom¡r
+ =
+NEXTFROM
+;
+
+605
+aæßt
+ = ()
+ `¡r_gnum
+(
+äom¡r
+);
+
+606
+ `¡r_nÿt
+(
+¡r
+, (*)&
+aæßt
+,  ());
+
+611 
+Ën
+-- > 0) {
+
+612
+äom¡r
+ =
+NEXTFROM
+;
+
+613
+adoubË
+ = ()
+ `¡r_gnum
+(
+äom¡r
+);
+
+614
+ `¡r_nÿt
+(
+¡r
+, (*)&
+adoubË
+,  ());
+
+618 
+Ën
+-- > 0) {
+
+619
+äom¡r
+ =
+NEXTFROM
+;
+
+620
+ashÜt
+ = ()
+ `¡r_gnum
+(
+äom¡r
+);
+
+621 #ifdeà
+HAS_HTONS
+
+
+622
+ashÜt
+ =
+ `htÚs
+(ashort);
+
+624
+ `¡r_nÿt
+(
+¡r
+,(*)&
+ashÜt
+,());
+
+629 
+Ën
+-- > 0) {
+
+630
+äom¡r
+ =
+NEXTFROM
+;
+
+631
+ashÜt
+ = ()
+ `¡r_gnum
+(
+äom¡r
+);
+
+632
+ `¡r_nÿt
+(
+¡r
+,(*)&
+ashÜt
+,());
+
+636 
+Ën
+-- > 0) {
+
+637
+äom¡r
+ =
+NEXTFROM
+;
+
+638
+aušt
+ =
+ `U_I
+(
+ `¡r_gnum
+(
+äom¡r
+));
+
+639
+ `¡r_nÿt
+(
+¡r
+,(*)&
+aušt
+,());
+
+643 
+Ën
+-- > 0) {
+
+644
+äom¡r
+ =
+NEXTFROM
+;
+
+645
+ašt
+ = ()
+ `¡r_gnum
+(
+äom¡r
+);
+
+646
+ `¡r_nÿt
+(
+¡r
+,(*)&
+ašt
+,());
+
+650 
+Ën
+-- > 0) {
+
+651
+äom¡r
+ =
+NEXTFROM
+;
+
+652
+aulÚg
+ =
+ `U_L
+(
+ `¡r_gnum
+(
+äom¡r
+));
+
+653 #ifdeà
+HAS_HTONL
+
+
+654
+aulÚg
+ =
+ `htÚl
+(aulong);
+
+656
+ `¡r_nÿt
+(
+¡r
+,(*)&
+aulÚg
+,());
+
+660 
+Ën
+-- > 0) {
+
+661
+äom¡r
+ =
+NEXTFROM
+;
+
+662
+aulÚg
+ =
+ `U_L
+(
+ `¡r_gnum
+(
+äom¡r
+));
+
+663
+ `¡r_nÿt
+(
+¡r
+,(*)&
+aulÚg
+,());
+
+667 
+Ën
+-- > 0) {
+
+668
+äom¡r
+ =
+NEXTFROM
+;
+
+669
+®Úg
+ = ()
+ `¡r_gnum
+(
+äom¡r
+);
+
+670
+ `¡r_nÿt
+(
+¡r
+,(*)&
+®Úg
+,());
+
+674 
+Ën
+-- > 0) {
+
+675
+äom¡r
+ =
+NEXTFROM
+;
+
+676
+­Œ
+ =
+ `¡r_g‘
+(
+äom¡r
+);
+
+677
+ `¡r_nÿt
+(
+¡r
+,(*)&
+­Œ
+,(*));
+
+681
+äom¡r
+ =
+NEXTFROM
+;
+
+682
+­Œ
+ =
+ `¡r_g‘
+(
+äom¡r
+);
+
+683
+ašt
+ =
+äom¡r
+->
+¡r_cur
+;
+
+684
+ `STR_GROW
+(
+¡r
+,
+ašt
+ * 4 / 3);
+
+685 ià(
+Ën
+ <= 1)
+
+686
+Ën
+ = 45;
+
+688
+Ën
+ =†en / 3 * 3;
+
+689 
+ašt
+ > 0) {
+
+690 
+todo
+;
+
+692 ià(
+ašt
+ >
+Ën
+)
+
+693
+todo
+ =
+Ën
+;
+
+695
+todo
+ =
+ašt
+;
+
+696
+ `dÛncodes
+(
+¡r
+,
+­Œ
+,
+todo
+);
+
+697
+ašt
+ -ð
+todo
+;
+
+698
+­Œ
+ +ð
+todo
+;
+
+703
+ `STABSET
+(
+¡r
+);
+
+704
+ }
+}
+
+705 #undeà
+NEXTFROM
+
+
+707
+ $dÛncodes
+(
+¡r
+,
+s
+,
+Ën
+)
+
+708 
+STR
+ *
+¡r
+;
+
+709 *
+s
+;
+
+710 
+Ën
+;
+
+712 
+hunk
+[5];
+
+714 *
+hunk
+ =
+Ën
+ + ' ';
+
+715
+ `¡r_nÿt
+(
+¡r
+,
+hunk
+, 1);
+
+716
+hunk
+[4] = '\0';
+
+717 
+Ën
+ > 0) {
+
+718
+hunk
+[0] = ' ' + (077 & (*
+s
+ >> 2));
+
+719
+hunk
+[1] = ' ' + (077 & ((*
+s
+ << 4) & 060 | (s[1] >> 4) & 017));
+
+720
+hunk
+[2] = ' ' + (077 & ((
+s
+[1] << 2) & 074 | (s[2] >> 6) & 03));
+
+721
+hunk
+[3] = ' ' + (077 & (
+s
+[2] & 077));
+
+722
+ `¡r_nÿt
+(
+¡r
+,
+hunk
+, 4);
+
+723
+s
+ += 3;
+
+724
+Ën
+ -= 3;
+
+726 
+s
+ =
+¡r
+->
+¡r_±r
+; *s; s++) {
+
+727 ià(*
+s
+ == ' ')
+
+728 *
+s
+ = '`';
+
+730
+ `¡r_nÿt
+(
+¡r
+, "\n", 1);
+
+731
+ }
+}
+
+734
+ $do_¥rštf
+(
+¡r
+,
+Ën
+,
+§rg
+)
+
+735 
+STR
+ *
+¡r
+;
+
+736 
+Ën
+;
+
+737 
+STR
+ **
+§rg
+;
+
+739 *
+s
+;
+
+740 *
+t
+;
+
+741 *
+f
+;
+
+742
+boÞ
+
+dÞÚg
+;
+
+743 
+ch
+;
+
+744 
+STR
+ *
+§rgnuÎ
+ = &
+¡r_no
+;
+
+745 *
+£nd
+;
+
+746 *
+xs
+;
+
+747 
+xËn
+;
+
+748 
+v®ue
+;
+
+749 *
+Üigs
+;
+
+751
+ `¡r_£t
+(
+¡r
+,"");
+
+752
+Ën
+--;
+
+753
+Üigs
+ =
+t
+ =
+s
+ =
+ `¡r_g‘
+(*
+§rg
+);
+
+754
+£nd
+ =
+s
+ + (*
+§rg
+)->
+¡r_cur
+;
+
+755
+§rg
+++;
+
+756  ; ;
+Ën
+--) {
+
+757 ià(
+Ën
+ <ð0 || !*
+§rg
+) {
+
+758
+§rg
+ = &
+§rgnuÎ
+;
+
+759
+Ën
+ = 0;
+
+761  ;
+t
+ <
+£nd
+ && *t != '%';++) ;
+
+762 ià(
+t
+ >ð
+£nd
+)
+
+764
+f
+ =
+t
+;
+
+765 *
+buf
+ = '\0';
+
+766
+xs
+ =
+buf
+;
+
+767
+dÞÚg
+ =
+FALSE
+;
+
+768 
+t
+++; <
+£nd
+;++) {
+
+769 *
+t
+) {
+
+771
+ch
+ = *(++
+t
+);
+
+772 *
+t
+ = '\0';
+
+773 ()
+ `¥rštf
+(
+xs
+,
+f
+);
+
+774
+Ën
+++;
+
+775
+xËn
+ =
+ `¡¾’
+(
+xs
+);
+
+782
+dÞÚg
+ =
+TRUE
+;
+
+785
+ch
+ = *(++
+t
+);
+
+786 *
+t
+ = '\0';
+
+787
+xËn
+ = ()
+ `¡r_gnum
+(*(
+§rg
+++));
+
+788 ià(
+ `¡rEQ
+(
+f
+,"%c")) {
+
+789 *
+xs
+ =
+xËn
+;
+
+790
+xs
+[1] = '\0';
+
+791
+xËn
+ = 1;
+
+794 ()
+ `¥rštf
+(
+xs
+,
+f
+,
+xËn
+);
+
+795
+xËn
+ =
+ `¡¾’
+(
+xs
+);
+
+799
+dÞÚg
+ =
+TRUE
+;
+
+802
+ch
+ = *(++
+t
+);
+
+803 *
+t
+ = '\0';
+
+804 ià(
+dÞÚg
+)
+
+805 ()
+ `¥rštf
+(
+xs
+,
+f
+,()
+ `¡r_gnum
+(*(
+§rg
+++)));
+
+807 ()
+ `¥rštf
+(
+xs
+,
+f
+,()
+ `¡r_gnum
+(*(
+§rg
+++)));
+
+808
+xËn
+ =
+ `¡¾’
+(
+xs
+);
+
+811
+dÞÚg
+ =
+TRUE
+;
+
+814
+ch
+ = *(++
+t
+);
+
+815 *
+t
+ = '\0';
+
+816
+v®ue
+ =
+ `¡r_gnum
+(*(
+§rg
+++));
+
+817 ià(
+dÞÚg
+)
+
+818 ()
+ `¥rštf
+(
+xs
+,
+f
+,
+ `U_L
+(
+v®ue
+));
+
+820 ()
+ `¥rštf
+(
+xs
+,
+f
+,
+ `U_I
+(
+v®ue
+));
+
+821
+xËn
+ =
+ `¡¾’
+(
+xs
+);
+
+824
+ch
+ = *(++
+t
+);
+
+825 *
+t
+ = '\0';
+
+826 ()
+ `¥rštf
+(
+xs
+,
+f
+,
+ `¡r_gnum
+(*(
+§rg
+++)));
+
+827
+xËn
+ =
+ `¡¾’
+(
+xs
+);
+
+830
+ch
+ = *(++
+t
+);
+
+831 *
+t
+ = '\0';
+
+832
+xs
+ =
+ `¡r_g‘
+(*
+§rg
+);
+
+833
+xËn
+ = (*
+§rg
+)->
+¡r_cur
+;
+
+834 ià(*
+xs
+ == 'S' && xs[1] == 't' && xs[2] == 'B' && xs[3] == '\0'
+
+835 &&
+xËn
+ =ð(
+STBP
+)) {
+
+836
+STR
+ *
+tmp¡r
+ =
+ `SŒ_Ãw
+(24,0);
+
+838
+ `¡ab_fuÎÇme
+(
+tmp¡r
+, ((
+STAB
+*)(*
+§rg
+)));
+
+839
+ `¥rštf
+(
+tok’buf
+,"*%s",
+tmp¡r
+->
+¡r_±r
+);
+
+841
+xs
+ =
+tok’buf
+;
+
+842
+xËn
+ =
+ `¡¾’
+(
+tok’buf
+);
+
+843
+ `¡r_ä“
+(
+tmp¡r
+);
+
+845
+§rg
+++;
+
+846 ià(
+ `¡rEQ
+(
+f
+,"%s")) {
+
+849
+ `¡rýy
+(
+tok’buf
++64,
+f
+);
+
+850 *
+t
+ =
+ch
+;
+
+851 ()
+ `¥rštf
+(
+buf
+,
+tok’buf
++64,
+xs
+);
+
+852
+xs
+ =
+buf
+;
+
+853
+xËn
+ =
+ `¡¾’
+(
+xs
+);
+
+857 *
+t
+ =
+ch
+;
+
+858
+ `STR_GROW
+(
+¡r
+, sŒ->
+¡r_cur
+ + (
+f
+ -
+s
+è+
+Ën
+ + 1);
+
+859
+ `¡r_nÿt
+(
+¡r
+,
+s
+,
+f
+ - s);
+
+860
+ `¡r_nÿt
+(
+¡r
+,
+xs
+,
+xËn
+);
+
+861
+s
+ =
+t
+;
+
+865
+ `¡r_nÿt
+(
+¡r
+,
+s
+,
+t
+ - s);
+
+866
+ `STABSET
+(
+¡r
+);
+
+867
+ }
+}
+
+869
+STR
+ *
+
+870
+ $do_push
+(
+¬y
+,
+¬gÏ¡
+)
+
+871 
+ARRAY
+ *
+¬y
+;
+
+872 *
+¬gÏ¡
+;
+
+874 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+875 
+ =
+¬gÏ¡
+[1];
+
+876 
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+877 
+STR
+ *
+¡r
+ = &
+¡r_undef
+;
+
+879 
+ +ð++
+;
+™ems
+ > 0; items--,st++) {
+
+880
+¡r
+ =
+ `SŒ_Ãw
+(26,0);
+
+881 ià(*
+)
+
+882
+ `¡r_s£t
+(
+¡r
+,*
+);
+
+883 ()
+ `­ush
+(
+¬y
+,
+¡r
+);
+
+885 
+¡r
+;
+
+886
+ }
+}
+
+889
+ $do_unshiá
+(
+¬y
+,
+¬gÏ¡
+)
+
+890 
+ARRAY
+ *
+¬y
+;
+
+891 *
+¬gÏ¡
+;
+
+893 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+894 
+ =
+¬gÏ¡
+[1];
+
+895 
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+896 
+STR
+ *
+¡r
+;
+
+897 
+i
+;
+
+899
+ `aunshiá
+(
+¬y
+,
+™ems
+);
+
+900
+i
+ = 0;
+
+901 
+ +ð++
+;
+i
+ <
+™ems
+; i++,st++) {
+
+902
+¡r
+ =
+ `SŒ_Ãw
+(27,0);
+
+903
+ `¡r_s£t
+(
+¡r
+,*
+);
+
+904 ()
+ `a¡Üe
+(
+¬y
+,
+i
+,
+¡r
+);
+
+906
+ }
+}
+
+909
+ $do_subr
+(
+¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+910 
+ARG
+ *
+¬g
+;
+
+911 
+gimme
+;
+
+912 *
+¬gÏ¡
+;
+
+914 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+915 
+ =
+¬gÏ¡
+[1];
+
+916 
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+917 
+SUBR
+ *
+sub
+;
+
+918
+STR
+ *
+¡r
+;
+
+919
+STAB
+ *
+¡ab
+;
+
+920 
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+921 
+Þdtmps_ba£
+ =
+tmps_ba£
+;
+
+922 
+ha§rgs
+ = ((
+¬g
+[2].
+¬g_ty³
+ &
+A_MASK
+è!ð
+A_NULL
+);
+
+923 
+CSV
+ *
+csv
+;
+
+925 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+926
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+928
+STR
+ *
+tmp¡r
+ =
+ `¡ab_v®
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+930 ià(
+tmp¡r
+)
+
+931
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+tmp¡r
+),
+TRUE
+);
+
+933
+¡ab
+ =
+NuΡab
+;
+
+935 ià(!
+¡ab
+)
+
+936
+ `çl
+("Undefined subroutine called");
+
+937 ià(!(
+sub
+ =
+ `¡ab_sub
+(
+¡ab
+))) {
+
+938
+STR
+ *
+tmp¡r
+ =
+¬g
+[0].
+¬g_±r
+.
+¬g_¡r
+;
+
+940
+ `¡ab_fuÎÇme
+(
+tmp¡r
+,
+¡ab
+);
+
+941
+ `çl
+("Undefšed subroutš\"%s\" c®Ëd",
+tmp¡r
+->
+¡r_±r
+);
+
+943 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_DBSUBR
+ && !
+sub
+->
+u£rsub
+) {
+
+944
+¡r
+ =
+ `¡ab_v®
+(
+DBsub
+);
+
+945
+ `§ve™em
+(
+¡r
+);
+
+946
+ `¡ab_fuÎÇme
+(
+¡r
+,
+¡ab
+);
+
+947
+sub
+ =
+ `¡ab_sub
+(
+DBsub
+);
+
+948 ià(!
+sub
+)
+
+949
+ `çl
+("No DBsub„outine");
+
+951
+¡r
+ =
+ `SŒ_Ãw
+(15, (
+CSV
+));
+
+952
+¡r
+->
+¡r_¡©e
+ =
+SS_SCSV
+;
+
+953 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+954
+csv
+ = (
+CSV
+*)
+¡r
+->
+¡r_±r
+;
+
+955
+csv
+->
+sub
+ = sub;
+
+956
+csv
+->
+¡ab
+ = stab;
+
+957
+csv
+->
+curcsv
+ = curcsv;
+
+958
+csv
+->
+curcmd
+ = curcmd;
+
+959
+csv
+->
+d•th
+ =
+sub
+->depth;
+
+960
+csv
+->
+wª¼ay
+ =
+gimme
+;
+
+961
+csv
+->
+ha§rgs
+ = hasargs;
+
+962
+curcsv
+ =
+csv
+;
+
+963 ià(
+sub
+->
+u£rsub
+) {
+
+964
+csv
+->
+ha§rgs
+ = 0;
+
+965
+csv
+->
+§v—¼ay
+ =
+ `NuÎ
+(
+ARRAY
+*);;
+
+966
+csv
+->
+¬g¬¿y
+ =
+ `NuÎ
+(
+ARRAY
+*);
+
+967
+[
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+968 ià(!
+ha§rgs
+)
+
+969
+™ems
+ = 0;
+
+970  (*
+sub
+->
+u£rsub
+)(sub->
+u£ršdex
+,
+,
+™ems
+);
+
+972 ià(
+ha§rgs
+) {
+
+973
+csv
+->
+§v—¼ay
+ =
+ `¡ab_x¬¿y
+(
+def¡ab
+);
+
+974
+csv
+->
+¬g¬¿y
+ =
+ `açke
+(
+def¡ab
+,
+™ems
+, &
+[
++1]);
+
+975
+ `¡ab_x¬¿y
+(
+def¡ab
+èð
+csv
+->
+¬g¬¿y
+;
+
+977
+sub
+->
+d•th
+++;
+
+978 ià(
+sub
+->
+d•th
+ >= 2) {
+
+979 ià(
+sub
+->
+d•th
+ =ð100 &&
+dow¬n
+)
+
+980
+ `w¬n
+("D“°»cursiÚ oÀsubroutš\"%s\"",
+ `¡ab_Çme
+(
+¡ab
+));
+
+981
+ `§v–i¡
+(
+sub
+->
+to§ve
+->
+¬y_¬¿y
+,sub->to§ve->
+¬y_fžl
+);
+
+983
+tmps_ba£
+ =
+tmps_max
+;
+
+984
+ =
+ `cmd_exec
+(
+sub
+->
+cmd
+,
+gimme
+, --sp);
+
+985
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+987
+tmps_ba£
+ =
+Þdtmps_ba£
+;
+
+988 
+™ems
+ =
+¬gÏ¡
+[0] + 1; i‹m <ð
+; items++)
+
+989
+[
+™ems
+] =
+ `¡r_mÜl
+(st[items]);
+
+991
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+992 
+;
+
+993
+ }
+}
+
+996
+ $do_assign
+(
+¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+997 
+ARG
+ *
+¬g
+;
+
+998 
+gimme
+;
+
+999 *
+¬gÏ¡
+;
+
+1002 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1003
+STR
+ **
+fœ¡»Ëm
+ =
+ +
+¬gÏ¡
+[1] + 1;
+
+1004
+STR
+ **
+fœ¡ËËm
+ =
+ +
+¬gÏ¡
+[0] + 1;
+
+1005
+STR
+ **
+Ï¡»Ëm
+ =
+ +
+¬gÏ¡
+[2];
+
+1006
+STR
+ **
+Ï¡ËËm
+ =
+ +
+¬gÏ¡
+[1];
+
+1007 
+STR
+ **
+»Ëm
+;
+
+1008 
+STR
+ **
+ËËm
+;
+
+1010 
+STR
+ *
+¡r
+;
+
+1011 
+ARRAY
+ *
+¬y
+;
+
+1012 
+mak–oÿl
+;
+
+1013
+HASH
+ *
+hash
+;
+
+1014 
+i
+;
+
+1016
+mak–oÿl
+ = (
+¬g
+->
+¬g_æags
+ &
+AF_LOCAL
+);
+
+1017
+loÿlizšg
+ =
+mak–oÿl
+;
+
+1018
+d–aymagic
+ =
+DM_DELAY
+;
+
+1024 ià(
+¬g
+->
+¬g_æags
+ &
+AF_COMMON
+) {
+
+1025 
+»Ëm
+ =
+fœ¡»Ëm
+;„–em <ð
+Ï¡»Ëm
+;„elem++) {
+
+1026 ià(
+¡r
+ = *
+»Ëm
+)
+
+1027 *
+»Ëm
+ =
+ `¡r_mÜl
+(
+¡r
+);
+
+1030
+»Ëm
+ =
+fœ¡»Ëm
+;
+
+1031
+ËËm
+ =
+fœ¡ËËm
+;
+
+1032
+¬y
+ =
+ `NuÎ
+(
+ARRAY
+*);
+
+1033
+hash
+ =
+ `NuÎ
+(
+HASH
+*);
+
+1034 
+ËËm
+ <ð
+Ï¡ËËm
+) {
+
+1035
+¡r
+ = *
+ËËm
+++;
+
+1036 ià(
+¡r
+->
+¡r_¡©e
+ >ð
+SS_HASH
+) {
+
+1037 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_ARY
+) {
+
+1038 ià(
+mak–oÿl
+)
+
+1039
+¬y
+ =
+ `§v—ry
+(
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+);
+
+1041
+¬y
+ =
+ `¡ab_¬¿y
+(
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+);
+
+1042
+¬y
+->
+¬y_fžl
+ = -1;
+
+1044
+i
+ = 0;
+
+1045 
+»Ëm
+ <ð
+Ï¡»Ëm
+) {
+
+1046
+¡r
+ =
+ `SŒ_Ãw
+(28,0);
+
+1047 ià(*
+»Ëm
+)
+
+1048
+ `¡r_s£t
+(
+¡r
+,*
+»Ëm
+);
+
+1049 *(
+»Ëm
+++èð
+¡r
+;
+
+1050 ()
+ `a¡Üe
+(
+¬y
+,
+i
+++,
+¡r
+);
+
+1053 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_HASH
+) {
+
+1054 *
+tmps
+;
+
+1055
+STR
+ *
+tmp¡r
+;
+
+1056 
+magic
+ = 0;
+
+1057
+STAB
+ *
+tmp¡ab
+ =
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+;
+
+1059 ià(
+mak–oÿl
+)
+
+1060
+hash
+ =
+ `§vehash
+(
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+);
+
+1062
+hash
+ =
+ `¡ab_hash
+(
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+);
+
+1063 ià(
+tmp¡ab
+ =ð
+’v¡ab
+) {
+
+1064
+magic
+ = 'E';
+
+1065
+’vœÚ
+[0] =
+NuÎch
+;
+
+1067 ià(
+tmp¡ab
+ =ð
+sig¡ab
+) {
+
+1068
+magic
+ = 'S';
+
+1069 #iâdeà
+NSIG
+
+
+1070 
+ #NSIG
+ 32
+
+ )
+
+1072 
+i
+ = 1; i <
+NSIG
+; i++)
+
+1073
+ `sigÇl
+(
+i
+,
+SIG_DFL
+);
+
+1075 #ifdeà
+SOME_DBM
+
+
+1076 ià(
+hash
+->
+tbl_dbm
+)
+
+1077
+magic
+ = 'D';
+
+1079
+ `hþ—r
+(
+hash
+,
+magic
+ == 'D');
+
+1082 
+»Ëm
+ <
+Ï¡»Ëm
+) {
+
+1083 ià(*
+»Ëm
+)
+
+1084
+¡r
+ = *(
+»Ëm
+++);
+
+1086
+¡r
+ = &
+¡r_no
+,
+»Ëm
+++;
+
+1087
+tmps
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+1088
+tmp¡r
+ =
+ `SŒ_Ãw
+(29,0);
+
+1089 ià(*
+»Ëm
+)
+
+1090
+ `¡r_s£t
+(
+tmp¡r
+,*
+»Ëm
+);
+
+1091 *(
+»Ëm
+++èð
+tmp¡r
+;
+
+1092 ()
+ `h¡Üe
+(
+hash
+,
+tmps
+,
+¡r
+->
+¡r_cur
+,
+tmp¡r
+,0);
+
+1093 ià(
+magic
+) {
+
+1094
+ `¡r_magic
+(
+tmp¡r
+,
+tmp¡ab
+,
+magic
+,
+tmps
+,
+¡r
+->
+¡r_cur
+);
+
+1095
+ `¡ab£t
+(
+tmp¡r
+->
+¡r_magic
+,mpstr);
+
+1100
+ `çl
+("panic: do_assign");
+
+1103 ià(
+mak–oÿl
+)
+
+1104
+ `§ve™em
+(
+¡r
+);
+
+1105 ià(
+»Ëm
+ <ð
+Ï¡»Ëm
+) {
+
+1106
+ `¡r_s£t
+(
+¡r
+, *
+»Ëm
+);
+
+1107 *(
+»Ëm
+++èð
+¡r
+;
+
+1110
+ `¡r_s£t
+(
+¡r
+, &
+¡r_undef
+);
+
+1111 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1112
+i
+ = ++
+Ï¡»Ëm
+ -
+fœ¡»Ëm
+;
+
+1113
+»Ëm
+++;
+
+1114
+ `a¡Üe
+(
+¡ack
+,
+i
+,
+¡r
+);
+
+1115 ià(
+ !ð
+¡ack
+->
+¬y_¬¿y
+) {
+
+1116
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1117
+fœ¡»Ëm
+ =
+ +
+¬gÏ¡
+[1] + 1;
+
+1118
+fœ¡ËËm
+ =
+ +
+¬gÏ¡
+[0] + 1;
+
+1119
+Ï¡ËËm
+ =
+ +
+¬gÏ¡
+[1];
+
+1120
+Ï¡»Ëm
+ =
+ +
+i
+;
+
+1121
+»Ëm
+ =
+Ï¡»Ëm
+ + 1;
+
+1125
+ `STABSET
+(
+¡r
+);
+
+1128 ià(
+d–aymagic
+ > 1) {
+
+1129 ià(
+d–aymagic
+ &
+DM_REUID
+) {
+
+1130 #ifdeà
+HAS_SETREUID
+
+
+1131
+ `£Œeuid
+(
+uid
+,
+euid
+);
+
+1133 ià(
+uid
+ !ð
+euid
+ ||
+ `£tuid
+(uid) < 0)
+
+1134
+ `çl
+("No setreuid‡vailable");
+
+1137 ià(
+d–aymagic
+ &
+DM_REGID
+) {
+
+1138 #ifdeà
+HAS_SETREGID
+
+
+1139
+ `£Œegid
+(
+gid
+,
+egid
+);
+
+1141 ià(
+gid
+ !ð
+egid
+ ||
+ `£tgid
+(gid) < 0)
+
+1142
+ `çl
+("No setregid‡vailable");
+
+1146
+d–aymagic
+ = 0;
+
+1147
+loÿlizšg
+ =
+FALSE
+;
+
+1148 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1149
+i
+ =
+Ï¡»Ëm
+ -
+fœ¡»Ëm
+ + 1;
+
+1150 ià(
+¬y
+ ||
+hash
+)
+
+1151
+ `CÝy
+(
+fœ¡»Ëm
+,
+fœ¡ËËm
+,
+i
+,
+STR
+*);
+
+1152 
+¬gÏ¡
+[0] +
+i
+;
+
+1155
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+,()(
+¬gÏ¡
+[2] -‡rglast[1]));
+
+1156 *
+fœ¡ËËm
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+1157 
+¬gÏ¡
+[0] + 1;
+
+1159
+ }
+}
+
+1162
+ $do_¡udy
+(
+¡r
+,
+¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+1163
+STR
+ *
+¡r
+;
+
+1164
+ARG
+ *
+¬g
+;
+
+1165 
+gimme
+;
+
+1166 *
+¬gÏ¡
+;
+
+1168 *
+s
+;
+
+1169 
+pos
+ =
+¡r
+->
+¡r_cur
+;
+
+1170 
+ch
+;
+
+1171 *
+sfœ¡
+;
+
+1172 *
+¢ext
+;
+
+1173 
+maxsü—m
+ = -1;
+
+1174 
+STR
+ *
+Ï¡sü—m
+ =
+NuΡr
+;
+
+1175 
+»tv®
+;
+
+1176 
+»rg
+ =
+¬gÏ¡
+[0] + 1;
+
+1178 #iâdeà
+lšt
+
+
+1179
+s
+ = (*)(
+ `¡r_g‘
+(
+¡r
+));
+
+1181
+s
+ =
+ `NuÎ
+(*);
+
+1183 ià(
+Ï¡sü—m
+)
+
+1184
+Ï¡sü—m
+->
+¡r_pok
+ &ð~
+SP_STUDIED
+;
+
+1185
+Ï¡sü—m
+ =
+¡r
+;
+
+1186 ià(
+pos
+ <= 0) {
+
+1187
+»tv®
+ = 0;
+
+1188 
+»t
+;
+
+1190 ià(
+pos
+ >
+maxsü—m
+) {
+
+1191 ià(
+maxsü—m
+ < 0) {
+
+1192
+maxsü—m
+ =
+pos
+ + 80;
+
+1193
+ `New
+(301,
+sü—mfœ¡
+, 256, );
+
+1194
+ `New
+(302,
+sü—mÃxt
+,
+maxsü—m
+, );
+
+1197
+maxsü—m
+ =
+pos
+ +…os / 4;
+
+1198
+ `R’ew
+(
+sü—mÃxt
+,
+maxsü—m
+, );
+
+1202
+sfœ¡
+ =
+sü—mfœ¡
+;
+
+1203
+¢ext
+ =
+sü—mÃxt
+;
+
+1205 ià(!
+sfœ¡
+ || !
+¢ext
+)
+
+1206
+ `çl
+("do_study: out of memory");
+
+1208 
+ch
+ = 256; ch; --ch)
+
+1209 *
+sfœ¡
+++ = -1;
+
+1210
+sfœ¡
+ -= 256;
+
+1212 --
+pos
+ >= 0) {
+
+1213
+ch
+ =
+s
+[
+pos
+];
+
+1214 ià(
+sfœ¡
+[
+ch
+] >= 0)
+
+1215
+¢ext
+[
+pos
+] =
+sfœ¡
+[
+ch
+] -…os;
+
+1217
+¢ext
+[
+pos
+] = -pos;
+
+1218
+sfœ¡
+[
+ch
+] =
+pos
+;
+
+1224 ià(
+§wi
+)
+
+1225
+sfœ¡
+[
+fÞd
+[
+ch
+]] =
+pos
+;
+
+1228
+¡r
+->
+¡r_pok
+ |ð
+SP_STUDIED
+;
+
+1229
+»tv®
+ = 1;
+
+1230
+»t
+:
+
+1231
+ `¡r_num£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+,()
+»tv®
+);
+
+1232
+¡ack
+->
+¬y_¬¿y
+[
+»rg
+] =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+1233 
+»rg
+;
+
+1234
+ }
+}
+
+1237
+ $do_defšed
+(
+¡r
+,
+¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+1238
+STR
+ *
+¡r
+;
+
+1239 
+ARG
+ *
+¬g
+;
+
+1240 
+gimme
+;
+
+1241 *
+¬gÏ¡
+;
+
+1243 
+ty³
+;
+
+1244 
+»rg
+ =
+¬gÏ¡
+[0] + 1;
+
+1245 
+»tv®
+;
+
+1246
+ARRAY
+ *
+¬y
+;
+
+1247
+HASH
+ *
+hash
+;
+
+1249 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è!ð
+A_LEXPR
+)
+
+1250
+ `çl
+("Illegal‡rgumento defined()");
+
+1251
+¬g
+ =‡rg[1].
+¬g_±r
+.
+¬g_¬g
+;
+
+1252
+ty³
+ =
+¬g
+->
+¬g_ty³
+;
+
+1254 ià(
+ty³
+ =ð
+O_SUBR
+ ||y³ =ð
+O_DBSUBR
+)
+
+1255
+»tv®
+ =
+ `¡ab_sub
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+) != 0;
+
+1256 ià(
+ty³
+ =ð
+O_ARRAY
+ ||y³ =ð
+O_LARRAY
+ ||
+
+1257
+ty³
+ =ð
+O_ASLICE
+ ||y³ =ð
+O_LASLICE
+ )
+
+1258
+»tv®
+ = ((
+¬y
+ =
+ `¡ab_x¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+)) != 0
+
+1259 &&
+¬y
+->
+¬y_max
+ >= 0 );
+
+1260 ià(
+ty³
+ =ð
+O_HASH
+ ||y³ =ð
+O_LHASH
+ ||
+
+1261
+ty³
+ =ð
+O_HSLICE
+ ||y³ =ð
+O_LHSLICE
+ )
+
+1262
+»tv®
+ = ((
+hash
+ =
+ `¡ab_xhash
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+)) != 0
+
+1263 &&
+hash
+->
+tbl_¬¿y
+);
+
+1265
+»tv®
+ =
+FALSE
+;
+
+1266
+ `¡r_num£t
+(
+¡r
+,()
+»tv®
+);
+
+1267
+¡ack
+->
+¬y_¬¿y
+[
+»rg
+] =
+¡r
+;
+
+1268 
+»rg
+;
+
+1269
+ }
+}
+
+1272
+ $do_undef
+(
+¡r
+,
+¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+1273
+STR
+ *
+¡r
+;
+
+1274 
+ARG
+ *
+¬g
+;
+
+1275 
+gimme
+;
+
+1276 *
+¬gÏ¡
+;
+
+1278 
+ty³
+;
+
+1279 
+STAB
+ *
+¡ab
+;
+
+1280 
+»rg
+ =
+¬gÏ¡
+[0] + 1;
+
+1282 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è!ð
+A_LEXPR
+)
+
+1283
+ `çl
+("Illegal‡rgumento undef()");
+
+1284
+¬g
+ =‡rg[1].
+¬g_±r
+.
+¬g_¬g
+;
+
+1285
+ty³
+ =
+¬g
+->
+¬g_ty³
+;
+
+1287 ià(
+ty³
+ =ð
+O_ARRAY
+ ||y³ =ð
+O_LARRAY
+) {
+
+1288
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1289
+ `aä“
+(
+ `¡ab_x¬¿y
+(
+¡ab
+));
+
+1290
+ `¡ab_x¬¿y
+(
+¡ab
+èð
+ `NuÎ
+(
+ARRAY
+*);
+
+1292 ià(
+ty³
+ =ð
+O_HASH
+ ||y³ =ð
+O_LHASH
+) {
+
+1293
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1294 ià(
+¡ab
+ =ð
+’v¡ab
+)
+
+1295
+’vœÚ
+[0] =
+NuÎch
+;
+
+1296 ià(
+¡ab
+ =ð
+sig¡ab
+) {
+
+1297 
+i
+;
+
+1299 
+i
+ = 1; i <
+NSIG
+; i++)
+
+1300
+ `sigÇl
+(
+i
+,
+SIG_DFL
+);
+
+1302 ()
+ `hä“
+(
+ `¡ab_xhash
+(
+¡ab
+),
+TRUE
+);
+
+1303
+ `¡ab_xhash
+(
+¡ab
+èð
+ `NuÎ
+(
+HASH
+*);
+
+1305 ià(
+ty³
+ =ð
+O_SUBR
+ ||y³ =ð
+O_DBSUBR
+) {
+
+1306
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1307 ià(
+ `¡ab_sub
+(
+¡ab
+)) {
+
+1308
+ `cmd_ä“
+(
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+);
+
+1309
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+ =
+NuÎcmd
+;
+
+1310
+ `aä“
+(
+ `¡ab_sub
+(
+¡ab
+)->
+to§ve
+);
+
+1311
+ `Saãä“
+(
+ `¡ab_sub
+(
+¡ab
+));
+
+1312
+ `¡ab_sub
+(
+¡ab
+èð
+ `NuÎ
+(
+SUBR
+*);
+
+1316
+ `çl
+("Can't undefinehat kind of object");
+
+1317
+ `¡r_num£t
+(
+¡r
+,0.0);
+
+1318
+¡ack
+->
+¬y_¬¿y
+[
+»rg
+] =
+¡r
+;
+
+1319 
+»rg
+;
+
+1320
+ }
+}
+
+1323
+ $do_vec
+(
+lv®ue
+,
+a¡r
+,
+¬gÏ¡
+)
+
+1324 
+lv®ue
+;
+
+1325
+STR
+ *
+a¡r
+;
+
+1326 *
+¬gÏ¡
+;
+
+1328
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1329 
+ =
+¬gÏ¡
+[0];
+
+1330 
+STR
+ *
+¡r
+ =
+[++
+];
+
+1331 
+off£t
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1332 
+size
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1333 *
+s
+ = (*)
+ `¡r_g‘
+(
+¡r
+);
+
+1334 
+»Šum
+;
+
+1335 
+Ën
+;
+
+1337
+ =
+¬gÏ¡
+[1];
+
+1338
+off£t
+ *ð
+size
+;
+
+1339
+Ën
+ = (
+off£t
+ +
+size
+ + 7) / 8;
+
+1340 ià(
+off£t
+ < 0 ||
+size
+ < 1)
+
+1341
+»Šum
+ = 0;
+
+1342 ià(!
+lv®ue
+ &&
+Ën
+ >
+¡r
+->
+¡r_cur
+)
+
+1343
+»Šum
+ = 0;
+
+1345 ià(
+Ën
+ >
+¡r
+->
+¡r_cur
+) {
+
+1346
+ `STR_GROW
+(
+¡r
+,
+Ën
+);
+
+1347 ()
+ `bz”o
+(
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+,
+Ën
+ - str->str_cur);
+
+1348
+¡r
+->
+¡r_cur
+ =
+Ën
+;
+
+1350
+s
+ = (*)
+ `¡r_g‘
+(
+¡r
+);
+
+1351 ià(
+size
+ < 8)
+
+1352
+»Šum
+ = (
+s
+[
+off£t
+ >> 3] >> (off£ˆ& 7)è& ((1 <<
+size
+) - 1);
+
+1354
+off£t
+ >>= 3;
+
+1355 ià(
+size
+ == 8)
+
+1356
+»Šum
+ =
+s
+[
+off£t
+];
+
+1357 ià(
+size
+ == 16)
+
+1358
+»Šum
+ = (
+s
+[
+off£t
+] << 8) + s[offset+1];
+
+1359 ià(
+size
+ == 32)
+
+1360
+»Šum
+ = (
+s
+[
+off£t
+] << 24) + (s[offset + 1] << 16) +
+
+1361 (
+s
+[
+off£t
+ + 2] << 8) + s[offset+3];
+
+1364 ià(
+lv®ue
+) {
+
+1365 
+l¡ršg
+ *
+l¡r
+ = (l¡ršg*)
+a¡r
+;
+
+1367
+a¡r
+->
+¡r_magic
+ =
+¡r
+;
+
+1368
+[
+]->
+¡r_¿»
+ = 'v';
+
+1369
+l¡r
+->
+l¡r_off£t
+ =
+off£t
+;
+
+1370
+l¡r
+->
+l¡r_Ën
+ =
+size
+;
+
+1374
+ `¡r_num£t
+(
+a¡r
+,()
+»Šum
+);
+
+1375
+[
+] =
+a¡r
+;
+
+1376 
+;
+
+1377
+ }
+}
+
+1380
+ $do_vec£t
+(
+m¡r
+,
+¡r
+)
+
+1381
+STR
+ *
+m¡r
+;
+
+1382
+STR
+ *
+¡r
+;
+
+1384 
+l¡ršg
+ *
+l¡r
+ = (l¡ršg*)
+¡r
+;
+
+1385 
+off£t
+;
+
+1386 
+size
+;
+
+1387 *
+s
+ = (*)
+m¡r
+->
+¡r_±r
+;
+
+1388 
+lv®
+ =
+ `U_L
+(
+ `¡r_gnum
+(
+¡r
+));
+
+1389 
+mask
+;
+
+1391
+m¡r
+->
+¡r_¿»
+ = 0;
+
+1392
+¡r
+->
+¡r_magic
+ =
+NuΡr
+;
+
+1393
+off£t
+ =
+l¡r
+->
+l¡r_off£t
+;
+
+1394
+size
+ =
+l¡r
+->
+l¡r_Ën
+;
+
+1395 ià(
+size
+ < 8) {
+
+1396
+mask
+ = (1 <<
+size
+) - 1;
+
+1397
+size
+ =
+off£t
+ & 7;
+
+1398
+lv®
+ &ð
+mask
+;
+
+1399
+off£t
+ >>= 3;
+
+1400
+s
+[
+off£t
+] &ð~(
+mask
+ <<
+size
+);
+
+1401
+s
+[
+off£t
+] |ð
+lv®
+ <<
+size
+;
+
+1404 ià(
+size
+ == 8)
+
+1405
+s
+[
+off£t
+] =
+lv®
+ & 255;
+
+1406 ià(
+size
+ == 16) {
+
+1407
+s
+[
+off£t
+] = (
+lv®
+ >> 8) & 255;
+
+1408
+s
+[
+off£t
++1] =
+lv®
+ & 255;
+
+1410 ià(
+size
+ == 32) {
+
+1411
+s
+[
+off£t
+] = (
+lv®
+ >> 24) & 255;
+
+1412
+s
+[
+off£t
++1] = (
+lv®
+ >> 16) & 255;
+
+1413
+s
+[
+off£t
++2] = (
+lv®
+ >> 8) & 255;
+
+1414
+s
+[
+off£t
++3] =
+lv®
+ & 255;
+
+1417
+ }
+}
+
+1419
+ $do_chÝ
+(
+a¡r
+,
+¡r
+)
+
+1420 
+STR
+ *
+a¡r
+;
+
+1421 
+STR
+ *
+¡r
+;
+
+1423 *
+tmps
+;
+
+1424 
+i
+;
+
+1425
+ARRAY
+ *
+¬y
+;
+
+1426
+HASH
+ *
+hash
+;
+
+1427
+HENT
+ *
+’Œy
+;
+
+1429 ià(!
+¡r
+)
+
+1431 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_ARY
+) {
+
+1432
+¬y
+ =
+ `¡ab_¬¿y
+(
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+);
+
+1433 
+i
+ = 0; i <ð
+¬y
+->
+¬y_fžl
+; i++)
+
+1434
+ `do_chÝ
+(
+a¡r
+,
+¬y
+->
+¬y_¬¿y
+[
+i
+]);
+
+1437 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_HASH
+) {
+
+1438
+hash
+ =
+ `¡ab_hash
+(
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+);
+
+1439 ()
+ `h™”š™
+(
+hash
+);
+
+1440 
+’Œy
+ =
+ `h™”Ãxt
+(
+hash
+))
+
+1441
+ `do_chÝ
+(
+a¡r
+,
+ `h™”v®
+(
+hash
+,
+’Œy
+));
+
+1444
+tmps
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+1445 ià(!
+tmps
+)
+
+1447
+tmps
+ +ð
+¡r
+->
+¡r_cur
+ - (str->str_cur != 0);
+
+1448
+ `¡r_n£t
+(
+a¡r
+,
+tmps
+,1);
+
+1449 *
+tmps
+ = '\0';
+
+1450
+¡r
+->
+¡r_cur
+ =
+tmps
+ - sŒ->
+¡r_±r
+;
+
+1451
+¡r
+->
+¡r_nok
+ = 0;
+
+1452
+ `STABSET
+(
+¡r
+);
+
+1453
+ }
+}
+
+1455
+ $do_vÝ
+(
+Ýty³
+,
+¡r
+,
+Ëá
+,
+right
+)
+
+1456
+STR
+ *
+¡r
+;
+
+1457
+STR
+ *
+Ëá
+;
+
+1458
+STR
+ *
+right
+;
+
+1460 *
+s
+;
+
+1461 *
+l
+ =
+ `¡r_g‘
+(
+Ëá
+);
+
+1462 *
+r
+ =
+ `¡r_g‘
+(
+right
+);
+
+1463 
+Ën
+;
+
+1465
+Ën
+ =
+Ëá
+->
+¡r_cur
+;
+
+1466 ià(
+Ën
+ >
+right
+->
+¡r_cur
+)
+
+1467
+Ën
+ =
+right
+->
+¡r_cur
+;
+
+1468 ià(
+¡r
+->
+¡r_cur
+ >
+Ën
+)
+
+1469
+¡r
+->
+¡r_cur
+ =
+Ën
+;
+
+1470 ià(
+¡r
+->
+¡r_cur
+ <
+Ën
+) {
+
+1471
+ `STR_GROW
+(
+¡r
+,
+Ën
+);
+
+1472 ()
+ `bz”o
+(
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+,
+Ën
+ - str->str_cur);
+
+1473
+¡r
+->
+¡r_cur
+ =
+Ën
+;
+
+1475
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+1476 ià(!
+s
+) {
+
+1477
+ `¡r_n£t
+(
+¡r
+,"",0);
+
+1478
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+1480 
+Ýty³
+) {
+
+1481 
+O_BIT_AND
+:
+
+1482 
+Ën
+--)
+
+1483 *
+s
+++ = *
+l
+++ & *
+r
+++;
+
+1485 
+O_XOR
+:
+
+1486 
+Ën
+--)
+
+1487 *
+s
+++ = *
+l
+++ ^ *
+r
+++;
+
+1488 
+mÝ_up
+;
+
+1489 
+O_BIT_OR
+:
+
+1490 
+Ën
+--)
+
+1491 *
+s
+++ = *
+l
+++ | *
+r
+++;
+
+1492
+mÝ_up
+:
+
+1493
+Ën
+ =
+¡r
+->
+¡r_cur
+;
+
+1494 ià(
+right
+->
+¡r_cur
+ >
+Ën
+)
+
+1495
+ `¡r_nÿt
+(
+¡r
+,
+right
+->
+¡r_±r
++
+Ën
+,right->
+¡r_cur
+ -†en);
+
+1496 ià(
+Ëá
+->
+¡r_cur
+ >
+Ën
+)
+
+1497
+ `¡r_nÿt
+(
+¡r
+,
+Ëá
+->
+¡r_±r
++
+Ën
+,Ëá->
+¡r_cur
+ -†en);
+
+1500
+ }
+}
+
+1503
+ $do_sysÿÎ
+(
+¬gÏ¡
+)
+
+1504 *
+¬gÏ¡
+;
+
+1506 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1507 
+ =
+¬gÏ¡
+[1];
+
+1508 
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+1509 
+¬g
+[8];
+
+1510 
+i
+ = 0;
+
+1511 
+»tv®
+ = -1;
+
+1513 #ifdeà
+HAS_SYSCALL
+
+
+1514 #ifdeà
+TAINT
+
+
+1515 
+ +ð++
+;
+™ems
+--; st++)
+
+1516
+š‹d
+ |ð(*
+)->
+¡r_š‹d
+;
+
+1517
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1518
+ =
+¬gÏ¡
+[1];
+
+1519
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+1521 #ifdeà
+TAINT
+
+
+1522
+ `šrÝ”
+("Insecure dependency in syscall");
+
+1528 
+™ems
+--) {
+
+1529 ià(
+[++
+]->
+¡r_nok
+ || !
+i
+)
+
+1530
+¬g
+[
+i
+++] = ()
+ `¡r_gnum
+(
+[
+]);
+
+1531 #iâdeà
+lšt
+
+
+1533
+¬g
+[
+i
+++] = ()
+[
+]->
+¡r_±r
+;
+
+1536
+ =
+¬gÏ¡
+[1];
+
+1537
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+1538 
+™ems
+) {
+
+1540
+ `çl
+("Too few‡rgso syscall");
+
+1542
+»tv®
+ =
+ `sysÿÎ
+(
+¬g
+[0]);
+
+1545
+»tv®
+ =
+ `sysÿÎ
+(
+¬g
+[0],arg[1]);
+
+1548
+»tv®
+ =
+ `sysÿÎ
+(
+¬g
+[0],arg[1],arg[2]);
+
+1551
+»tv®
+ =
+ `sysÿÎ
+(
+¬g
+[0],arg[1],arg[2],arg[3]);
+
+1554
+»tv®
+ =
+ `sysÿÎ
+(
+¬g
+[0],arg[1],arg[2],arg[3],arg[4]);
+
+1557
+»tv®
+ =
+ `sysÿÎ
+(
+¬g
+[0],arg[1],arg[2],arg[3],arg[4],arg[5]);
+
+1560
+»tv®
+ =
+ `sysÿÎ
+(
+¬g
+[0],arg[1],arg[2],arg[3],arg[4],arg[5],arg[6]);
+
+1563
+»tv®
+ =
+ `sysÿÎ
+(
+¬g
+[0],arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],
+
+1564
+¬g
+[7]);
+
+1567 
+»tv®
+;
+
+1569
+ `çl
+("syscall() unimplemented");
+
+1571
+ }
+}
+
+ @doio.c
+
+17 
+ ~"EXTERN.h
+"
+
+18 
+ ~"³¾.h
+"
+
+20 #ifdeà
+HAS_SOCKET
+
+
+21 
+ ~<sys/sock‘.h
+>
+
+22 
+ ~<Ãtdb.h
+>
+
+25 #ifdeà
+HAS_SELECT
+
+
+26 #ifdeà
+I_SYS_SELECT
+
+
+27 #iâdeà
+I_SYS_TIME
+
+
+28 
+ ~<sys/£Ëù.h
+>
+
+33 #ià
+defšed
+(
+HAS_MSG
+è|| defšed(
+HAS_SEM
+è|| defšed(
+HAS_SHM
+)
+
+34 
+ ~<sys/c.h
+>
+
+35 #ifdeà
+HAS_MSG
+
+
+36 
+ ~<sys/msg.h
+>
+
+38 #ifdeà
+HAS_SEM
+
+
+39 
+ ~<sys/£m.h
+>
+
+41 #ifdeà
+HAS_SHM
+
+
+42 
+ ~<sys/shm.h
+>
+
+46 #ifdeà
+I_PWD
+
+
+47 
+ ~<pwd.h
+>
+
+49 #ifdeà
+I_GRP
+
+
+50 
+ ~<g½.h
+>
+
+52 #ifdeà
+I_UTIME
+
+
+53 
+ ~<utime.h
+>
+
+55 #ifdeà
+I_FCNTL
+
+
+56 
+ ~<fúŽ.h
+>
+
+58 #ifdeà
+I_SYS_FILE
+
+
+59 
+ ~<sys/fže.h
+>
+
+62 
+ gÏ¡¡©v®
+ = -1;
+
+63 
+ gÏ¡¡y³
+ =
+O_STAT
+;
+
+65
+boÞ
+
+
+66
+ $do_Ý’
+(
+¡ab
+,
+Çme
+,
+Ën
+)
+
+67
+STAB
+ *
+¡ab
+;
+
+68 *
+Çme
+;
+
+69 
+Ën
+;
+
+71
+FILE
+ *
+;
+
+72 
+STIO
+ *
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+73 *
+myÇme
+ =
+ `§ve¡r
+(
+Çme
+);
+
+74 
+»suÉ
+;
+
+75 
+fd
+;
+
+76 
+wr™šg
+ = 0;
+
+77 
+mode
+[3];
+
+79
+Çme
+ =
+myÇme
+;
+
+80
+fÜk´oûss
+ = 1;
+
+81 
+Ën
+ &&
+ `is¥aû
+(
+Çme
+[len-1]))
+
+82
+Çme
+[--
+Ën
+] = '\0';
+
+83 ià(!
+¡io
+)
+
+84
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+èð
+ `¡io_Ãw
+();
+
+85 ià(
+¡io
+->
+iå
+) {
+
+86
+fd
+ =
+ `fž’o
+(
+¡io
+->
+iå
+);
+
+87 ià(
+¡io
+->
+ty³
+ == '|')
+
+88
+»suÉ
+ =
+ `mypþo£
+(
+¡io
+->
+iå
+);
+
+89 ià(
+¡io
+->
+ty³
+ == '-')
+
+90
+»suÉ
+ = 0;
+
+91 ià(
+¡io
+->
+iå
+ !ð¡io->
+oå
+) {
+
+92 ià(
+¡io
+->
+oå
+) {
+
+93
+»suÉ
+ =
+ `fþo£
+(
+¡io
+->
+oå
+);
+
+94
+ `fþo£
+(
+¡io
+->
+iå
+);
+
+97
+»suÉ
+ =
+ `fþo£
+(
+¡io
+->
+iå
+);
+
+100
+»suÉ
+ =
+ `fþo£
+(
+¡io
+->
+iå
+);
+
+101 ià(
+»suÉ
+ =ð
+EOF
+ &&
+fd
+ > 2)
+
+102
+ `årštf
+(
+¡d”r
+,"Warning: unableo close filehandle %s…roperly.\n",
+
+103
+ `¡ab_Çme
+(
+¡ab
+));
+
+104
+¡io
+->
+oå
+ = stio->
+iå
+ =
+NuÎå
+;
+
+106 ià(*
+Çme
+ =ð'+' &&
+Ën
+ > 1 &&‚ame[len-1] != '|') {
+
+107
+mode
+[1] = *
+Çme
+++;
+
+108
+mode
+[2] = '\0';
+
+109 --
+Ën
+;
+
+110
+wr™šg
+ = 1;
+
+113
+mode
+[1] = '\0';
+
+115
+¡io
+->
+ty³
+ = *
+Çme
+;
+
+116 ià(*
+Çme
+ == '|') {
+
+117 
+Çme
+++;
+ `is¥aû
+(*name);‚ame++) ;
+
+118 #ifdeà
+TAINT
+
+
+119
+ `š‹nv
+();
+
+120
+ `šrÝ”
+("Insecure dependency in…iped open");
+
+122
+ =
+ `mypÝ’
+(
+Çme
+,"w");
+
+123
+wr™šg
+ = 1;
+
+125 ià(*
+Çme
+ == '>') {
+
+126 #ifdeà
+TAINT
+
+
+127
+ `šrÝ”
+("Insecure dependency in open");
+
+129
+Çme
+++;
+
+130 ià(*
+Çme
+ == '>') {
+
+131
+mode
+[0] =
+¡io
+->
+ty³
+ = 'a';
+
+132
+Çme
+++;
+
+135
+mode
+[0] = 'w';
+
+136
+wr™šg
+ = 1;
+
+137 ià(*
+Çme
+ == '&') {
+
+138
+du¶ic™y
+:
+
+139
+Çme
+++;
+
+140 
+ `is¥aû
+(*
+Çme
+))
+
+141
+Çme
+++;
+
+142 ià(
+ `isdig™
+(*
+Çme
+))
+
+143
+fd
+ =
+ `©oi
+(
+Çme
+);
+
+145
+¡ab
+ =
+ `¡ab’t
+(
+Çme
+,
+FALSE
+);
+
+146 ià(!
+¡ab
+ || !
+ `¡ab_io
+(stab))
+
+147 
+FALSE
+;
+
+148 ià(
+ `¡ab_io
+(
+¡ab
+è&& sb_io(¡ab)->
+iå
+) {
+
+149
+fd
+ =
+ `fž’o
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+);
+
+150 ià(
+ `¡ab_io
+(
+¡ab
+)->
+ty³
+ == 's')
+
+151
+¡io
+->
+ty³
+ = 's';
+
+154
+fd
+ = -1;
+
+156 ià(!(
+ =
+ `fdÝ’
+(
+fd
+ =
+ `dup
+(fd),
+mode
+))) {
+
+157
+ `þo£
+(
+fd
+);
+
+161 
+ `is¥aû
+(*
+Çme
+))
+
+162
+Çme
+++;
+
+163 ià(
+ `¡rEQ
+(
+Çme
+,"-")) {
+
+164
+ =
+¡dout
+;
+
+165
+¡io
+->
+ty³
+ = '-';
+
+168
+ =
+ `fÝ’
+(
+Çme
+,
+mode
+);
+
+173 ià(*
+Çme
+ == '<') {
+
+174
+mode
+[0] = 'r';
+
+175
+Çme
+++;
+
+176 
+ `is¥aû
+(*
+Çme
+))
+
+177
+Çme
+++;
+
+178 ià(*
+Çme
+ == '&')
+
+179 
+du¶ic™y
+;
+
+180 ià(
+ `¡rEQ
+(
+Çme
+,"-")) {
+
+181
+ =
+¡dš
+;
+
+182
+¡io
+->
+ty³
+ = '-';
+
+185
+ =
+ `fÝ’
+(
+Çme
+,
+mode
+);
+
+187 ià(
+Çme
+[
+Ën
+-1] == '|') {
+
+188 #ifdeà
+TAINT
+
+
+189
+ `š‹nv
+();
+
+190
+ `šrÝ”
+("Insecure dependency in…iped open");
+
+192
+Çme
+[--
+Ën
+] = '\0';
+
+193 
+Ën
+ &&
+ `is¥aû
+(
+Çme
+[len-1]))
+
+194
+Çme
+[--
+Ën
+] = '\0';
+
+195 ;
+ `is¥aû
+(*
+Çme
+);‚ame++) ;
+
+196
+ =
+ `mypÝ’
+(
+Çme
+,"r");
+
+197
+¡io
+->
+ty³
+ = '|';
+
+200
+¡io
+->
+ty³
+ = '<';
+
+201 ;
+ `is¥aû
+(*
+Çme
+);‚ame++) ;
+
+202 ià(
+ `¡rEQ
+(
+Çme
+,"-")) {
+
+203
+ =
+¡dš
+;
+
+204
+¡io
+->
+ty³
+ = '-';
+
+207
+ =
+ `fÝ’
+(
+Çme
+,"r");
+
+210
+ `Saãä“
+(
+myÇme
+);
+
+211 ià(!
+)
+
+212 
+FALSE
+;
+
+213 ià(
+¡io
+->
+ty³
+ &&
+
+214
+¡io
+->
+ty³
+ != '|' && stio->type != '-') {
+
+215 ià(
+ `f¡©
+(
+ `fž’o
+(
+),&
+¡©buf
+) < 0) {
+
+216 ()
+ `fþo£
+(
+);
+
+217 
+FALSE
+;
+
+219 ià(
+ `S_ISSOCK
+(
+¡©buf
+.
+¡_mode
+))
+
+220
+¡io
+->
+ty³
+ = 's';
+
+221 #ifdeà
+S_IFMT
+
+
+222 ià(!(
+¡©buf
+.
+¡_mode
+ &
+S_IFMT
+))
+
+223
+¡io
+->
+ty³
+ = 's';
+
+226 #ià
+ `defšed
+(
+HAS_FCNTL
+è&& defšed(
+F_SETFD
+)
+
+227
+fd
+ =
+ `fž’o
+(
+);
+
+228
+ `fúŽ
+(
+fd
+,
+F_SETFD
+,fd >= 3);
+
+230
+¡io
+->
+iå
+ =
+;
+
+231 ià(
+wr™šg
+) {
+
+232 ià(
+¡io
+->
+ty³
+ != 's')
+
+233
+¡io
+->
+oå
+ =
+;
+
+235 ià(!(
+¡io
+->
+oå
+ =
+ `fdÝ’
+(
+ `fž’o
+(
+),"w"))) {
+
+236
+ `fþo£
+(
+);
+
+237
+¡io
+->
+iå
+ =
+NuÎå
+;
+
+240 
+TRUE
+;
+
+241
+ }
+}
+
+243
+FILE
+ *
+
+244
+ $Ãxrgv
+(
+¡ab
+)
+
+245 
+STAB
+ *
+¡ab
+;
+
+247 
+STR
+ *
+¡r
+;
+
+248 
+fžedev
+;
+
+249 
+fžešo
+;
+
+250 
+fžeuid
+;
+
+251 
+fžegid
+;
+
+252 
+fžemode
+ = 0;
+
+253 
+Ï¡fd
+;
+
+254 *
+ÞdÇme
+;
+
+256 ià(!
+¬gvout¡ab
+)
+
+257
+¬gvout¡ab
+ =
+ `¡ab’t
+("ARGVOUT",
+TRUE
+);
+
+258 ià(
+fžemode
+ & (
+S_ISUID
+|
+S_ISGID
+)) {
+
+259
+ `fæush
+(
+ `¡ab_io
+(
+¬gvout¡ab
+)->
+iå
+);
+
+260 #ifdeà
+HAS_FCHMOD
+
+
+261 ()
+ `fchmod
+(
+Ï¡fd
+,
+fžemode
+);
+
+263 ()
+ `chmod
+(
+ÞdÇme
+,
+fžemode
+);
+
+266
+fžemode
+ = 0;
+
+267 
+ `®’
+(
+ `¡ab_x¬¿y
+(
+¡ab
+)) >= 0) {
+
+268
+¡r
+ =
+ `ashiá
+(
+ `¡ab_x¬¿y
+(
+¡ab
+));
+
+269
+ `¡r_s£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+¡r
+);
+
+270
+ `STABSET
+(
+ `¡ab_v®
+(
+¡ab
+));
+
+271
+ÞdÇme
+ =
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+¡ab
+));
+
+272 ià(
+ `do_Ý’
+(
+¡ab
+,
+ÞdÇme
+,
+ `¡ab_v®
+(¡ab)->
+¡r_cur
+)) {
+
+273 ià(
+š¶aû
+) {
+
+274 #ifdeà
+TAINT
+
+
+275
+ `šrÝ”
+("Insecure dependency in inplace open");
+
+277 ià(
+ `¡rEQ
+(
+ÞdÇme
+,"-")) {
+
+278
+ `¡r_ä“
+(
+¡r
+);
+
+279
+defout¡ab
+ =
+ `¡ab’t
+("STDOUT",
+TRUE
+);
+
+280 
+ `¡ab_io
+(
+¡ab
+)->
+iå
+;
+
+282
+fžedev
+ =
+¡©buf
+.
+¡_dev
+;
+
+283
+fžešo
+ =
+¡©buf
+.
+¡_šo
+;
+
+284
+fžemode
+ =
+¡©buf
+.
+¡_mode
+;
+
+285
+fžeuid
+ =
+¡©buf
+.
+¡_uid
+;
+
+286
+fžegid
+ =
+¡©buf
+.
+¡_gid
+;
+
+287 ià(!
+ `S_ISREG
+(
+fžemode
+)) {
+
+288
+ `w¬n
+("Can't do inplaceƒdit: %s is‚ot‡„egular file",
+
+289
+ÞdÇme
+ );
+
+290
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+291
+ `¡r_ä“
+(
+¡r
+);
+
+294 ià(*
+š¶aû
+) {
+
+295 #ifdeà
+SUFFIX
+
+
+296
+ `add_suffix
+(
+¡r
+,
+š¶aû
+);
+
+298
+ `¡r_ÿt
+(
+¡r
+,
+š¶aû
+);
+
+300 #iâdeà
+FLEXFILENAMES
+
+
+301 ià(
+ `¡©
+(
+¡r
+->
+¡r_±r
+,&
+¡©buf
+) >= 0
+
+302 &&
+¡©buf
+.
+¡_dev
+ =ð
+fžedev
+
+
+303 &&
+¡©buf
+.
+¡_šo
+ =ð
+fžešo
+ ) {
+
+304
+ `w¬n
+("Can't do inplaceƒdit: %s > 14 characters",
+
+305
+¡r
+->
+¡r_±r
+ );
+
+306
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+307
+ `¡r_ä“
+(
+¡r
+);
+
+311 #ifdeà
+HAS_RENAME
+
+
+312 #iâdeà
+MSDOS
+
+
+313 ià(
+ `Ȃme
+(
+ÞdÇme
+,
+¡r
+->
+¡r_±r
+) < 0) {
+
+314
+ `w¬n
+("Can't„ename %so %s: %s, skipping file",
+
+315
+ÞdÇme
+,
+¡r
+->
+¡r_±r
+,
+ `¡»¼Ü
+(
+Ӽo
+) );
+
+316
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+317
+ `¡r_ä“
+(
+¡r
+);
+
+321
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+322 ()
+ `uÆšk
+(
+¡r
+->
+¡r_±r
+);
+
+323 ()
+ `Ȃme
+(
+ÞdÇme
+,
+¡r
+->
+¡r_±r
+);
+
+324
+ `do_Ý’
+(
+¡ab
+,
+¡r
+->
+¡r_±r
+,
+ `¡ab_v®
+(¡ab)->
+¡r_cur
+);
+
+327 ()
+ `UNLINK
+(
+¡r
+->
+¡r_±r
+);
+
+328 ià(
+ `lšk
+(
+ÞdÇme
+,
+¡r
+->
+¡r_±r
+) < 0) {
+
+329
+ `w¬n
+("Can't„ename %so %s: %s, skipping file",
+
+330
+ÞdÇme
+,
+¡r
+->
+¡r_±r
+,
+ `¡»¼Ü
+(
+Ӽo
+) );
+
+331
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+332
+ `¡r_ä“
+(
+¡r
+);
+
+335 ()
+ `UNLINK
+(
+ÞdÇme
+);
+
+339 #iâdeà
+MSDOS
+
+
+340 ià(
+ `UNLINK
+(
+ÞdÇme
+) < 0) {
+
+341
+ `w¬n
+("Can't„ename %so %s: %s, skipping file",
+
+342
+ÞdÇme
+,
+¡r
+->
+¡r_±r
+,
+ `¡»¼Ü
+(
+Ӽo
+) );
+
+343
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+344
+ `¡r_ä“
+(
+¡r
+);
+
+348
+ `çl
+("Can't do inplaceƒdit without backup");
+
+352
+ `¡r_n£t
+(
+¡r
+,">",1);
+
+353
+ `¡r_ÿt
+(
+¡r
+,
+ÞdÇme
+);
+
+354
+Ӽo
+ = 0;
+
+355 ià(!
+ `do_Ý’
+(
+¬gvout¡ab
+,
+¡r
+->
+¡r_±r
+,¡r->
+¡r_cur
+)) {
+
+356
+ `w¬n
+("Can't do inplaceƒdit on %s: %s",
+
+357
+ÞdÇme
+,
+ `¡»¼Ü
+(
+Ӽo
+) );
+
+358
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+359
+ `¡r_ä“
+(
+¡r
+);
+
+362
+defout¡ab
+ =
+¬gvout¡ab
+;
+
+363
+Ï¡fd
+ =
+ `fž’o
+(
+ `¡ab_io
+(
+¬gvout¡ab
+)->
+iå
+);
+
+364 ()
+ `f¡©
+(
+Ï¡fd
+,&
+¡©buf
+);
+
+365 #ifdeà
+HAS_FCHMOD
+
+
+366 ()
+ `fchmod
+(
+Ï¡fd
+,
+fžemode
+);
+
+368 ()
+ `chmod
+(
+ÞdÇme
+,
+fžemode
+);
+
+370 ià(
+fžeuid
+ !ð
+¡©buf
+.
+¡_uid
+ ||
+fžegid
+ !ð¡©buf.
+¡_gid
+) {
+
+371 #ifdeà
+HAS_FCHOWN
+
+
+372 ()
+ `fchown
+(
+Ï¡fd
+,
+fžeuid
+,
+fžegid
+);
+
+374 #ifdeà
+HAS_CHOWN
+
+
+375 ()
+ `chown
+(
+ÞdÇme
+,
+fžeuid
+,
+fžegid
+);
+
+380
+ `¡r_ä“
+(
+¡r
+);
+
+381 
+ `¡ab_io
+(
+¡ab
+)->
+iå
+;
+
+384
+ `årštf
+(
+¡d”r
+,"Cª'ˆÝ’ %s: %s\n",
+ `¡r_g‘
+(
+¡r
+),
+ `¡»¼Ü
+(
+Ӽo
+));
+
+385
+ `¡r_ä“
+(
+¡r
+);
+
+387 ià(
+š¶aû
+) {
+
+388 ()
+ `do_þo£
+(
+¬gvout¡ab
+,
+FALSE
+);
+
+389
+defout¡ab
+ =
+ `¡ab’t
+("STDOUT",
+TRUE
+);
+
+391 
+NuÎå
+;
+
+392
+ }
+}
+
+394 #ifdeà
+HAS_PIPE
+
+
+396
+ $do_pe
+(
+¡r
+,
+r¡ab
+,
+w¡ab
+)
+
+397
+STR
+ *
+¡r
+;
+
+398
+STAB
+ *
+r¡ab
+;
+
+399
+STAB
+ *
+w¡ab
+;
+
+401 
+STIO
+ *
+r¡io
+;
+
+402 
+STIO
+ *
+w¡io
+;
+
+403 
+fd
+[2];
+
+405 ià(!
+r¡ab
+)
+
+406 
+badex™
+;
+
+407 ià(!
+w¡ab
+)
+
+408 
+badex™
+;
+
+410
+r¡io
+ =
+ `¡ab_io
+(
+r¡ab
+);
+
+411
+w¡io
+ =
+ `¡ab_io
+(
+w¡ab
+);
+
+413 ià(!
+r¡io
+)
+
+414
+r¡io
+ =
+ `¡ab_io
+(
+r¡ab
+èð
+ `¡io_Ãw
+();
+
+415 ià(
+r¡io
+->
+iå
+)
+
+416
+ `do_þo£
+(
+r¡ab
+,
+FALSE
+);
+
+417 ià(!
+w¡io
+)
+
+418
+w¡io
+ =
+ `¡ab_io
+(
+w¡ab
+èð
+ `¡io_Ãw
+();
+
+419 ià(
+w¡io
+->
+iå
+)
+
+420
+ `do_þo£
+(
+w¡ab
+,
+FALSE
+);
+
+422 ià(
+ `pe
+(
+fd
+) < 0)
+
+423 
+badex™
+;
+
+424
+r¡io
+->
+iå
+ =
+ `fdÝ’
+(
+fd
+[0], "r");
+
+425
+w¡io
+->
+oå
+ =
+ `fdÝ’
+(
+fd
+[1], "w");
+
+426
+w¡io
+->
+iå
+ = w¡io->
+oå
+;
+
+427
+r¡io
+->
+ty³
+ = '<';
+
+428
+w¡io
+->
+ty³
+ = '>';
+
+429 ià(!
+r¡io
+->
+iå
+ || !
+w¡io
+->
+oå
+) {
+
+430 ià(
+r¡io
+->
+iå
+ `fþo£
+(rstio->ifp);
+
+431
+ `þo£
+(
+fd
+[0]);
+
+432 ià(
+w¡io
+->
+oå
+ `fþo£
+(wstio->ofp);
+
+433
+ `þo£
+(
+fd
+[1]);
+
+434 
+badex™
+;
+
+437
+ `¡r_s£t
+(
+¡r
+,&
+¡r_yes
+);
+
+440
+badex™
+:
+
+441
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+443
+ }
+}
+
+446
+boÞ
+
+
+447
+ $do_þo£
+(
+¡ab
+,
+ex¶ic™
+)
+
+448
+STAB
+ *
+¡ab
+;
+
+449
+boÞ
+
+ex¶ic™
+;
+
+451
+boÞ
+
+»tv®
+ =
+FALSE
+;
+
+452 
+STIO
+ *
+¡io
+;
+
+453 
+¡©us
+;
+
+455 ià(!
+¡ab
+)
+
+456
+¡ab
+ =
+¬gv¡ab
+;
+
+457 ià(!
+¡ab
+)
+
+458 
+FALSE
+;
+
+459
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+460 ià(!
+¡io
+) {
+
+461 ià(
+dow¬n
+ &&
+ex¶ic™
+)
+
+462
+ `w¬n
+("Clo£ oÀunÝ’ed fž<%s>",
+ `¡ab_Çme
+(
+¡ab
+));
+
+463 
+FALSE
+;
+
+465 ià(
+¡io
+->
+iå
+) {
+
+466 ià(
+¡io
+->
+ty³
+ == '|') {
+
+467
+¡©us
+ =
+ `mypþo£
+(
+¡io
+->
+iå
+);
+
+468
+»tv®
+ = (
+¡©us
+ == 0);
+
+469
+¡©usv®ue
+ = ()
+¡©us
+ & 0xffff;
+
+471 ià(
+¡io
+->
+ty³
+ == '-')
+
+472
+»tv®
+ =
+TRUE
+;
+
+474 ià(
+¡io
+->
+oå
+ && stio->oå !ð¡io->
+iå
+) {
+
+475
+»tv®
+ = (
+ `fþo£
+(
+¡io
+->
+oå
+è!ð
+EOF
+);
+
+476
+ `fþo£
+(
+¡io
+->
+iå
+);
+
+479
+»tv®
+ = (
+ `fþo£
+(
+¡io
+->
+iå
+è!ð
+EOF
+);
+
+481
+¡io
+->
+oå
+ = stio->
+iå
+ =
+NuÎå
+;
+
+483 ià(
+ex¶ic™
+)
+
+484
+¡io
+->
+lšes
+ = 0;
+
+485
+¡io
+->
+ty³
+ = ' ';
+
+486 
+»tv®
+;
+
+487
+ }
+}
+
+489
+boÞ
+
+
+490
+ $do_eof
+(
+¡ab
+)
+
+491
+STAB
+ *
+¡ab
+;
+
+493 
+STIO
+ *
+¡io
+;
+
+494 
+ch
+;
+
+496 ià(!
+¡ab
+) {
+
+497 ià(
+¬gv¡ab
+)
+
+498
+¡io
+ =
+ `¡ab_io
+(
+¬gv¡ab
+);
+
+500 
+TRUE
+;
+
+503
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+505 ià(!
+¡io
+)
+
+506 
+TRUE
+;
+
+508 
+¡io
+->
+iå
+) {
+
+510 #ifdeà
+STDSTDIO
+
+
+511 ià(
+¡io
+->
+iå
+->
+_út
+ > 0)
+
+512 
+FALSE
+;
+
+515
+ch
+ =
+ `g‘c
+(
+¡io
+->
+iå
+);
+
+516 ià(
+ch
+ !ð
+EOF
+) {
+
+517 ()
+ `ung‘c
+(
+ch
+,
+¡io
+->
+iå
+);
+
+518 
+FALSE
+;
+
+520 #ifdeà
+STDSTDIO
+
+
+521 ià(
+¡io
+->
+iå
+->
+_út
+ < -1)
+
+522
+¡io
+->
+iå
+->
+_út
+ = -1;
+
+524 ià(!
+¡ab
+) {
+
+525 ià(!
+ `Ãxrgv
+(
+¬gv¡ab
+))
+
+526 
+TRUE
+;
+
+529 
+TRUE
+;
+
+531 
+TRUE
+;
+
+532
+ }
+}
+
+535
+ $do_‹Î
+(
+¡ab
+)
+
+536
+STAB
+ *
+¡ab
+;
+
+538 
+STIO
+ *
+¡io
+;
+
+540 ià(!
+¡ab
+)
+
+541 
+phoÛy
+;
+
+543
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+544 ià(!
+¡io
+ || !¡io->
+iå
+)
+
+545 
+phoÛy
+;
+
+547 ià(
+ `ãof
+(
+¡io
+->
+iå
+))
+
+548 ()
+ `f£ek
+ (
+¡io
+->
+iå
+, 0L, 2);
+
+550 
+ `á–l
+(
+¡io
+->
+iå
+);
+
+552
+phoÛy
+:
+
+553 ià(
+dow¬n
+)
+
+554
+ `w¬n
+("tell() on unopened file");
+
+556
+ }
+}
+
+558
+boÞ
+
+
+559
+ $do_£ek
+(
+¡ab
+,
+pos
+,
+wh’û
+)
+
+560
+STAB
+ *
+¡ab
+;
+
+561 
+pos
+;
+
+562 
+wh’û
+;
+
+564 
+STIO
+ *
+¡io
+;
+
+566 ià(!
+¡ab
+)
+
+567 
+nuts
+;
+
+569
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+570 ià(!
+¡io
+ || !¡io->
+iå
+)
+
+571 
+nuts
+;
+
+573 ià(
+ `ãof
+(
+¡io
+->
+iå
+))
+
+574 ()
+ `f£ek
+ (
+¡io
+->
+iå
+, 0L, 2);
+
+576 
+ `f£ek
+(
+¡io
+->
+iå
+,
+pos
+,
+wh’û
+) >= 0;
+
+578
+nuts
+:
+
+579 ià(
+dow¬n
+)
+
+580
+ `w¬n
+("seek() on unopened file");
+
+581 
+FALSE
+;
+
+582
+ }
+}
+
+585
+ $do_ùl
+(
+Ýty³
+,
+¡ab
+,
+func
+,
+¬g¡r
+)
+
+586 
+Ýty³
+;
+
+587
+STAB
+ *
+¡ab
+;
+
+588 
+func
+;
+
+589
+STR
+ *
+¬g¡r
+;
+
+591 
+STIO
+ *
+¡io
+;
+
+592 *
+s
+;
+
+593 
+»tv®
+;
+
+595 ià(!
+¡ab
+ || !
+¬g¡r
+)
+
+597
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+598 ià(!
+¡io
+)
+
+601 ià(
+¬g¡r
+->
+¡r_pok
+ || !¬g¡r->
+¡r_nok
+) {
+
+602 ià(!
+¬g¡r
+->
+¡r_pok
+)
+
+603
+s
+ =
+ `¡r_g‘
+(
+¬g¡r
+);
+
+605 #ifdeà
+IOCPARM_MASK
+
+
+606 #iâdeà
+IOCPARM_LEN
+
+
+607 
+ #IOCPARM_LEN
+(
+x
+è(((xè>> 16è&
+IOCPARM_MASK
+)
+
+ )
+
+610 #ifdeà
+IOCPARM_LEN
+
+
+611
+»tv®
+ =
+ `IOCPARM_LEN
+(
+func
+);
+
+613
+»tv®
+ = 256;
+
+615 ià(
+¬g¡r
+->
+¡r_cur
+ <
+»tv®
+) {
+
+616
+ `SŒ_Grow
+(
+¬g¡r
+,
+»tv®
++1);
+
+617
+¬g¡r
+->
+¡r_cur
+ =
+»tv®
+;
+
+620
+s
+ =
+¬g¡r
+->
+¡r_±r
+;
+
+621
+s
+[
+¬g¡r
+->
+¡r_cur
+] = 17;
+
+624
+»tv®
+ = ()
+ `¡r_gnum
+(
+¬g¡r
+);
+
+625 #ifdeà
+MSDOS
+
+
+626
+s
+ = (*)()
+»tv®
+;
+
+628
+s
+ = (*)
+»tv®
+;
+
+632 #iâdeà
+lšt
+
+
+633 ià(
+Ýty³
+ =ð
+O_IOCTL
+)
+
+634
+»tv®
+ =
+ `ioùl
+(
+ `fž’o
+(
+¡io
+->
+iå
+),
+func
+,
+s
+);
+
+636 #ifdeà
+MSDOS
+
+
+637
+ `çl
+("fcntl is‚ot implemented");
+
+639 #ifdeà
+HAS_FCNTL
+
+
+640
+»tv®
+ =
+ `fúŽ
+(
+ `fž’o
+(
+¡io
+->
+iå
+),
+func
+,
+s
+);
+
+642
+ `çl
+("fcntl is‚ot implemented");
+
+646
+»tv®
+ = 0;
+
+649 ià(
+¬g¡r
+->
+¡r_pok
+) {
+
+650 ià(
+s
+[
+¬g¡r
+->
+¡r_cur
+] != 17)
+
+651
+ `çl
+("Return value overflowed string");
+
+652
+s
+[
+¬g¡r
+->
+¡r_cur
+] = 0;
+
+654 
+»tv®
+;
+
+655
+ }
+}
+
+658
+ $do_¡©
+(
+¡r
+,
+¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+659
+STR
+ *
+¡r
+;
+
+660 
+ARG
+ *
+¬g
+;
+
+661 
+gimme
+;
+
+662 *
+¬gÏ¡
+;
+
+664 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+665 
+ =
+¬gÏ¡
+[0] + 1;
+
+666 
+max
+ = 13;
+
+668 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+) {
+
+669
+tmp¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+670 ià(
+tmp¡ab
+ !ð
+def¡ab
+) {
+
+671
+Ï¡¡y³
+ =
+O_STAT
+;
+
+672
+¡©¡ab
+ =
+tmp¡ab
+;
+
+673
+ `¡r_£t
+(
+¡©Çme
+,"");
+
+674 ià(!
+ `¡ab_io
+(
+tmp¡ab
+è|| !¡ab_ioÑmp¡ab)->
+iå
+ ||
+
+675
+ `f¡©
+(
+ `fž’o
+(
+ `¡ab_io
+(
+tmp¡ab
+)->
+iå
+),&
+¡©ÿche
+) < 0) {
+
+676
+max
+ = 0;
+
+677
+Ï¡¡©v®
+ = -1;
+
+680 ià(
+Ï¡¡©v®
+ < 0)
+
+681
+max
+ = 0;
+
+684
+ `¡r_£t
+(
+¡©Çme
+,
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
+]));
+
+685
+¡©¡ab
+ =
+NuΡab
+;
+
+686 #ifdeà
+HAS_LSTAT
+
+
+687
+Ï¡¡y³
+ =
+¬g
+->
+¬g_ty³
+;
+
+688 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_LSTAT
+)
+
+689
+Ï¡¡©v®
+ =
+ `l¡©
+(
+ `¡r_g‘
+(
+¡©Çme
+),&
+¡©ÿche
+);
+
+692
+Ï¡¡©v®
+ =
+ `¡©
+(
+ `¡r_g‘
+(
+¡©Çme
+),&
+¡©ÿche
+);
+
+693 ià(
+Ï¡¡©v®
+ < 0)
+
+694
+max
+ = 0;
+
+697 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+698 ià(
+max
+)
+
+699
+ `¡r_s£t
+(
+¡r
+,&
+¡r_yes
+);
+
+701
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+702
+ `STABSET
+(
+¡r
+);
+
+703
+¬y
+->
+¬y_¬¿y
+[
+] =
+¡r
+;
+
+704 
+;
+
+706
+--;
+
+707 ià(
+max
+) {
+
+708 #iâdeà
+lšt
+
+
+709 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+710
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_dev
+)));
+
+711 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+712
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_šo
+)));
+
+713 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+714
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_mode
+)));
+
+715 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+716
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_Æšk
+)));
+
+717 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+718
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_uid
+)));
+
+719 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+720
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_gid
+)));
+
+721 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+722
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_rdev
+)));
+
+723 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+724
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_size
+)));
+
+725 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+726
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_©ime
+)));
+
+727 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+728
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_mtime
+)));
+
+729 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+730
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_ùime
+)));
+
+731 #ifdeà
+STATBLOCKS
+
+
+732 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+733
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_blksize
+)));
+
+734 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+735
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+¡©ÿche
+.
+¡_blocks
+)));
+
+737 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+738
+ `¡r_2mÜl
+(
+ `¡r_make
+("",0)));
+
+739 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+740
+ `¡r_2mÜl
+(
+ `¡r_make
+("",0)));
+
+743 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_nmake
+(0.0));
+
+746 
+;
+
+747
+ }
+}
+
+749 #ià!
+defšed
+(
+HAS_TRUNCATE
+è&& !defšed(
+HAS_CHSIZE
+è&& defšed(
+F_FREESP
+)
+
+751 
+ #HAS_CHSIZE
+
+
+ )
+
+753 
+ $chsize
+(
+fd
+,
+Ëngth
+)
+
+754 
+fd
+;
+
+755
+off_t
+
+Ëngth
+;
+
+757
+
+ `l£ek
+();
+
+758 
+æock
+
+;
+
+759 
+¡©
+
+fžebuf
+;
+
+761 ià(
+ `f¡©
+(
+fd
+, &
+fžebuf
+) < 0)
+
+764 ià(
+fžebuf
+.
+¡_size
+ <
+Ëngth
+) {
+
+768 ià((
+ `l£ek
+(
+fd
+, (
+Ëngth
+ - 1), 0)) < 0)
+
+773 ià((
+ `wr™e
+(
+fd
+, "", 1)) != 1)
+
+779
+.
+l_wh’û
+ = 0;
+
+780
+.
+l_Ën
+ = 0;
+
+781
+.
+l_¡¬t
+ =
+Ëngth
+;
+
+782
+.
+l_ty³
+ =
+F_WRLCK
+;
+
+792 ià(
+ `fúŽ
+(
+fd
+,
+F_FREESP
+, &
+) < 0)
+
+798
+ }
+}
+
+802
+ $do_Œunÿ‹
+(
+¡r
+,
+¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+803
+STR
+ *
+¡r
+;
+
+804 
+ARG
+ *
+¬g
+;
+
+805 
+gimme
+;
+
+806 *
+¬gÏ¡
+;
+
+808 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+809 
+ =
+¬gÏ¡
+[0] + 1;
+
+810
+off_t
+
+Ën
+ = (off_t)
+ `¡r_gnum
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+811 
+»suÉ
+ = 1;
+
+812
+STAB
+ *
+tmp¡ab
+;
+
+814 #ià
+ `defšed
+(
+HAS_TRUNCATE
+è|| defšed(
+HAS_CHSIZE
+)
+
+815 #ifdeà
+HAS_TRUNCATE
+
+
+816 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+) {
+
+817
+tmp¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+818 ià(!
+ `¡ab_io
+(
+tmp¡ab
+) ||
+
+819
+ `árunÿ‹
+(
+ `fž’o
+(
+ `¡ab_io
+(
+tmp¡ab
+)->
+iå
+),
+Ën
+) < 0)
+
+820
+»suÉ
+ = 0;
+
+822 ià(
+ `Œunÿ‹
+(
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
+]),
+Ën
+) < 0)
+
+823
+»suÉ
+ = 0;
+
+825 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+) {
+
+826
+tmp¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+827 ià(!
+ `¡ab_io
+(
+tmp¡ab
+) ||
+
+828
+ `chsize
+(
+ `fž’o
+(
+ `¡ab_io
+(
+tmp¡ab
+)->
+iå
+),
+Ën
+) < 0)
+
+829
+»suÉ
+ = 0;
+
+832 
+tmpfd
+;
+
+834 ià((
+tmpfd
+ =
+ `Ý’
+(
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
+]), 0)) < 0)
+
+835
+»suÉ
+ = 0;
+
+837 ià(
+ `chsize
+(
+tmpfd
+,
+Ën
+) < 0)
+
+838
+»suÉ
+ = 0;
+
+839
+ `þo£
+(
+tmpfd
+);
+
+844 ià(
+»suÉ
+)
+
+845
+ `¡r_s£t
+(
+¡r
+,&
+¡r_yes
+);
+
+847
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+848
+ `STABSET
+(
+¡r
+);
+
+849
+¬y
+->
+¬y_¬¿y
+[
+] =
+¡r
+;
+
+850 
+;
+
+852
+ `çl
+("truncate‚ot implemented");
+
+854
+ }
+}
+
+857
+ $looks_like_numb”
+(
+¡r
+)
+
+858
+STR
+ *
+¡r
+;
+
+860 *
+s
+;
+
+861 *
+£nd
+;
+
+863 ià(!
+¡r
+->
+¡r_pok
+)
+
+864 
+TRUE
+;
+
+865
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+866
+£nd
+ =
+s
+ +
+¡r
+->
+¡r_cur
+;
+
+867 
+ `is¥aû
+(*
+s
+))
+
+868
+s
+++;
+
+869 ià(
+s
+ >ð
+£nd
+)
+
+870 
+FALSE
+;
+
+871 ià(*
+s
+ == '+' || *s == '-')
+
+872
+s
+++;
+
+873 
+ `isdig™
+(*
+s
+))
+
+874
+s
+++;
+
+875 ià(
+s
+ =ð
+£nd
+)
+
+876 
+TRUE
+;
+
+877 ià(*
+s
+ == '.')
+
+878
+s
+++;
+
+879 ià(
+s
+ =ð
+¡r
+->
+¡r_±r
+)
+
+880 
+FALSE
+;
+
+881 
+ `isdig™
+(*
+s
+))
+
+882
+s
+++;
+
+883 ià(
+s
+ =ð
+£nd
+)
+
+884 
+TRUE
+;
+
+885 ià(*
+s
+ == 'e' || *s == 'E') {
+
+886
+s
+++;
+
+887 ià(*
+s
+ == '+' || *s == '-')
+
+888
+s
+++;
+
+889 
+ `isdig™
+(*
+s
+))
+
+890
+s
+++;
+
+892 
+ `is¥aû
+(*
+s
+))
+
+893
+s
+++;
+
+894 ià(
+s
+ >ð
+£nd
+)
+
+895 
+TRUE
+;
+
+896 
+FALSE
+;
+
+897
+ }
+}
+
+899
+boÞ
+
+
+900
+ $do_´št
+(
+¡r
+,
+)
+
+901 
+STR
+ *
+¡r
+;
+
+902
+FILE
+ *
+;
+
+904 *
+tmps
+;
+
+906 ià(!
+) {
+
+907 ià(
+dow¬n
+)
+
+908
+ `w¬n
+("printo unopened file");
+
+909 
+FALSE
+;
+
+911 ià(!
+¡r
+)
+
+912 
+TRUE
+;
+
+913 ià(
+ofmt
+ &&
+
+914 ((
+¡r
+->
+¡r_nok
+ && sŒ->
+¡r_u
+.
+¡r_nv®
+ != 0.0)
+
+915 || (
+ `looks_like_numb”
+(
+¡r
+è&&
+ `¡r_gnum
+(str) != 0.0) ) ) {
+
+916
+ `årštf
+(
+,
+ofmt
+,
+¡r
+->
+¡r_u
+.
+¡r_nv®
+);
+
+917  !
+ `ã¼Ü
+(
+);
+
+920
+tmps
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+921 ià(*
+tmps
+ == 'S' &&mps[1] == 't' &&mps[2] == 'B' &&mps[3] == '\0'
+
+922 &&
+¡r
+->
+¡r_cur
+ =ð(
+STBP
+è&&
+ `¡¾’
+(
+tmps
+) < str->str_cur) {
+
+923
+STR
+ *
+tmp¡r
+ =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+924
+ `¡ab_fuÎÇme
+(
+tmp¡r
+,((
+STAB
+*)
+¡r
+));
+
+925
+¡r
+ =
+tmp¡r
+;
+
+926
+tmps
+ =
+¡r
+->
+¡r_±r
+;
+
+927
+ `putc
+('*',
+);
+
+929 ià(
+¡r
+->
+¡r_cur
+ && (
+ `fwr™e
+(
+tmps
+,1,¡r->¡r_cur,
+è=ð0 ||
+ `ã¼Ü
+(fp)))
+
+930 
+FALSE
+;
+
+932 
+TRUE
+;
+
+933
+ }
+}
+
+935
+boÞ
+
+
+936
+ $do_­ršt
+(
+¬g
+,
+,
+¬gÏ¡
+)
+
+937 
+ARG
+ *
+¬g
+;
+
+938 
+FILE
+ *
+;
+
+939 *
+¬gÏ¡
+;
+
+941 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+942 
+ =
+¬gÏ¡
+[1];
+
+943 
+»tv®
+;
+
+944 
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+946 ià(!
+) {
+
+947 ià(
+dow¬n
+)
+
+948
+ `w¬n
+("printo unopened file");
+
+949 
+FALSE
+;
+
+951
+ +ð++
+;
+
+952 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_PRTF
+) {
+
+953
+ `do_¥rštf
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+,
+™ems
+,
+);
+
+954
+»tv®
+ =
+ `do_´št
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+,
+);
+
+957
+»tv®
+ = (
+™ems
+ <= 0);
+
+958 ;
+™ems
+ > 0; i‹ms--,
+++) {
+
+959 ià(
+»tv®
+ &&
+of¦’
+) {
+
+960 ià(
+ `fwr™e
+(
+ofs
+, 1,
+of¦’
+,
+è=ð0 ||
+ `ã¼Ü
+(fp)) {
+
+961
+»tv®
+ =
+FALSE
+;
+
+965 ià(!(
+»tv®
+ =
+ `do_´št
+(*
+,
+)))
+
+968 ià(
+»tv®
+ &&
+ܦ’
+)
+
+969 ià(
+ `fwr™e
+(
+Üs
+, 1,
+ܦ’
+,
+è=ð0 ||
+ `ã¼Ü
+(fp))
+
+970
+»tv®
+ =
+FALSE
+;
+
+972 
+»tv®
+;
+
+973
+ }
+}
+
+976
+ $my¡©
+(
+¬g
+,
+¡r
+)
+
+977
+ARG
+ *
+¬g
+;
+
+978
+STR
+ *
+¡r
+;
+
+980
+STIO
+ *
+¡io
+;
+
+982
+Ï¡¡y³
+ =
+O_STAT
+;
+
+983 ià(
+¬g
+[1].
+¬g_ty³
+ &
+A_DONT
+) {
+
+984
+¡io
+ =
+ `¡ab_io
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+985 ià(
+¡io
+ && stio->
+iå
+) {
+
+986
+¡©¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+987
+ `¡r_£t
+(
+¡©Çme
+,"");
+
+988  (
+Ï¡¡©v®
+ =
+ `f¡©
+(
+ `fž’o
+(
+¡io
+->
+iå
+), &
+¡©ÿche
+));
+
+991 ià(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =ð
+def¡ab
+)
+
+992 
+Ï¡¡©v®
+;
+
+993 ià(
+dow¬n
+)
+
+994
+ `w¬n
+("Stat on unopened file <%s>",
+
+995
+ `¡ab_Çme
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+));
+
+996
+¡©¡ab
+ =
+NuΡab
+;
+
+997
+ `¡r_£t
+(
+¡©Çme
+,"");
+
+998  (
+Ï¡¡©v®
+ = -1);
+
+1002
+¡©¡ab
+ =
+NuΡab
+;
+
+1003
+ `¡r_£t
+(
+¡©Çme
+,
+ `¡r_g‘
+(
+¡r
+));
+
+1004  (
+Ï¡¡©v®
+ =
+ `¡©
+(
+ `¡r_g‘
+(
+¡r
+),&
+¡©ÿche
+));
+
+1006
+ }
+}
+
+1009
+ $myl¡©
+(
+¬g
+,
+¡r
+)
+
+1010
+ARG
+ *
+¬g
+;
+
+1011
+STR
+ *
+¡r
+;
+
+1013 ià(
+¬g
+[1].
+¬g_ty³
+ &
+A_DONT
+) {
+
+1014 ià(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =ð
+def¡ab
+) {
+
+1015 ià(
+Ï¡¡y³
+ !ð
+O_LSTAT
+)
+
+1016
+ `çl
+("The stat…receding -l _ wasn't‡n†stat");
+
+1017 
+Ï¡¡©v®
+;
+
+1019
+ `çl
+("You can't use -l on‡ filehandle");
+
+1022
+Ï¡¡y³
+ =
+O_LSTAT
+;
+
+1023
+¡©¡ab
+ =
+NuΡab
+;
+
+1024
+ `¡r_£t
+(
+¡©Çme
+,
+ `¡r_g‘
+(
+¡r
+));
+
+1025 #ifdeà
+HAS_LSTAT
+
+
+1026  (
+Ï¡¡©v®
+ =
+ `l¡©
+(
+ `¡r_g‘
+(
+¡r
+),&
+¡©ÿche
+));
+
+1028  (
+Ï¡¡©v®
+ =
+ `¡©
+(
+ `¡r_g‘
+(
+¡r
+),&
+¡©ÿche
+));
+
+1030
+ }
+}
+
+1032
+STR
+ *
+
+1033
+ $do_á‹xt
+(
+¬g
+,
+¡r
+)
+
+1034 
+ARG
+ *
+¬g
+;
+
+1035
+STR
+ *
+¡r
+;
+
+1037 
+i
+;
+
+1038 
+Ën
+;
+
+1039 
+odd
+ = 0;
+
+1040
+STDCHAR
+
+tbuf
+[512];
+
+1041 
+STDCHAR
+ *
+s
+;
+
+1042 
+STIO
+ *
+¡io
+;
+
+1044 ià(
+¬g
+[1].
+¬g_ty³
+ &
+A_DONT
+) {
+
+1045 ià(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =ð
+def¡ab
+) {
+
+1046 ià(
+¡©¡ab
+)
+
+1047
+¡io
+ =
+ `¡ab_io
+(
+¡©¡ab
+);
+
+1049
+¡r
+ =
+¡©Çme
+;
+
+1050 
+»®ly_fž’ame
+;
+
+1054
+¡©¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1055
+ `¡r_£t
+(
+¡©Çme
+,"");
+
+1056
+¡io
+ =
+ `¡ab_io
+(
+¡©¡ab
+);
+
+1058 ià(
+¡io
+ && stio->
+iå
+) {
+
+1059 #ifdeà
+STDSTDIO
+
+
+1060
+ `f¡©
+(
+ `fž’o
+(
+¡io
+->
+iå
+),&
+¡©ÿche
+);
+
+1061 ià(
+¡io
+->
+iå
+->
+_út
+ <= 0) {
+
+1062
+i
+ =
+ `g‘c
+(
+¡io
+->
+iå
+);
+
+1063 ià(
+i
+ !ð
+EOF
+)
+
+1064 ()
+ `ung‘c
+(
+i
+,
+¡io
+->
+iå
+);
+
+1066 ià(
+¡io
+->
+iå
+->
+_út
+ <= 0)
+
+1067  &
+¡r_yes
+;
+
+1068
+Ën
+ =
+¡io
+->
+iå
+->
+_út
+ + (¡io->iå->
+_±r
+ - stio->iå->
+_ba£
+);
+
+1069
+s
+ =
+¡io
+->
+iå
+->
+_ba£
+;
+
+1071
+ `çl
+("-T‡nd -B‚ot implemented on filehandles\n");
+
+1075 ià(
+dow¬n
+)
+
+1076
+ `w¬n
+("Test on unopened file <%s>",
+
+1077
+ `¡ab_Çme
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+));
+
+1078  &
+¡r_undef
+;
+
+1082
+¡©¡ab
+ =
+NuΡab
+;
+
+1083
+ `¡r_£t
+(
+¡©Çme
+,
+ `¡r_g‘
+(
+¡r
+));
+
+1084
+»®ly_fž’ame
+:
+
+1085
+i
+ =
+ `Ý’
+(
+ `¡r_g‘
+(
+¡r
+),0);
+
+1086 ià(
+i
+ < 0)
+
+1087  &
+¡r_undef
+;
+
+1088
+ `f¡©
+(
+i
+,&
+¡©ÿche
+);
+
+1089
+Ën
+ =
+ `»ad
+(
+i
+,
+tbuf
+,512);
+
+1090 ()
+ `þo£
+(
+i
+);
+
+1091 ià(
+Ën
+ <= 0)
+
+1092  &
+¡r_yes
+;
+
+1093
+s
+ =
+tbuf
+;
+
+1098 
+i
+ = 0; i <
+Ën
+; i++,
+s
+++) {
+
+1099 ià(!*
+s
+) {
+
+1100
+odd
+ +ð
+Ën
+;
+
+1103 ià(*
+s
+ & 128)
+
+1104
+odd
+++;
+
+1105 ià(*
+s
+ < 32 &&
+
+1106 *
+s
+ != '\n' && *s != '\r' && *s != '\b' &&
+
+1107 *
+s
+ != '\t' && *s != '\f' && *s != 27)
+
+1108
+odd
+++;
+
+1111 ià((
+odd
+ * 10 >
+Ën
+è=ð(
+¬g
+->
+¬g_ty³
+ =ð
+O_FTTEXT
+))
+
+1112  &
+¡r_no
+;
+
+1114  &
+¡r_yes
+;
+
+1115
+ }
+}
+
+1117
+boÞ
+
+
+1118
+ $do_«xec
+(
+»®ly
+,
+¬gÏ¡
+)
+
+1119
+STR
+ *
+»®ly
+;
+
+1120 *
+¬gÏ¡
+;
+
+1122 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1123 
+ =
+¬gÏ¡
+[1];
+
+1124 
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+1125 **
+a
+;
+
+1126 **
+¬gv
+;
+
+1127 *
+tmps
+;
+
+1129 ià(
+™ems
+) {
+
+1130
+ `New
+(401,
+¬gv
+,
+™ems
++1, *);
+
+1131
+a
+ =
+¬gv
+;
+
+1132 
+ +ð++
+;
+™ems
+ > 0; items--,st++) {
+
+1133 ià(*
+)
+
+1134 *
+a
+++ =
+ `¡r_g‘
+(*
+);
+
+1136 *
+a
+++ = "";
+
+1138 *
+a
+ =
+NuÎch
+;
+
+1139 #ifdeà
+TAINT
+
+
+1140 ià(*
+¬gv
+[0] != '/')
+
+1141
+ `š‹nv
+();
+
+1143 ià(
+»®ly
+ && *(
+tmps
+ =
+ `¡r_g‘
+(really)))
+
+1144
+ `execvp
+(
+tmps
+,
+¬gv
+);
+
+1146
+ `execvp
+(
+¬gv
+[0],argv);
+
+1147
+ `Saãä“
+(
+¬gv
+);
+
+1149 
+FALSE
+;
+
+1150
+ }
+}
+
+1152 **
+ gArgv
+ =
+NuÎ
+(**);
+
+1153 *
+ gCmd
+ =
+NuÎch
+;
+
+1156
+ $do_execä“
+()
+
+1158 ià(
+Argv
+) {
+
+1159
+ `Saãä“
+(
+Argv
+);
+
+1160
+Argv
+ =
+ `NuÎ
+(**);
+
+1162 ià(
+Cmd
+) {
+
+1163
+ `Saãä“
+(
+Cmd
+);
+
+1164
+Cmd
+ =
+NuÎch
+;
+
+1166
+ }
+}
+
+1168
+boÞ
+
+
+1169
+ $do_exec
+(
+cmd
+)
+
+1170 *
+cmd
+;
+
+1172 **
+a
+;
+
+1173 *
+s
+;
+
+1174 
+æags
+[10];
+
+1176 #ifdeà
+TAINT
+
+
+1177
+ `š‹nv
+();
+
+1178
+ `šrÝ”
+("Insecure dependency inƒxec");
+
+1183 #ifdeà
+CSH
+
+
+1184 ià(
+ `¡ºEQ
+(
+cmd
+,
+cshÇme
+,
+cshËn
+) && strnEQ(cmd+cshlen," -c",3)) {
+
+1185
+ `¡rýy
+(
+æags
+,"-c");
+
+1186
+s
+ =
+cmd
++
+cshËn
++3;
+
+1187 ià(*
+s
+ == 'f') {
+
+1188
+s
+++;
+
+1189
+ `¡rÿt
+(
+æags
+,"f");
+
+1191 ià(*
+s
+ == ' ')
+
+1192
+s
+++;
+
+1193 ià(*
+s
+++ == '\'') {
+
+1194 *
+ncmd
+ =
+s
+;
+
+1196 *
+s
+)
+
+1197
+s
+++;
+
+1198 ià(
+s
+[-1] == '\n')
+
+1199 *--
+s
+ = '\0';
+
+1200 ià(
+s
+[-1] == '\'') {
+
+1201 *--
+s
+ = '\0';
+
+1202
+ `exeþ
+(
+cshÇme
+,"csh",
+æags
+,
+ncmd
+,(*)0);
+
+1203 *
+s
+ = '\'';
+
+1204 
+FALSE
+;
+
+1212 
+s
+ =
+cmd
+; * &&
+ `i§Íha
+(*s); s++) ;
+
+1213 ià(*
+s
+ == '=')
+
+1214 
+dosh–l
+;
+
+1215 
+s
+ =
+cmd
+; *s; s++) {
+
+1216 ià(*
+s
+ !ð' ' && !
+ `i§Íha
+(*sè&&
+ `šdex
+("$&*(){}[]'\";\\|?<>~`\n",*s)) {
+
+1217 ià(*
+s
+ == '\n' && !s[1]) {
+
+1218 *
+s
+ = '\0';
+
+1221
+dosh–l
+:
+
+1222
+ `exeþ
+("/bš/sh","sh","-c",
+cmd
+,(*)0);
+
+1223 
+FALSE
+;
+
+1226
+ `New
+(402,
+Argv
+, (
+s
+ -
+cmd
+) / 2 + 2, *);
+
+1227
+Cmd
+ =
+ `n§ve¡r
+(
+cmd
+,
+s
+-cmd);
+
+1228
+a
+ =
+Argv
+;
+
+1229 
+s
+ =
+Cmd
+; *s;) {
+
+1230 *
+s
+ &&
+ `is¥aû
+(*s)) s++;
+
+1231 ià(*
+s
+)
+
+1232 *(
+a
+++èð
+s
+;
+
+1233 *
+s
+ && !
+ `is¥aû
+(*s)) s++;
+
+1234 ià(*
+s
+)
+
+1235 *
+s
+++ = '\0';
+
+1237 *
+a
+ =
+NuÎch
+;
+
+1238 ià(
+Argv
+[0]) {
+
+1239
+ `execvp
+(
+Argv
+[0],Argv);
+
+1240 ià(
+Ӽo
+ =ð
+ENOEXEC
+) {
+
+1241
+ `do_execä“
+();
+
+1242 
+dosh–l
+;
+
+1245
+ `do_execä“
+();
+
+1246 
+FALSE
+;
+
+1247
+ }
+}
+
+1249 #ifdeà
+HAS_SOCKET
+
+
+1251
+ $do_sock‘
+(
+¡ab
+,
+¬gÏ¡
+)
+
+1252
+STAB
+ *
+¡ab
+;
+
+1253 *
+¬gÏ¡
+;
+
+1255 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1256 
+ =
+¬gÏ¡
+[1];
+
+1257 
+STIO
+ *
+¡io
+;
+
+1258 
+domaš
+,
+ty³
+,
+´ÙocÞ
+,
+fd
+;
+
+1260 ià(!
+¡ab
+)
+
+1261 
+FALSE
+;
+
+1263
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+1264 ià(!
+¡io
+)
+
+1265
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+èð
+ `¡io_Ãw
+();
+
+1266 ià(
+¡io
+->
+iå
+)
+
+1267
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+1269
+domaš
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1270
+ty³
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1271
+´ÙocÞ
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1272 #ifdeà
+TAINT
+
+
+1273
+ `šrÝ”
+("Insecure dependency in socket");
+
+1275
+fd
+ =
+ `sock‘
+(
+domaš
+,
+ty³
+,
+´ÙocÞ
+);
+
+1276 ià(
+fd
+ < 0)
+
+1277 
+FALSE
+;
+
+1278
+¡io
+->
+iå
+ =
+ `fdÝ’
+(
+fd
+, "r");
+
+1279
+¡io
+->
+oå
+ =
+ `fdÝ’
+(
+fd
+, "w");
+
+1280
+¡io
+->
+ty³
+ = 's';
+
+1281 ià(!
+¡io
+->
+iå
+ || !¡io->
+oå
+) {
+
+1282 ià(
+¡io
+->
+iå
+ `fþo£
+(stio->ifp);
+
+1283 ià(
+¡io
+->
+oå
+ `fþo£
+(stio->ofp);
+
+1284 ià(!
+¡io
+->
+iå
+ && !¡io->
+oå
+ `þo£
+(
+fd
+);
+
+1285 
+FALSE
+;
+
+1288 
+TRUE
+;
+
+1289
+ }
+}
+
+1292
+ $do_bšd
+(
+¡ab
+,
+¬gÏ¡
+)
+
+1293
+STAB
+ *
+¡ab
+;
+
+1294 *
+¬gÏ¡
+;
+
+1296 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1297 
+ =
+¬gÏ¡
+[1];
+
+1298 
+STIO
+ *
+¡io
+;
+
+1299 *
+addr
+;
+
+1301 ià(!
+¡ab
+)
+
+1302 
+nuts
+;
+
+1304
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+1305 ià(!
+¡io
+ || !¡io->
+iå
+)
+
+1306 
+nuts
+;
+
+1308
+addr
+ =
+ `¡r_g‘
+(
+[++
+]);
+
+1309 #ifdeà
+TAINT
+
+
+1310
+ `šrÝ”
+("Insecure dependency in bind");
+
+1312 
+ `bšd
+(
+ `fž’o
+(
+¡io
+->
+iå
+), (*è
+addr
+,
+[
+]->
+¡r_cur
+) >= 0;
+
+1314
+nuts
+:
+
+1315 ià(
+dow¬n
+)
+
+1316
+ `w¬n
+("bind() on closed fd");
+
+1317 
+FALSE
+;
+
+1319
+ }
+}
+
+1322
+ $do_cÚÃù
+(
+¡ab
+,
+¬gÏ¡
+)
+
+1323
+STAB
+ *
+¡ab
+;
+
+1324 *
+¬gÏ¡
+;
+
+1326 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1327 
+ =
+¬gÏ¡
+[1];
+
+1328 
+STIO
+ *
+¡io
+;
+
+1329 *
+addr
+;
+
+1331 ià(!
+¡ab
+)
+
+1332 
+nuts
+;
+
+1334
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+1335 ià(!
+¡io
+ || !¡io->
+iå
+)
+
+1336 
+nuts
+;
+
+1338
+addr
+ =
+ `¡r_g‘
+(
+[++
+]);
+
+1339 #ifdeà
+TAINT
+
+
+1340
+ `šrÝ”
+("Insecure dependency in connect");
+
+1342 
+ `cÚÃù
+(
+ `fž’o
+(
+¡io
+->
+iå
+), (*è
+addr
+,
+[
+]->
+¡r_cur
+) >= 0;
+
+1344
+nuts
+:
+
+1345 ià(
+dow¬n
+)
+
+1346
+ `w¬n
+("connect() on closed fd");
+
+1347 
+FALSE
+;
+
+1349
+ }
+}
+
+1352
+ $do_li¡’
+(
+¡ab
+,
+¬gÏ¡
+)
+
+1353
+STAB
+ *
+¡ab
+;
+
+1354 *
+¬gÏ¡
+;
+
+1356 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1357 
+ =
+¬gÏ¡
+[1];
+
+1358 
+STIO
+ *
+¡io
+;
+
+1359 
+backlog
+;
+
+1361 ià(!
+¡ab
+)
+
+1362 
+nuts
+;
+
+1364
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+1365 ià(!
+¡io
+ || !¡io->
+iå
+)
+
+1366 
+nuts
+;
+
+1368
+backlog
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1369 
+ `li¡’
+(
+ `fž’o
+(
+¡io
+->
+iå
+),
+backlog
+) >= 0;
+
+1371
+nuts
+:
+
+1372 ià(
+dow¬n
+)
+
+1373
+ `w¬n
+("listen() on closed fd");
+
+1374 
+FALSE
+;
+
+1375
+ }
+}
+
+1378
+ $do_acû±
+(
+¡r
+,
+n¡ab
+,
+g¡ab
+)
+
+1379
+STR
+ *
+¡r
+;
+
+1380
+STAB
+ *
+n¡ab
+;
+
+1381
+STAB
+ *
+g¡ab
+;
+
+1383 
+STIO
+ *
+n¡io
+;
+
+1384 
+STIO
+ *
+g¡io
+;
+
+1385 
+Ën
+ = 
+buf
+;
+
+1386 
+fd
+;
+
+1388 ià(!
+n¡ab
+)
+
+1389 
+badex™
+;
+
+1390 ià(!
+g¡ab
+)
+
+1391 
+nuts
+;
+
+1393
+g¡io
+ =
+ `¡ab_io
+(
+g¡ab
+);
+
+1394
+n¡io
+ =
+ `¡ab_io
+(
+n¡ab
+);
+
+1396 ià(!
+g¡io
+ || !g¡io->
+iå
+)
+
+1397 
+nuts
+;
+
+1398 ià(!
+n¡io
+)
+
+1399
+n¡io
+ =
+ `¡ab_io
+(
+n¡ab
+èð
+ `¡io_Ãw
+();
+
+1400 ià(
+n¡io
+->
+iå
+)
+
+1401
+ `do_þo£
+(
+n¡ab
+,
+FALSE
+);
+
+1403
+fd
+ =
+ `acû±
+(
+ `fž’o
+(
+g¡io
+->
+iå
+),(*)
+buf
+,&
+Ën
+);
+
+1404 ià(
+fd
+ < 0)
+
+1405 
+badex™
+;
+
+1406
+n¡io
+->
+iå
+ =
+ `fdÝ’
+(
+fd
+, "r");
+
+1407
+n¡io
+->
+oå
+ =
+ `fdÝ’
+(
+fd
+, "w");
+
+1408
+n¡io
+->
+ty³
+ = 's';
+
+1409 ià(!
+n¡io
+->
+iå
+ || !n¡io->
+oå
+) {
+
+1410 ià(
+n¡io
+->
+iå
+ `fþo£
+(nstio->ifp);
+
+1411 ià(
+n¡io
+->
+oå
+ `fþo£
+(nstio->ofp);
+
+1412 ià(!
+n¡io
+->
+iå
+ && !n¡io->
+oå
+ `þo£
+(
+fd
+);
+
+1413 
+badex™
+;
+
+1416
+ `¡r_n£t
+(
+¡r
+,
+buf
+,
+Ën
+);
+
+1419
+nuts
+:
+
+1420 ià(
+dow¬n
+)
+
+1421
+ `w¬n
+("accept() on closed fd");
+
+1422
+badex™
+:
+
+1423
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+1425
+ }
+}
+
+1428
+ $do_shutdown
+(
+¡ab
+,
+¬gÏ¡
+)
+
+1429
+STAB
+ *
+¡ab
+;
+
+1430 *
+¬gÏ¡
+;
+
+1432 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1433 
+ =
+¬gÏ¡
+[1];
+
+1434 
+STIO
+ *
+¡io
+;
+
+1435 
+how
+;
+
+1437 ià(!
+¡ab
+)
+
+1438 
+nuts
+;
+
+1440
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+1441 ià(!
+¡io
+ || !¡io->
+iå
+)
+
+1442 
+nuts
+;
+
+1444
+how
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1445 
+ `shutdown
+(
+ `fž’o
+(
+¡io
+->
+iå
+),
+how
+) >= 0;
+
+1447
+nuts
+:
+
+1448 ià(
+dow¬n
+)
+
+1449
+ `w¬n
+("shutdown() on closed fd");
+
+1450 
+FALSE
+;
+
+1452
+ }
+}
+
+1455
+ $do_sÝt
+(
+Ýty³
+,
+¡ab
+,
+¬gÏ¡
+)
+
+1456 
+Ýty³
+;
+
+1457
+STAB
+ *
+¡ab
+;
+
+1458 *
+¬gÏ¡
+;
+
+1460 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1461 
+ =
+¬gÏ¡
+[1];
+
+1462 
+STIO
+ *
+¡io
+;
+
+1463 
+fd
+;
+
+1464 
+lvl
+;
+
+1465 
+ÝŠame
+;
+
+1467 ià(!
+¡ab
+)
+
+1468 
+nuts
+;
+
+1470
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+1471 ià(!
+¡io
+ || !¡io->
+iå
+)
+
+1472 
+nuts
+;
+
+1474
+fd
+ =
+ `fž’o
+(
+¡io
+->
+iå
+);
+
+1475
+lvl
+ = ()
+ `¡r_gnum
+(
+[
++1]);
+
+1476
+ÝŠame
+ = ()
+ `¡r_gnum
+(
+[
++2]);
+
+1477 
+Ýty³
+) {
+
+1478 
+O_GSOCKOPT
+:
+
+1479
+[
+] =
+ `¡r_2mÜl
+(
+ `¡r_Ãw
+(257));
+
+1480
+[
+]->
+¡r_cur
+ = 256;
+
+1481
+[
+]->
+¡r_pok
+ = 1;
+
+1482 ià(
+ `g‘sockÝt
+(
+fd
+,
+lvl
+,
+ÝŠame
+,
+[
+]->
+¡r_±r
+, &¡[¥]->
+¡r_cur
+) < 0)
+
+1483 
+nuts
+;
+
+1485 
+O_SSOCKOPT
+:
+
+1486
+[
+] = st[sp+3];
+
+1487 ià(
+ `£tsockÝt
+(
+fd
+,
+lvl
+,
+ÝŠame
+,
+[
+]->
+¡r_±r
+, st[¥]->
+¡r_cur
+) < 0)
+
+1488 
+nuts
+;
+
+1489
+[
+] = &
+¡r_yes
+;
+
+1493 
+;
+
+1495
+nuts
+:
+
+1496 ià(
+dow¬n
+)
+
+1497
+ `w¬n
+("[gs]etsockopt() on closed fd");
+
+1498
+[
+] = &
+¡r_undef
+;
+
+1499 
+;
+
+1501
+ }
+}
+
+1504
+ $do_g‘sockÇme
+(
+Ýty³
+,
+¡ab
+,
+¬gÏ¡
+)
+
+1505 
+Ýty³
+;
+
+1506
+STAB
+ *
+¡ab
+;
+
+1507 *
+¬gÏ¡
+;
+
+1509 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1510 
+ =
+¬gÏ¡
+[1];
+
+1511 
+STIO
+ *
+¡io
+;
+
+1512 
+fd
+;
+
+1514 ià(!
+¡ab
+)
+
+1515 
+nuts
+;
+
+1517
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+1518 ià(!
+¡io
+ || !¡io->
+iå
+)
+
+1519 
+nuts
+;
+
+1521
+[
+] =
+ `¡r_2mÜl
+(
+ `¡r_Ãw
+(257));
+
+1522
+[
+]->
+¡r_cur
+ = 256;
+
+1523
+[
+]->
+¡r_pok
+ = 1;
+
+1524
+fd
+ =
+ `fž’o
+(
+¡io
+->
+iå
+);
+
+1525 
+Ýty³
+) {
+
+1526 
+O_GETSOCKNAME
+:
+
+1527 ià(
+ `g‘sockÇme
+(
+fd
+, (*è
+[
+]->
+¡r_±r
+, &¡[¥]->
+¡r_cur
+) < 0)
+
+1528 
+nuts2
+;
+
+1530 
+O_GETPEERNAME
+:
+
+1531 ià(
+ `g‘³”Çme
+(
+fd
+, (*è
+[
+]->
+¡r_±r
+, &¡[¥]->
+¡r_cur
+) < 0)
+
+1532 
+nuts2
+;
+
+1536 
+;
+
+1538
+nuts
+:
+
+1539 ià(
+dow¬n
+)
+
+1540
+ `w¬n
+("get{sock,peer}name() on closed fd");
+
+1541
+nuts2
+:
+
+1542
+[
+] = &
+¡r_undef
+;
+
+1543 
+;
+
+1545
+ }
+}
+
+1548
+ $do_gh’t
+(
+which
+,
+gimme
+,
+¬gÏ¡
+)
+
+1549 
+which
+;
+
+1550 
+gimme
+;
+
+1551 *
+¬gÏ¡
+;
+
+1553 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+1554 
+ =
+¬gÏ¡
+[0];
+
+1555 **
+–em
+;
+
+1556 
+STR
+ *
+¡r
+;
+
+1557 
+ho¡’t
+ *
+ `g‘ho¡byÇme
+();
+
+1558 
+ho¡’t
+ *
+ `g‘ho¡byaddr
+();
+
+1559 #ifdeà
+HAS_GETHOSTENT
+
+
+1560 
+ho¡’t
+ *
+ `g‘ho¡’t
+();
+
+1562 
+ho¡’t
+ *
+h’t
+;
+
+1563 
+Ën
+;
+
+1565 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1566
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_undef
+));
+
+1567 
+;
+
+1570 ià(
+which
+ =ð
+O_GHBYNAME
+) {
+
+1571 *
+Çme
+ =
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+1573
+h’t
+ =
+ `g‘ho¡byÇme
+(
+Çme
+);
+
+1575 ià(
+which
+ =ð
+O_GHBYADDR
+) {
+
+1576
+STR
+ *
+addr¡r
+ =
+¬y
+->
+¬y_¬¿y
+[
++1];
+
+1577 
+add¹y³
+ = ()
+ `¡r_gnum
+(
+¬y
+->
+¬y_¬¿y
+[
++2]);
+
+1578 *
+addr
+ =
+ `¡r_g‘
+(
+addr¡r
+);
+
+1580
+h’t
+ =
+ `g‘ho¡byaddr
+(
+addr
+,
+addr¡r
+->
+¡r_cur
+,
+add¹y³
+);
+
+1583 #ifdeà
+HAS_GETHOSTENT
+
+
+1584
+h’t
+ =
+ `g‘ho¡’t
+();
+
+1586
+ `çl
+("gethostent‚ot implemented");
+
+1588 ià(
+h’t
+) {
+
+1589 #iâdeà
+lšt
+
+
+1590 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1591
+ `¡r_£t
+(
+¡r
+,
+h’t
+->
+h_Çme
+);
+
+1592 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1593 
+–em
+ =
+h’t
+->
+h_®Ÿ£s
+; *elem;ƒlem++) {
+
+1594
+ `¡r_ÿt
+(
+¡r
+, *
+–em
+);
+
+1595 ià(
+–em
+[1])
+
+1596
+ `¡r_nÿt
+(
+¡r
+," ",1);
+
+1598 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1599
+ `¡r_num£t
+(
+¡r
+, ()
+h’t
+->
+h_add¹y³
+);
+
+1600 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1601
+Ën
+ =
+h’t
+->
+h_Ëngth
+;
+
+1602
+ `¡r_num£t
+(
+¡r
+, ()
+Ën
+);
+
+1603 #ifdeà
+h_addr
+
+
+1604 
+–em
+ =
+h’t
+->
+h_addr_li¡
+; *elem;ƒlem++) {
+
+1605 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1606
+ `¡r_n£t
+(
+¡r
+, *
+–em
+,
+Ën
+);
+
+1609 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1610
+ `¡r_n£t
+(
+¡r
+,
+h’t
+->
+h_addr
+,
+Ën
+);
+
+1613
+–em
+ =
+NuÎch
+;
+
+1614
+–em
+ =ƒlem;
+
+1615 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1619 
+;
+
+1620
+ }
+}
+
+1623
+ $do_gÃÁ
+(
+which
+,
+gimme
+,
+¬gÏ¡
+)
+
+1624 
+which
+;
+
+1625 
+gimme
+;
+
+1626 *
+¬gÏ¡
+;
+
+1628 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+1629 
+ =
+¬gÏ¡
+[0];
+
+1630 **
+–em
+;
+
+1631 
+STR
+ *
+¡r
+;
+
+1632 
+ËÁ
+ *
+ `g‘ÃtbyÇme
+();
+
+1633 
+ËÁ
+ *
+ `g‘Ãtbyaddr
+();
+
+1634 
+ËÁ
+ *
+ `g‘ËÁ
+();
+
+1635 
+ËÁ
+ *
+ÃÁ
+;
+
+1637 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1638
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_undef
+));
+
+1639 
+;
+
+1642 ià(
+which
+ =ð
+O_GNBYNAME
+) {
+
+1643 *
+Çme
+ =
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+1645
+ÃÁ
+ =
+ `g‘ÃtbyÇme
+(
+Çme
+);
+
+1647 ià(
+which
+ =ð
+O_GNBYADDR
+) {
+
+1648 
+addr
+ =
+ `U_L
+(
+ `¡r_gnum
+(
+¬y
+->
+¬y_¬¿y
+[
++1]));
+
+1649 
+add¹y³
+ = ()
+ `¡r_gnum
+(
+¬y
+->
+¬y_¬¿y
+[
++2]);
+
+1651
+ÃÁ
+ =
+ `g‘Ãtbyaddr
+(()
+addr
+,
+add¹y³
+);
+
+1654
+ÃÁ
+ =
+ `g‘ËÁ
+();
+
+1656 ià(
+ÃÁ
+) {
+
+1657 #iâdeà
+lšt
+
+
+1658 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1659
+ `¡r_£t
+(
+¡r
+,
+ÃÁ
+->
+n_Çme
+);
+
+1660 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1661 
+–em
+ =
+ÃÁ
+->
+n_®Ÿ£s
+; *elem;ƒlem++) {
+
+1662
+ `¡r_ÿt
+(
+¡r
+, *
+–em
+);
+
+1663 ià(
+–em
+[1])
+
+1664
+ `¡r_nÿt
+(
+¡r
+," ",1);
+
+1666 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1667
+ `¡r_num£t
+(
+¡r
+, ()
+ÃÁ
+->
+n_add¹y³
+);
+
+1668 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1669
+ `¡r_num£t
+(
+¡r
+, ()
+ÃÁ
+->
+n_Ãt
+);
+
+1671
+–em
+ =
+NuÎch
+;
+
+1672
+–em
+ =ƒlem;
+
+1673 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1677 
+;
+
+1678
+ }
+}
+
+1681
+ $do_g³Á
+(
+which
+,
+gimme
+,
+¬gÏ¡
+)
+
+1682 
+which
+;
+
+1683 
+gimme
+;
+
+1684 *
+¬gÏ¡
+;
+
+1686 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+1687 
+ =
+¬gÏ¡
+[0];
+
+1688 **
+–em
+;
+
+1689 
+STR
+ *
+¡r
+;
+
+1690 
+´ÙÛÁ
+ *
+ `g‘´ÙobyÇme
+();
+
+1691 
+´ÙÛÁ
+ *
+ `g‘´Ùobynumb”
+();
+
+1692 
+´ÙÛÁ
+ *
+ `g‘´ÙÛÁ
+();
+
+1693 
+´ÙÛÁ
+ *
+³Á
+;
+
+1695 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1696
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_undef
+));
+
+1697 
+;
+
+1700 ià(
+which
+ =ð
+O_GPBYNAME
+) {
+
+1701 *
+Çme
+ =
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+1703
+³Á
+ =
+ `g‘´ÙobyÇme
+(
+Çme
+);
+
+1705 ià(
+which
+ =ð
+O_GPBYNUMBER
+) {
+
+1706 
+´Ùo
+ = ()
+ `¡r_gnum
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+1708
+³Á
+ =
+ `g‘´Ùobynumb”
+(
+´Ùo
+);
+
+1711
+³Á
+ =
+ `g‘´ÙÛÁ
+();
+
+1713 ià(
+³Á
+) {
+
+1714 #iâdeà
+lšt
+
+
+1715 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1716
+ `¡r_£t
+(
+¡r
+,
+³Á
+->
+p_Çme
+);
+
+1717 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1718 
+–em
+ =
+³Á
+->
+p_®Ÿ£s
+; *elem;ƒlem++) {
+
+1719
+ `¡r_ÿt
+(
+¡r
+, *
+–em
+);
+
+1720 ià(
+–em
+[1])
+
+1721
+ `¡r_nÿt
+(
+¡r
+," ",1);
+
+1723 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1724
+ `¡r_num£t
+(
+¡r
+, ()
+³Á
+->
+p_´Ùo
+);
+
+1726
+–em
+ =
+NuÎch
+;
+
+1727
+–em
+ =ƒlem;
+
+1728 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1732 
+;
+
+1733
+ }
+}
+
+1736
+ $do_g£Á
+(
+which
+,
+gimme
+,
+¬gÏ¡
+)
+
+1737 
+which
+;
+
+1738 
+gimme
+;
+
+1739 *
+¬gÏ¡
+;
+
+1741 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+1742 
+ =
+¬gÏ¡
+[0];
+
+1743 **
+–em
+;
+
+1744 
+STR
+ *
+¡r
+;
+
+1745 
+£rv’t
+ *
+ `g‘£rvbyÇme
+();
+
+1746 
+£rv’t
+ *
+ `g‘£rvbynumb”
+();
+
+1747 
+£rv’t
+ *
+ `g‘£rv’t
+();
+
+1748 
+£rv’t
+ *
+£Á
+;
+
+1750 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1751
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_undef
+));
+
+1752 
+;
+
+1755 ià(
+which
+ =ð
+O_GSBYNAME
+) {
+
+1756 *
+Çme
+ =
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+1757 *
+´Ùo
+ =
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
++2]);
+
+1759 ià(
+´Ùo
+ && !*proto)
+
+1760
+´Ùo
+ =
+NuÎch
+;
+
+1762
+£Á
+ =
+ `g‘£rvbyÇme
+(
+Çme
+,
+´Ùo
+);
+
+1764 ià(
+which
+ =ð
+O_GSBYPORT
+) {
+
+1765 
+pÜt
+ = ()
+ `¡r_gnum
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+1766 *
+´Ùo
+ =
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
++2]);
+
+1768
+£Á
+ =
+ `g‘£rvbypÜt
+(
+pÜt
+,
+´Ùo
+);
+
+1771
+£Á
+ =
+ `g‘£rv’t
+();
+
+1772 ià(
+£Á
+) {
+
+1773 #iâdeà
+lšt
+
+
+1774 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1775
+ `¡r_£t
+(
+¡r
+,
+£Á
+->
+s_Çme
+);
+
+1776 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1777 
+–em
+ =
+£Á
+->
+s_®Ÿ£s
+; *elem;ƒlem++) {
+
+1778
+ `¡r_ÿt
+(
+¡r
+, *
+–em
+);
+
+1779 ià(
+–em
+[1])
+
+1780
+ `¡r_nÿt
+(
+¡r
+," ",1);
+
+1782 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1783 #ifdeà
+HAS_NTOHS
+
+
+1784
+ `¡r_num£t
+(
+¡r
+, ()
+ `Áohs
+(
+£Á
+->
+s_pÜt
+));
+
+1786
+ `¡r_num£t
+(
+¡r
+, ()(
+£Á
+->
+s_pÜt
+));
+
+1788 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1789
+ `¡r_£t
+(
+¡r
+,
+£Á
+->
+s_´Ùo
+);
+
+1791
+–em
+ =
+NuÎch
+;
+
+1792
+–em
+ =ƒlem;
+
+1793 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1797 
+;
+
+1798
+ }
+}
+
+1802 #ifdeà
+HAS_SELECT
+
+
+1804
+ $do_£Ëù
+(
+gimme
+,
+¬gÏ¡
+)
+
+1805 
+gimme
+;
+
+1806 *
+¬gÏ¡
+;
+
+1808 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1809 
+ =
+¬gÏ¡
+[0];
+
+1810 
+i
+;
+
+1811 
+j
+;
+
+1812 *
+s
+;
+
+1813 
+STR
+ *
+¡r
+;
+
+1814 
+v®ue
+;
+
+1815 
+maxËn
+ = 0;
+
+1816 
+nfound
+;
+
+1817 
+timev®
+
+timebuf
+;
+
+1818 
+timev®
+ *
+tbuf
+ = &
+timebuf
+;
+
+1819 
+growsize
+;
+
+1820 #ià
+BYTEORDER
+ != 0x1234 && BYTEORDER != 0x12345678
+
+1821 
+masksize
+;
+
+1822 
+off£t
+;
+
+1823 *
+fd_£ts
+[4];
+
+1824 
+k
+;
+
+1826 #ià
+BYTEORDER
+ & 0xf0000
+
+1827 
+ #ORDERBYTE
+ (0x88888888 -
+BYTEORDER
+)
+
+ )
+
+1829 
+ #ORDERBYTE
+ (0x4444 -
+BYTEORDER
+)
+
+ )
+
+1834 
+i
+ = 1; i <= 3; i++) {
+
+1835
+j
+ =
+[
++
+i
+]->
+¡r_cur
+;
+
+1836 ià(
+maxËn
+ <
+j
+)
+
+1837
+maxËn
+ =
+j
+;
+
+1840 #ià
+BYTEORDER
+ == 0x1234 || BYTEORDER == 0x12345678
+
+1841
+growsize
+ =
+maxËn
+;
+
+1843 #ifdeà
+NFDBITS
+
+
+1845 #iâdeà
+NBBY
+
+
+1846 
+ #NBBY
+ 8
+
+ )
+
+1849
+masksize
+ =
+NFDBITS
+ /
+NBBY
+;
+
+1851
+masksize
+ = ();
+
+1853
+growsize
+ =
+maxËn
+ + (
+masksize
+ - (maxlen % masksize));
+
+1854
+ `Z”o
+(&
+fd_£ts
+[0], 4, *);
+
+1857 
+i
+ = 1; i <= 3; i++) {
+
+1858
+¡r
+ =
+[
++
+i
+];
+
+1859
+j
+ =
+¡r
+->
+¡r_Ën
+;
+
+1860 ià(
+j
+ <
+growsize
+) {
+
+1861 ià(
+¡r
+->
+¡r_pok
+) {
+
+1862
+ `SŒ_Grow
+(
+¡r
+,
+growsize
+);
+
+1863
+s
+ =
+ `¡r_g‘
+(
+¡r
+è+
+j
+;
+
+1864 ++
+j
+ <ð
+growsize
+) {
+
+1865 *
+s
+++ = '\0';
+
+1868 ià(
+¡r
+->
+¡r_±r
+) {
+
+1869
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+1870
+¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1873 #ià
+BYTEORDER
+ != 0x1234 && BYTEORDER != 0x12345678
+
+1874
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+1875 ià(
+s
+) {
+
+1876
+ `New
+(403,
+fd_£ts
+[
+i
+],
+growsize
+, );
+
+1877 
+off£t
+ = 0; off£ˆ<
+growsize
+; off£ˆ+ð
+masksize
+) {
+
+1878 
+j
+ = 0,
+k
+=
+ORDERBYTE
+; j <
+masksize
+; j++, (k >>= 4))
+
+1879
+fd_£ts
+[
+i
+][
+j
++
+off£t
+] =
+s
+[(
+k
+ %
+masksize
+) + offset];
+
+1884
+¡r
+ =
+[
++4];
+
+1885 ià(
+¡r
+->
+¡r_nok
+ || sŒ->
+¡r_pok
+) {
+
+1886
+v®ue
+ =
+ `¡r_gnum
+(
+¡r
+);
+
+1887 ià(
+v®ue
+ < 0.0)
+
+1888
+v®ue
+ = 0.0;
+
+1889
+timebuf
+.
+tv_£c
+ = ()
+v®ue
+;
+
+1890
+v®ue
+ -ð()
+timebuf
+.
+tv_£c
+;
+
+1891
+timebuf
+.
+tv_u£c
+ = ()(
+v®ue
+ * 1000000.0);
+
+1894
+tbuf
+ =
+ `NuÎ
+(
+timev®
+*);
+
+1896 #ià
+BYTEORDER
+ == 0x1234 || BYTEORDER == 0x12345678
+
+1897
+nfound
+ =
+ `£Ëù
+(
+
+1898
+maxËn
+ * 8,
+
+1899
+[
++1]->
+¡r_±r
+,
+
+1900
+[
++2]->
+¡r_±r
+,
+
+1901
+[
++3]->
+¡r_±r
+,
+
+1902
+tbuf
+);
+
+1904
+nfound
+ =
+ `£Ëù
+(
+
+1905
+maxËn
+ * 8,
+
+1906 (*)
+fd_£ts
+[1],
+
+1907 (*)
+fd_£ts
+[2],
+
+1908 (*)
+fd_£ts
+[3],
+
+1909
+tbuf
+);
+
+1910 
+i
+ = 1; i <= 3; i++) {
+
+1911 ià(
+fd_£ts
+[
+i
+]) {
+
+1912
+¡r
+ =
+[
++
+i
+];
+
+1913
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+1914 
+off£t
+ = 0; off£ˆ<
+growsize
+; off£ˆ+ð
+masksize
+) {
+
+1915 
+j
+ = 0,
+k
+=
+ORDERBYTE
+; j <
+masksize
+; j++, (k >>= 4))
+
+1916
+s
+[(
+k
+ %
+masksize
+è+
+off£t
+] =
+fd_£ts
+[
+i
+][
+j
++offset];
+
+1922
+[++
+] =
+ `¡r_mÜl
+(&
+¡r_no
+);
+
+1923
+ `¡r_num£t
+(
+[
+], ()
+nfound
+);
+
+1924 ià(
+gimme
+ =ð
+G_ARRAY
+ &&
+tbuf
+) {
+
+1925
+v®ue
+ = ()(
+timebuf
+.
+tv_£c
+) +
+
+1926 ()(
+timebuf
+.
+tv_u£c
+) / 1000000.0;
+
+1927
+[++
+] =
+ `¡r_mÜl
+(&
+¡r_no
+);
+
+1928
+ `¡r_num£t
+(
+[
+],
+v®ue
+);
+
+1930 
+;
+
+1931
+ }
+}
+
+1934 #ifdeà
+HAS_SOCKET
+
+
+1936
+ $do_¥aœ
+(
+¡ab1
+,
+¡ab2
+,
+¬gÏ¡
+)
+
+1937
+STAB
+ *
+¡ab1
+;
+
+1938
+STAB
+ *
+¡ab2
+;
+
+1939 *
+¬gÏ¡
+;
+
+1941 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1942 
+ =
+¬gÏ¡
+[2];
+
+1943 
+STIO
+ *
+¡io1
+;
+
+1944 
+STIO
+ *
+¡io2
+;
+
+1945 
+domaš
+,
+ty³
+,
+´ÙocÞ
+,
+fd
+[2];
+
+1947 ià(!
+¡ab1
+ || !
+¡ab2
+)
+
+1948 
+FALSE
+;
+
+1950
+¡io1
+ =
+ `¡ab_io
+(
+¡ab1
+);
+
+1951
+¡io2
+ =
+ `¡ab_io
+(
+¡ab2
+);
+
+1952 ià(!
+¡io1
+)
+
+1953
+¡io1
+ =
+ `¡ab_io
+(
+¡ab1
+èð
+ `¡io_Ãw
+();
+
+1954 ià(
+¡io1
+->
+iå
+)
+
+1955
+ `do_þo£
+(
+¡ab1
+,
+FALSE
+);
+
+1956 ià(!
+¡io2
+)
+
+1957
+¡io2
+ =
+ `¡ab_io
+(
+¡ab2
+èð
+ `¡io_Ãw
+();
+
+1958 ià(
+¡io2
+->
+iå
+)
+
+1959
+ `do_þo£
+(
+¡ab2
+,
+FALSE
+);
+
+1961
+domaš
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1962
+ty³
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1963
+´ÙocÞ
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+1964 #ifdeà
+TAINT
+
+
+1965
+ `šrÝ”
+("Insecure dependency in socketpair");
+
+1967 #ifdeà
+HAS_SOCKETPAIR
+
+
+1968 ià(
+ `sock‘·œ
+(
+domaš
+,
+ty³
+,
+´ÙocÞ
+,
+fd
+) < 0)
+
+1969 
+FALSE
+;
+
+1971
+ `çl
+("Socketpair unimplemented");
+
+1973
+¡io1
+->
+iå
+ =
+ `fdÝ’
+(
+fd
+[0], "r");
+
+1974
+¡io1
+->
+oå
+ =
+ `fdÝ’
+(
+fd
+[0], "w");
+
+1975
+¡io1
+->
+ty³
+ = 's';
+
+1976
+¡io2
+->
+iå
+ =
+ `fdÝ’
+(
+fd
+[1], "r");
+
+1977
+¡io2
+->
+oå
+ =
+ `fdÝ’
+(
+fd
+[1], "w");
+
+1978
+¡io2
+->
+ty³
+ = 's';
+
+1979 ià(!
+¡io1
+->
+iå
+ || !¡io1->
+oå
+ || !
+¡io2
+->ifp || !stio2->ofp) {
+
+1980 ià(
+¡io1
+->
+iå
+ `fþo£
+(stio1->ifp);
+
+1981 ià(
+¡io1
+->
+oå
+ `fþo£
+(stio1->ofp);
+
+1982 ià(!
+¡io1
+->
+iå
+ && !¡io1->
+oå
+ `þo£
+(
+fd
+[0]);
+
+1983 ià(
+¡io2
+->
+iå
+ `fþo£
+(stio2->ifp);
+
+1984 ià(
+¡io2
+->
+oå
+ `fþo£
+(stio2->ofp);
+
+1985 ià(!
+¡io2
+->
+iå
+ && !¡io2->
+oå
+ `þo£
+(
+fd
+[1]);
+
+1986 
+FALSE
+;
+
+1989 
+TRUE
+;
+
+1990
+ }
+}
+
+1995
+ $do_gpw’t
+(
+which
+,
+gimme
+,
+¬gÏ¡
+)
+
+1996 
+which
+;
+
+1997 
+gimme
+;
+
+1998 *
+¬gÏ¡
+;
+
+2000 #ifdeà
+I_PWD
+
+
+2001 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+2002 
+ =
+¬gÏ¡
+[0];
+
+2003 
+STR
+ *
+¡r
+;
+
+2004 
+·sswd
+ *
+ `g‘pwÇm
+();
+
+2005 
+·sswd
+ *
+ `g‘pwuid
+();
+
+2006 
+·sswd
+ *
+ `g‘pw’t
+();
+
+2007 
+·sswd
+ *
+pw’t
+;
+
+2009 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+2010
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_undef
+));
+
+2011 
+;
+
+2014 ià(
+which
+ =ð
+O_GPWNAM
+) {
+
+2015 *
+Çme
+ =
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+2017
+pw’t
+ =
+ `g‘pwÇm
+(
+Çme
+);
+
+2019 ià(
+which
+ =ð
+O_GPWUID
+) {
+
+2020 
+uid
+ = ()
+ `¡r_gnum
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+2022
+pw’t
+ =
+ `g‘pwuid
+(
+uid
+);
+
+2025
+pw’t
+ =
+ `g‘pw’t
+();
+
+2027 ià(
+pw’t
+) {
+
+2028 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2029
+ `¡r_£t
+(
+¡r
+,
+pw’t
+->
+pw_Çme
+);
+
+2030 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2031
+ `¡r_£t
+(
+¡r
+,
+pw’t
+->
+pw_·sswd
+);
+
+2032 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2033
+ `¡r_num£t
+(
+¡r
+, ()
+pw’t
+->
+pw_uid
+);
+
+2034 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2035
+ `¡r_num£t
+(
+¡r
+, ()
+pw’t
+->
+pw_gid
+);
+
+2036 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2037 #ifdeà
+PWCHANGE
+
+
+2038
+ `¡r_num£t
+(
+¡r
+, ()
+pw’t
+->
+pw_chªge
+);
+
+2040 #ifdeà
+PWQUOTA
+
+
+2041
+ `¡r_num£t
+(
+¡r
+, ()
+pw’t
+->
+pw_quÙa
+);
+
+2043 #ifdeà
+PWAGE
+
+
+2044
+ `¡r_£t
+(
+¡r
+,
+pw’t
+->
+pw_age
+);
+
+2048 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2049 #ifdeà
+PWCLASS
+
+
+2050
+ `¡r_£t
+(
+¡r
+,
+pw’t
+->
+pw_þass
+);
+
+2052 #ifdeà
+PWCOMMENT
+
+
+2053
+ `¡r_£t
+(
+¡r
+,
+pw’t
+->
+pw_comm’t
+);
+
+2056 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2057
+ `¡r_£t
+(
+¡r
+,
+pw’t
+->
+pw_gecos
+);
+
+2058 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2059
+ `¡r_£t
+(
+¡r
+,
+pw’t
+->
+pw_dœ
+);
+
+2060 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2061
+ `¡r_£t
+(
+¡r
+,
+pw’t
+->
+pw_sh–l
+);
+
+2062 #ifdeà
+PWEXPIRE
+
+
+2063 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2064
+ `¡r_num£t
+(
+¡r
+, ()
+pw’t
+->
+pw_expœe
+);
+
+2068 
+;
+
+2070
+ `çl
+("password„outines‚ot implemented");
+
+2072
+ }
+}
+
+2075
+ $do_gg»Á
+(
+which
+,
+gimme
+,
+¬gÏ¡
+)
+
+2076 
+which
+;
+
+2077 
+gimme
+;
+
+2078 *
+¬gÏ¡
+;
+
+2080 #ifdeà
+I_GRP
+
+
+2081 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+2082 
+ =
+¬gÏ¡
+[0];
+
+2083 **
+–em
+;
+
+2084 
+STR
+ *
+¡r
+;
+
+2085 
+group
+ *
+ `g‘gºam
+();
+
+2086 
+group
+ *
+ `g‘grgid
+();
+
+2087 
+group
+ *
+ `g‘g»Á
+();
+
+2088 
+group
+ *
+g»Á
+;
+
+2090 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+2091
+ `a¡Üe
+(
+¬y
+, ++
+,
+ `¡r_mÜl
+(&
+¡r_undef
+));
+
+2092 
+;
+
+2095 ià(
+which
+ =ð
+O_GGRNAM
+) {
+
+2096 *
+Çme
+ =
+ `¡r_g‘
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+2098
+g»Á
+ =
+ `g‘gºam
+(
+Çme
+);
+
+2100 ià(
+which
+ =ð
+O_GGRGID
+) {
+
+2101 
+gid
+ = ()
+ `¡r_gnum
+(
+¬y
+->
+¬y_¬¿y
+[
++1]);
+
+2103
+g»Á
+ =
+ `g‘grgid
+(
+gid
+);
+
+2106
+g»Á
+ =
+ `g‘g»Á
+();
+
+2108 ià(
+g»Á
+) {
+
+2109 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2110
+ `¡r_£t
+(
+¡r
+,
+g»Á
+->
+gr_Çme
+);
+
+2111 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2112
+ `¡r_£t
+(
+¡r
+,
+g»Á
+->
+gr_·sswd
+);
+
+2113 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2114
+ `¡r_num£t
+(
+¡r
+, ()
+g»Á
+->
+gr_gid
+);
+
+2115 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+2116 
+–em
+ =
+g»Á
+->
+gr_mem
+; *elem;ƒlem++) {
+
+2117
+ `¡r_ÿt
+(
+¡r
+, *
+–em
+);
+
+2118 ià(
+–em
+[1])
+
+2119
+ `¡r_nÿt
+(
+¡r
+," ",1);
+
+2123 
+;
+
+2125
+ `çl
+("group„outines‚ot implemented");
+
+2127
+ }
+}
+
+2130
+ $do_dœÝ
+(
+Ýty³
+,
+¡ab
+,
+gimme
+,
+¬gÏ¡
+)
+
+2131 
+Ýty³
+;
+
+2132
+STAB
+ *
+¡ab
+;
+
+2133 
+gimme
+;
+
+2134 *
+¬gÏ¡
+;
+
+2136 #ià
+ `defšed
+(
+DIRENT
+è&& defšed(
+HAS_READDIR
+)
+
+2137 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+2138 
+STR
+ **
+ =
+¬y
+->
+¬y_¬¿y
+;
+
+2139 
+ =
+¬gÏ¡
+[1];
+
+2140 
+STIO
+ *
+¡io
+;
+
+2141 
+®Úg
+;
+
+2142 #iâdeà
+‹Îdœ
+
+
+2143 
+ `‹Îdœ
+();
+
+2145 
+DIRENT
+ *
+ `»addœ
+();
+
+2146 
+DIRENT
+ *
+dp
+;
+
+2148 ià(!
+¡ab
+)
+
+2149 
+nÝe
+;
+
+2150 ià(!(
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+)))
+
+2151
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+èð
+ `¡io_Ãw
+();
+
+2152 ià(!
+¡io
+->
+dœp
+ &&
+Ýty³
+ !ð
+O_OPENDIR
+)
+
+2153 
+nÝe
+;
+
+2154
+[
+] = &
+¡r_yes
+;
+
+2155 
+Ýty³
+) {
+
+2156 
+O_OPENDIR
+:
+
+2157 ià(
+¡io
+->
+dœp
+)
+
+2158
+ `þo£dœ
+(
+¡io
+->
+dœp
+);
+
+2159 ià(!(
+¡io
+->
+dœp
+ =
+ `Ý’dœ
+(
+ `¡r_g‘
+(
+[
++1]))))
+
+2160 
+nÝe
+;
+
+2162 
+O_READDIR
+:
+
+2163 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+2164 --
+;
+
+2165 
+dp
+ =
+ `»addœ
+(
+¡io
+->
+dœp
+)) {
+
+2166 #ifdeà
+DIRNAMLEN
+
+
+2167 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+2168
+ `¡r_2mÜl
+(
+ `¡r_make
+(
+dp
+->
+d_Çme
+,dp->
+d_ÇmËn
+)));
+
+2170 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+
+2171
+ `¡r_2mÜl
+(
+ `¡r_make
+(
+dp
+->
+d_Çme
+,0)));
+
+2176 ià(!(
+dp
+ =
+ `»addœ
+(
+¡io
+->
+dœp
+)))
+
+2177 
+nÝe
+;
+
+2178
+[
+] =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+2179 #ifdeà
+DIRNAMLEN
+
+
+2180
+ `¡r_n£t
+(
+[
+],
+dp
+->
+d_Çme
+, dp->
+d_ÇmËn
+);
+
+2182
+ `¡r_£t
+(
+[
+],
+dp
+->
+d_Çme
+);
+
+2186 #ià
+MACH
+
+
+2187 
+O_TELLDIR
+:
+
+2188 
+O_SEEKDIR
+:
+
+2189 
+nÝe
+;
+
+2191 
+O_TELLDIR
+:
+
+2192
+[
+] =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+2193
+ `¡r_num£t
+(
+[
+], ()
+ `‹Îdœ
+(
+¡io
+->
+dœp
+));
+
+2195 
+O_SEEKDIR
+:
+
+2196
+[
+] =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+2197
+®Úg
+ = ()
+ `¡r_gnum
+(
+[
++1]);
+
+2198 ()
+ `£ekdœ
+(
+¡io
+->
+dœp
+,
+®Úg
+);
+
+2201 
+O_REWINDDIR
+:
+
+2202
+[
+] =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+2203 ()
+ `»wšddœ
+(
+¡io
+->
+dœp
+);
+
+2205 
+O_CLOSEDIR
+:
+
+2206
+[
+] =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+2207 ()
+ `þo£dœ
+(
+¡io
+->
+dœp
+);
+
+2208
+¡io
+->
+dœp
+ = 0;
+
+2211 
+;
+
+2213
+nÝe
+:
+
+2214
+[
+] = &
+¡r_undef
+;
+
+2215 
+;
+
+2218
+ `çl
+("Unimplemented directory operation");
+
+2220
+ }
+}
+
+2222
+ $­¶y
+(
+ty³
+,
+¬gÏ¡
+)
+
+2223 
+ty³
+;
+
+2224 *
+¬gÏ¡
+;
+
+2226 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+2227 
+ =
+¬gÏ¡
+[1];
+
+2228 
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+2229 
+v®
+;
+
+2230 
+v®2
+;
+
+2231 
+tÙ
+ = 0;
+
+2232 *
+s
+;
+
+2234 #ifdeà
+TAINT
+
+
+2235 
+ +ð++
+;
+™ems
+--; st++)
+
+2236
+š‹d
+ |ð(*
+)->
+¡r_š‹d
+;
+
+2237
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+2238
+ =
+¬gÏ¡
+[1];
+
+2239
+™ems
+ =
+¬gÏ¡
+[2] -
+;
+
+2241 
+ty³
+) {
+
+2242 
+O_CHMOD
+:
+
+2243 #ifdeà
+TAINT
+
+
+2244
+ `šrÝ”
+("Insecure dependency in chmod");
+
+2246 ià(--
+™ems
+ > 0) {
+
+2247
+tÙ
+ =
+™ems
+;
+
+2248
+v®
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2249 
+™ems
+--) {
+
+2250 ià(
+ `chmod
+(
+ `¡r_g‘
+(
+[++
+]),
+v®
+))
+
+2251
+tÙ
+--;
+
+2255 #ifdeà
+HAS_CHOWN
+
+
+2256 
+O_CHOWN
+:
+
+2257 #ifdeà
+TAINT
+
+
+2258
+ `šrÝ”
+("Insecure dependency in chown");
+
+2260 ià(
+™ems
+ > 2) {
+
+2261
+™ems
+ -= 2;
+
+2262
+tÙ
+ =
+™ems
+;
+
+2263
+v®
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2264
+v®2
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2265 
+™ems
+--) {
+
+2266 ià(
+ `chown
+(
+ `¡r_g‘
+(
+[++
+]),
+v®
+,
+v®2
+))
+
+2267
+tÙ
+--;
+
+2272 #ifdeà
+HAS_KILL
+
+
+2273 
+O_KILL
+:
+
+2274 #ifdeà
+TAINT
+
+
+2275
+ `šrÝ”
+("Insecure dependency in kill");
+
+2277 ià(--
+™ems
+ > 0) {
+
+2278
+tÙ
+ =
+™ems
+;
+
+2279
+s
+ =
+ `¡r_g‘
+(
+[++
+]);
+
+2280 ià(
+ `isuµ”
+(*
+s
+)) {
+
+2281 ià(*
+s
+ == 'S' && s[1] == 'I' && s[2] == 'G')
+
+2282
+s
+ += 3;
+
+2283 ià(!(
+v®
+ =
+ `whichsig
+(
+s
+)))
+
+2284
+ `çl
+("UÄecognized sigÇÈÇm\"%s\"",
+s
+);
+
+2287
+v®
+ = ()
+ `¡r_gnum
+(
+[
+]);
+
+2288 ià(
+v®
+ < 0) {
+
+2289
+v®
+ = -val;
+
+2290 
+™ems
+--) {
+
+2291 
+´oc
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2292 #ifdeà
+HAS_KILLPG
+
+
+2293 ià(
+ `kžÍg
+(
+´oc
+,
+v®
+))
+
+2295 ià(
+ `kžl
+(-
+´oc
+,
+v®
+))
+
+2297
+tÙ
+--;
+
+2301 
+™ems
+--) {
+
+2302 ià(
+ `kžl
+(()(
+ `¡r_gnum
+(
+[++
+])),
+v®
+))
+
+2303
+tÙ
+--;
+
+2309 
+O_UNLINK
+:
+
+2310 #ifdeà
+TAINT
+
+
+2311
+ `šrÝ”
+("Insecure dependency in unlink");
+
+2313
+tÙ
+ =
+™ems
+;
+
+2314 
+™ems
+--) {
+
+2315
+s
+ =
+ `¡r_g‘
+(
+[++
+]);
+
+2316 ià(
+euid
+ ||
+un§ã
+) {
+
+2317 ià(
+ `UNLINK
+(
+s
+))
+
+2318
+tÙ
+--;
+
+2321 #ifdeà
+HAS_LSTAT
+
+
+2322 ià(
+ `l¡©
+(
+s
+,&
+¡©buf
+è< 0 ||
+ `S_ISDIR
+(¡©buf.
+¡_mode
+))
+
+2324 ià(
+ `¡©
+(
+s
+,&
+¡©buf
+è< 0 ||
+ `S_ISDIR
+(¡©buf.
+¡_mode
+))
+
+2326
+tÙ
+--;
+
+2328 ià(
+ `UNLINK
+(
+s
+))
+
+2329
+tÙ
+--;
+
+2334 
+O_UTIME
+:
+
+2335 #ifdeà
+TAINT
+
+
+2336
+ `šrÝ”
+("Insecure dependency in utime");
+
+2338 ià(
+™ems
+ > 2) {
+
+2339 #ifdeà
+I_UTIME
+
+
+2340 
+utimbuf
+
+utbuf
+;
+
+2343 
+aùime
+;
+
+2344 
+modtime
+;
+
+2345 }
+utbuf
+;
+
+2348
+ `Z”o
+(&
+utbuf
+,  utbuf, );
+
+2349
+utbuf
+.
+aùime
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2350
+utbuf
+.
+modtime
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2351
+™ems
+ -= 2;
+
+2352 #iâdeà
+lšt
+
+
+2353
+tÙ
+ =
+™ems
+;
+
+2354 
+™ems
+--) {
+
+2355 ià(
+ `utime
+(
+ `¡r_g‘
+(
+[++
+]),&
+utbuf
+))
+
+2356
+tÙ
+--;
+
+2361
+™ems
+ = 0;
+
+2364 
+tÙ
+;
+
+2365
+ }
+}
+
+2370
+ $ÿndo
+(
+b™
+,
+efãùive
+,
+¡©buå
+)
+
+2371 
+b™
+;
+
+2372 
+efãùive
+;
+
+2373 
+¡©
+ *
+¡©buå
+;
+
+2375 #ifdeà
+MSDOS
+
+
+2394  (
+b™
+ &
+¡©buå
+->
+¡_mode
+è?
+TRUE
+ :
+FALSE
+;
+
+2397 ià((
+efãùive
+ ?
+euid
+ :
+uid
+) == 0) {
+
+2398 ià(
+b™
+ =ð
+S_IXUSR
+) {
+
+2399 ià(
+¡©buå
+->
+¡_mode
+ & 0111 ||
+ `S_ISDIR
+(statbufp->st_mode))
+
+2400 
+TRUE
+;
+
+2403 
+TRUE
+;
+
+2404 
+FALSE
+;
+
+2406 ià(
+¡©buå
+->
+¡_uid
+ =ð(
+efãùive
+ ?
+euid
+ :
+uid
+) ) {
+
+2407 ià(
+¡©buå
+->
+¡_mode
+ &
+b™
+)
+
+2408 
+TRUE
+;
+
+2410 ià(
+ `šgroup
+(()
+¡©buå
+->
+¡_gid
+,
+efãùive
+)) {
+
+2411 ià(
+¡©buå
+->
+¡_mode
+ &
+b™
+ >> 3)
+
+2412 
+TRUE
+;
+
+2414 ià(
+¡©buå
+->
+¡_mode
+ &
+b™
+ >> 6)
+
+2415 
+TRUE
+;
+
+2416 
+FALSE
+;
+
+2418
+ }
+}
+
+2421
+ $šgroup
+(
+‹¡gid
+,
+efãùive
+)
+
+2422 
+‹¡gid
+;
+
+2423 
+efãùive
+;
+
+2425 ià(
+‹¡gid
+ =ð(
+efãùive
+ ?
+egid
+ :
+gid
+))
+
+2426 
+TRUE
+;
+
+2427 #ifdeà
+HAS_GETGROUPS
+
+
+2428 #iâdeà
+NGROUPS
+
+
+2429 
+ #NGROUPS
+ 32
+
+ )
+
+2432
+GROUPSTYPE
+
+g¬y
+[
+NGROUPS
+];
+
+2433 
+ªum
+;
+
+2435
+ªum
+ =
+ `g‘groups
+(
+NGROUPS
+,
+g¬y
+);
+
+2436 --
+ªum
+ >= 0)
+
+2437 ià(
+g¬y
+[
+ªum
+] =ð
+‹¡gid
+)
+
+2438 
+TRUE
+;
+
+2441 
+FALSE
+;
+
+2442
+ }
+}
+
+2444 #ià
+defšed
+(
+HAS_MSG
+è|| defšed(
+HAS_SEM
+è|| defšed(
+HAS_SHM
+)
+
+2447
+ $do_cg‘
+(
+Ýty³
+,
+¬gÏ¡
+)
+
+2448 
+Ýty³
+;
+
+2449 *
+¬gÏ¡
+;
+
+2451 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+2452 
+ =
+¬gÏ¡
+[0];
+
+2453
+key_t
+
+key
+;
+
+2454 
+n
+,
+æags
+;
+
+2456
+key
+ = (
+key_t
+)
+ `¡r_gnum
+(
+[++
+]);
+
+2457
+n
+ = (
+Ýty³
+ =ð
+O_MSGGET
+è? 0 : ()
+ `¡r_gnum
+(
+[++
+]);
+
+2458
+æags
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2459
+Ӽo
+ = 0;
+
+2460 
+Ýty³
+)
+
+2462 #ifdeà
+HAS_MSG
+
+
+2463 
+O_MSGGET
+:
+
+2464 
+ `msgg‘
+(
+key
+,
+æags
+);
+
+2466 #ifdeà
+HAS_SEM
+
+
+2467 
+O_SEMGET
+:
+
+2468 
+ `£mg‘
+(
+key
+,
+n
+,
+æags
+);
+
+2470 #ifdeà
+HAS_SHM
+
+
+2471 
+O_SHMGET
+:
+
+2472 
+ `shmg‘
+(
+key
+,
+n
+,
+æags
+);
+
+2474 #ià!
+ `defšed
+(
+HAS_MSG
+è|| !defšed(
+HAS_SEM
+è|| !defšed(
+HAS_SHM
+)
+
+2476
+ `çl
+("% nÙ im¶em’‹d",
+ÝÇme
+[
+Ýty³
+]);
+
+2480
+ }
+}
+
+2483
+ $do_cùl
+(
+Ýty³
+,
+¬gÏ¡
+)
+
+2484 
+Ýty³
+;
+
+2485 *
+¬gÏ¡
+;
+
+2487 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+2488 
+ =
+¬gÏ¡
+[0];
+
+2489
+STR
+ *
+a¡r
+;
+
+2490 *
+a
+;
+
+2491 
+id
+,
+n
+,
+cmd
+,
+šfosize
+,
+g‘šfo
+,
+»t
+;
+
+2493
+id
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2494
+n
+ = (
+Ýty³
+ =ð
+O_SEMCTL
+è? ()
+ `¡r_gnum
+(
+[++
+]) : 0;
+
+2495
+cmd
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2496
+a¡r
+ =
+[++
+];
+
+2498
+šfosize
+ = 0;
+
+2499
+g‘šfo
+ = (
+cmd
+ =ð
+IPC_STAT
+);
+
+2501 
+Ýty³
+)
+
+2503 #ifdeà
+HAS_MSG
+
+
+2504 
+O_MSGCTL
+:
+
+2505 ià(
+cmd
+ =ð
+IPC_STAT
+ || cmd =ð
+IPC_SET
+)
+
+2506
+šfosize
+ = (
+msqid_ds
+);
+
+2509 #ifdeà
+HAS_SHM
+
+
+2510 
+O_SHMCTL
+:
+
+2511 ià(
+cmd
+ =ð
+IPC_STAT
+ || cmd =ð
+IPC_SET
+)
+
+2512
+šfosize
+ = (
+shmid_ds
+);
+
+2515 #ifdeà
+HAS_SEM
+
+
+2516 
+O_SEMCTL
+:
+
+2517 ià(
+cmd
+ =ð
+IPC_STAT
+ || cmd =ð
+IPC_SET
+)
+
+2518
+šfosize
+ = (
+£mid_ds
+);
+
+2519 ià(
+cmd
+ =ð
+GETALL
+ || cmd =ð
+SETALL
+)
+
+2521 
+£mid_ds
+
+£mds
+;
+
+2522 ià(
+ `£mùl
+(
+id
+, 0,
+IPC_STAT
+, &
+£mds
+) == -1)
+
+2524
+g‘šfo
+ = (
+cmd
+ =ð
+GETALL
+);
+
+2525 #ifdeà
+_POSIX_SOURCE
+
+
+2526 
+ushÜt
+
+ tushÜt_t
+;
+
+2527
+šfosize
+ =
+£mds
+.
+£m_n£ms
+ * (
+ushÜt_t
+);
+
+2529
+šfosize
+ =
+£mds
+.
+£m_n£ms
+ * (
+ushÜt
+);
+
+2534 #ià!
+ `defšed
+(
+HAS_MSG
+è|| !defšed(
+HAS_SEM
+è|| !defšed(
+HAS_SHM
+)
+
+2536
+ `çl
+("% nÙ im¶em’‹d",
+ÝÇme
+[
+Ýty³
+]);
+
+2540 ià(
+šfosize
+)
+
+2542 ià(
+g‘šfo
+)
+
+2544
+ `STR_GROW
+(
+a¡r
+,
+šfosize
++1);
+
+2545
+a
+ =
+ `¡r_g‘
+(
+a¡r
+);
+
+2549
+a
+ =
+ `¡r_g‘
+(
+a¡r
+);
+
+2550 ià(
+a¡r
+->
+¡r_cur
+ !ð
+šfosize
+)
+
+2552
+Ӽo
+ =
+EINVAL
+;
+
+2559 
+i
+ = ()
+ `¡r_gnum
+(
+a¡r
+);
+
+2560
+a
+ = (*)
+i
+;
+
+2562
+Ӽo
+ = 0;
+
+2563 
+Ýty³
+)
+
+2565 #ifdeà
+HAS_MSG
+
+
+2566 
+O_MSGCTL
+:
+
+2567
+»t
+ =
+ `msgùl
+(
+id
+,
+cmd
+,
+a
+);
+
+2570 #ifdeà
+HAS_SEM
+
+
+2571 
+O_SEMCTL
+:
+
+2572
+»t
+ =
+ `£mùl
+(
+id
+,
+n
+,
+cmd
+,
+a
+);
+
+2575 #ifdeà
+HAS_SHM
+
+
+2576 
+O_SHMCTL
+:
+
+2577
+»t
+ =
+ `shmùl
+(
+id
+,
+cmd
+,
+a
+);
+
+2581 ià(
+g‘šfo
+ &&
+»t
+ >= 0) {
+
+2582
+a¡r
+->
+¡r_cur
+ =
+šfosize
+;
+
+2583
+a¡r
+->
+¡r_±r
+[
+šfosize
+] = '\0';
+
+2585 
+»t
+;
+
+2586
+ }
+}
+
+2589
+ $do_msg¢d
+(
+¬gÏ¡
+)
+
+2590 *
+¬gÏ¡
+;
+
+2592 #ifdeà
+HAS_MSG
+
+
+2593 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+2594 
+ =
+¬gÏ¡
+[0];
+
+2595
+STR
+ *
+m¡r
+;
+
+2596 *
+mbuf
+;
+
+2597 
+id
+,
+msize
+,
+æags
+;
+
+2599
+id
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2600
+m¡r
+ =
+[++
+];
+
+2601
+æags
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2602
+mbuf
+ =
+ `¡r_g‘
+(
+m¡r
+);
+
+2603 ià((
+msize
+ =
+m¡r
+->
+¡r_cur
+ - ()) < 0) {
+
+2604
+Ӽo
+ =
+EINVAL
+;
+
+2607
+Ӽo
+ = 0;
+
+2608 
+ `msg¢d
+(
+id
+,
+mbuf
+,
+msize
+,
+æags
+);
+
+2610
+ `çl
+("msgsnd‚ot implemented");
+
+2612
+ }
+}
+
+2615
+ $do_msgrcv
+(
+¬gÏ¡
+)
+
+2616 *
+¬gÏ¡
+;
+
+2618 #ifdeà
+HAS_MSG
+
+
+2619 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+2620 
+ =
+¬gÏ¡
+[0];
+
+2621
+STR
+ *
+m¡r
+;
+
+2622 *
+mbuf
+;
+
+2623 
+mty³
+;
+
+2624 
+id
+,
+msize
+,
+æags
+,
+»t
+;
+
+2626
+id
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2627
+m¡r
+ =
+[++
+];
+
+2628
+msize
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2629
+mty³
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2630
+æags
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2631
+mbuf
+ =
+ `¡r_g‘
+(
+m¡r
+);
+
+2632 ià(
+m¡r
+->
+¡r_cur
+ < ()+
+msize
++1) {
+
+2633
+ `STR_GROW
+(
+m¡r
+, ()+
+msize
++1);
+
+2634
+mbuf
+ =
+ `¡r_g‘
+(
+m¡r
+);
+
+2636
+Ӽo
+ = 0;
+
+2637
+»t
+ =
+ `msgrcv
+(
+id
+,
+mbuf
+,
+msize
+,
+mty³
+,
+æags
+);
+
+2638 ià(
+»t
+ >= 0) {
+
+2639
+m¡r
+->
+¡r_cur
+ = ()+
+»t
+;
+
+2640
+m¡r
+->
+¡r_±r
+[()+
+»t
+] = '\0';
+
+2642 
+»t
+;
+
+2644
+ `çl
+("msgrcv‚ot implemented");
+
+2646
+ }
+}
+
+2649
+ $do_£mÝ
+(
+¬gÏ¡
+)
+
+2650 *
+¬gÏ¡
+;
+
+2652 #ifdeà
+HAS_SEM
+
+
+2653 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+2654 
+ =
+¬gÏ¡
+[0];
+
+2655
+STR
+ *
+Ý¡r
+;
+
+2656 *
+Ýbuf
+;
+
+2657 
+id
+,
+Ýsize
+;
+
+2659
+id
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2660
+Ý¡r
+ =
+[++
+];
+
+2661
+Ýbuf
+ =
+ `¡r_g‘
+(
+Ý¡r
+);
+
+2662
+Ýsize
+ =
+Ý¡r
+->
+¡r_cur
+;
+
+2663 ià(
+Ýsize
+ < (
+£mbuf
+)
+
+2664 || (
+Ýsize
+ % (
+£mbuf
+)) != 0) {
+
+2665
+Ӽo
+ =
+EINVAL
+;
+
+2668
+Ӽo
+ = 0;
+
+2669 
+ `£mÝ
+(
+id
+,
+Ýbuf
+,
+Ýsize
+/(
+£mbuf
+));
+
+2671
+ `çl
+("semop‚ot implemented");
+
+2673
+ }
+}
+
+2676
+ $do_shmio
+(
+Ýty³
+,
+¬gÏ¡
+)
+
+2677 
+Ýty³
+;
+
+2678 *
+¬gÏ¡
+;
+
+2680 #ifdeà
+HAS_SHM
+
+
+2681 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+2682 
+ =
+¬gÏ¡
+[0];
+
+2683
+STR
+ *
+m¡r
+;
+
+2684 *
+mbuf
+, *
+shm
+;
+
+2685 
+id
+,
+mpos
+,
+msize
+;
+
+2686 
+shmid_ds
+
+shmds
+;
+
+2687
+*
+ `shm©
+();
+
+2689
+id
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2690
+m¡r
+ =
+[++
+];
+
+2691
+mpos
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2692
+msize
+ = ()
+ `¡r_gnum
+(
+[++
+]);
+
+2693
+Ӽo
+ = 0;
+
+2694 ià(
+ `shmùl
+(
+id
+,
+IPC_STAT
+, &
+shmds
+) == -1)
+
+2696 ià(
+mpos
+ < 0 ||
+msize
+ < 0 || mpo + msiz>
+shmds
+.
+shm_£gsz
+) {
+
+2697
+Ӽo
+ =
+EFAULT
+;
+
+2700
+shm
+ =
+ `shm©
+(
+id
+, (*)
+NULL
+, (
+Ýty³
+ =ð
+O_SHMREAD
+è?
+SHM_RDONLY
+ : 0);
+
+2701 ià(
+shm
+ == (*)-1)
+
+2703
+mbuf
+ =
+ `¡r_g‘
+(
+m¡r
+);
+
+2704 ià(
+Ýty³
+ =ð
+O_SHMREAD
+) {
+
+2705 ià(
+m¡r
+->
+¡r_cur
+ <
+msize
+) {
+
+2706
+ `STR_GROW
+(
+m¡r
+,
+msize
++1);
+
+2707
+mbuf
+ =
+ `¡r_g‘
+(
+m¡r
+);
+
+2709
+ `bcÝy
+(
+shm
+ +
+mpos
+,
+mbuf
+,
+msize
+);
+
+2710
+m¡r
+->
+¡r_cur
+ =
+msize
+;
+
+2711
+m¡r
+->
+¡r_±r
+[
+msize
+] = '\0';
+
+2714 
+n
+;
+
+2716 ià((
+n
+ =
+m¡r
+->
+¡r_cur
+è>
+msize
+)
+
+2717
+n
+ =
+msize
+;
+
+2718
+ `bcÝy
+(
+mbuf
+,
+shm
+ +
+mpos
+,
+n
+);
+
+2719 ià(
+n
+ <
+msize
+)
+
+2720
+ `bz”o
+(
+shm
+ +
+mpos
+ +
+n
+,
+msize
+ -‚);
+
+2722 
+ `shmdt
+(
+shm
+);
+
+2724
+ `çl
+("shm I/O‚ot implemented");
+
+2726
+ }
+}
+
+ @dolist.c
+
+14 
+ ~"EXTERN.h
+"
+
+15 
+ ~"³¾.h
+"
+
+18 #ifdeà
+BUGGY_MSC
+
+
+19 #´agm¨
+funùiÚ
+(
+memcmp
+)
+
+23
+ $do_m©ch
+(
+¡r
+,
+¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+24
+STR
+ *
+¡r
+;
+
+25 
+ARG
+ *
+¬g
+;
+
+26 
+gimme
+;
+
+27 *
+¬gÏ¡
+;
+
+29 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+30 
+SPAT
+ *
+¥©
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+;
+
+31 *
+t
+;
+
+32 
+ =
+¬gÏ¡
+[0] + 1;
+
+33
+STR
+ *
+¤ch¡r
+ =
+[
+];
+
+34 *
+s
+ =
+ `¡r_g‘
+(
+[
+]);
+
+35 *
+¡»nd
+ =
+s
+ +
+[
+]->
+¡r_cur
+;
+
+36
+STR
+ *
+tmp¡r
+;
+
+37 *
+myhšt
+ =
+hšt
+;
+
+39
+hšt
+ =
+NuÎch
+;
+
+40 ià(!
+¥©
+) {
+
+41 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+42  --
+;
+
+43
+ `¡r_£t
+(
+¡r
+,
+Yes
+);
+
+44
+ `STABSET
+(
+¡r
+);
+
+45
+[
+] =
+¡r
+;
+
+46 
+;
+
+48 ià(!
+s
+)
+
+49
+ `çl
+("panic: do_match");
+
+50 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_USED
+) {
+
+51 #ifdeà
+DEBUGGING
+
+
+52 ià(
+debug
+ & 8)
+
+53
+ `deb
+("2.SPAT USED\n");
+
+55 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+56  --
+;
+
+57
+ `¡r_£t
+(
+¡r
+,
+No
+);
+
+58
+ `STABSET
+(
+¡r
+);
+
+59
+[
+] =
+¡r
+;
+
+60 
+;
+
+62 --
+;
+
+63 ià(
+¥©
+->
+¥©_ruÁime
+) {
+
+64
+nošŒp
+ = "|)";
+
+65
+ =
+ `ev®
+(
+¥©
+->
+¥©_ruÁime
+,
+G_SCALAR
+,sp);
+
+66
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+67
+t
+ =
+ `¡r_g‘
+(
+tmp¡r
+ =
+[
+--]);
+
+68
+nošŒp
+ = "";
+
+69 #ifdeà
+DEBUGGING
+
+
+70 ià(
+debug
+ & 8)
+
+71
+ `deb
+("2.SPAT /%s/\n",
+t
+);
+
+73 ià(
+¥©
+->
+¥©_»gexp
+) {
+
+74
+ `»gä“
+(
+¥©
+->
+¥©_»gexp
+);
+
+75
+¥©
+->
+¥©_»gexp
+ =
+ `NuÎ
+(
+REGEXP
+*);
+
+77
+¥©
+->
+¥©_»gexp
+ =
+ `»gcomp
+(
+t
+,t+
+tmp¡r
+->
+¡r_cur
+,
+
+78
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+79 ià(!*
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+ &&
+Ï¡¥©
+)
+
+80
+¥©
+ =
+Ï¡¥©
+;
+
+81 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_KEEP
+) {
+
+82 ià(
+¥©
+->
+¥©_ruÁime
+)
+
+83
+ `¬g_ä“
+(
+¥©
+->
+¥©_ruÁime
+);
+
+84
+¥©
+->
+¥©_ruÁime
+ =
+Nuάg
+;
+
+86 ià(!
+¥©
+->
+¥©_»gexp
+->
+Ŭ’s
+)
+
+87
+gimme
+ =
+G_SCALAR
+;
+
+88 ià(
+ `»gexec
+(
+¥©
+->
+¥©_»gexp
+,
+s
+,
+¡»nd
+, s, 0,
+
+89
+¤ch¡r
+->
+¡r_pok
+ &
+SP_STUDIED
+ ? srch¡¸:
+NuΡr
+,
+
+90
+gimme
+ =ð
+G_ARRAY
+)) {
+
+91 ià(
+¥©
+->
+¥©_»gexp
+->
+subba£
+)
+
+92
+cur¥©
+ =
+¥©
+;
+
+93
+Ï¡¥©
+ =
+¥©
+;
+
+94 
+gÙcha
+;
+
+97 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+98 
+;
+
+99
+ `¡r_s£t
+(
+¡r
+,&
+¡r_no
+);
+
+100
+ `STABSET
+(
+¡r
+);
+
+101
+[++
+] =
+¡r
+;
+
+102 
+;
+
+106 #ifdeà
+DEBUGGING
+
+
+107 ià(
+debug
+ & 8) {
+
+108 
+ch
+;
+
+110 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_ONCE
+)
+
+111
+ch
+ = '?';
+
+113
+ch
+ = '/';
+
+114
+ `deb
+("2.SPAT %c%s%c\n",
+ch
+,
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+,ch);
+
+117 ià(!*
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+ &&
+Ï¡¥©
+)
+
+118
+¥©
+ =
+Ï¡¥©
+;
+
+119
+t
+ =
+s
+;
+
+120 ià(
+myhšt
+) {
+
+121 ià(
+myhšt
+ <
+s
+ || myhšˆ>
+¡»nd
+)
+
+122
+ `çl
+("panic: hint in do_match");
+
+123
+s
+ =
+myhšt
+;
+
+124 ià(
+¥©
+->
+¥©_»gexp
+->
+»gback
+ >= 0) {
+
+125
+s
+ -ð
+¥©
+->
+¥©_»gexp
+->
+»gback
+;
+
+126 ià(
+s
+ <
+t
+)
+
+127
+s
+ =
+t
+;
+
+130
+s
+ =
+t
+;
+
+132 ià(
+¥©
+->
+¥©_shÜt
+) {
+
+133 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_SCANFIRST
+) {
+
+134 ià(
+¤ch¡r
+->
+¡r_pok
+ &
+SP_STUDIED
+) {
+
+135 ià(
+sü—mfœ¡
+[
+¥©
+->
+¥©_shÜt
+->
+¡r_¿»
+] < 0)
+
+136 
+nÝe
+;
+
+137 ià(!(
+s
+ =
+ `sü—mš¡r
+(
+¤ch¡r
+,
+¥©
+->
+¥©_shÜt
+)))
+
+138 
+nÝe
+;
+
+139 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_ALL
+)
+
+140 
+yup
+;
+
+142 #iâdeà
+lšt
+
+
+143 ià(!(
+s
+ =
+ `fbmš¡r
+((*)s,
+
+144 (*)
+¡»nd
+,
+¥©
+->
+¥©_shÜt
+)))
+
+145 
+nÝe
+;
+
+147 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_ALL
+)
+
+148 
+yup
+;
+
+149 ià(
+s
+ &&
+¥©
+->
+¥©_»gexp
+->
+»gback
+ >= 0) {
+
+150 ++
+¥©
+->
+¥©_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+151
+s
+ -ð
+¥©
+->
+¥©_»gexp
+->
+»gback
+;
+
+152 ià(
+s
+ <
+t
+)
+
+153
+s
+ =
+t
+;
+
+156
+s
+ =
+t
+;
+
+158 ià(!
+muÉžše
+ && (*
+¥©
+->
+¥©_shÜt
+->
+¡r_±r
+ !ð*
+s
+ ||
+
+159
+ `bcmp
+(
+¥©
+->
+¥©_shÜt
+->
+¡r_±r
+,
+s
+, s·t->
+¥©_¦’
+) ))
+
+160 
+nÝe
+;
+
+161 ià(--
+¥©
+->
+¥©_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+ < 0) {
+
+162
+ `¡r_ä“
+(
+¥©
+->
+¥©_shÜt
+);
+
+163
+¥©
+->
+¥©_shÜt
+ =
+NuΡr
+;
+
+166 ià(!
+¥©
+->
+¥©_»gexp
+->
+Ŭ’s
+)
+
+167
+gimme
+ =
+G_SCALAR
+;
+
+168 ià(
+ `»gexec
+(
+¥©
+->
+¥©_»gexp
+,
+s
+,
+¡»nd
+,
+t
+, 0,
+
+169
+¤ch¡r
+->
+¡r_pok
+ &
+SP_STUDIED
+ ? srch¡¸:
+NuΡr
+,
+
+170
+gimme
+ =ð
+G_ARRAY
+)) {
+
+171 ià(
+¥©
+->
+¥©_»gexp
+->
+subba£
+)
+
+172
+cur¥©
+ =
+¥©
+;
+
+173
+Ï¡¥©
+ =
+¥©
+;
+
+174 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_ONCE
+)
+
+175
+¥©
+->
+¥©_æags
+ |ð
+SPAT_USED
+;
+
+176 
+gÙcha
+;
+
+179 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+180 
+;
+
+181
+ `¡r_s£t
+(
+¡r
+,&
+¡r_no
+);
+
+182
+ `STABSET
+(
+¡r
+);
+
+183
+[++
+] =
+¡r
+;
+
+184 
+;
+
+189
+gÙcha
+:
+
+190 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+191 
+™”s
+,
+i
+,
+Ën
+;
+
+193
+™”s
+ =
+¥©
+->
+¥©_»gexp
+->
+Ŭ’s
+;
+
+194 ià(
+ +
+™”s
+ >ð
+¡ack
+->
+¬y_max
+) {
+
+195
+ `a¡Üe
+(
+¡ack
+,
+ +
+™”s
+,
+NuΡr
+);
+
+196
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+199 
+i
+ = 1; i <ð
+™”s
+; i++) {
+
+200
+[++
+] =
+ `¡r_mÜl
+(&
+¡r_no
+);
+
+201 ià(
+s
+ =
+¥©
+->
+¥©_»gexp
+->
+¡¬
+[
+i
+]) {
+
+202
+Ën
+ =
+¥©
+->
+¥©_»gexp
+->
+’dp
+[
+i
+] -
+s
+;
+
+203 ià(
+Ën
+ > 0)
+
+204
+ `¡r_n£t
+(
+[
+],
+s
+,
+Ën
+);
+
+207 
+;
+
+210
+ `¡r_s£t
+(
+¡r
+,&
+¡r_yes
+);
+
+211
+ `STABSET
+(
+¡r
+);
+
+212
+[++
+] =
+¡r
+;
+
+213 
+;
+
+216
+yup
+:
+
+217 ++
+¥©
+->
+¥©_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+218
+Ï¡¥©
+ =
+¥©
+;
+
+219 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_ONCE
+)
+
+220
+¥©
+->
+¥©_æags
+ |ð
+SPAT_USED
+;
+
+221 ià(
+§wam³r§nd
+) {
+
+222 *
+tmps
+;
+
+224 ià(
+¥©
+->
+¥©_»gexp
+->
+subba£
+)
+
+225
+ `Saãä“
+(
+¥©
+->
+¥©_»gexp
+->
+subba£
+);
+
+226
+tmps
+ =
+¥©
+->
+¥©_»gexp
+->
+subba£
+ =
+ `n§ve¡r
+(
+t
+,
+¡»nd
+-t);
+
+227
+¥©
+->
+¥©_»gexp
+->
+sub’d
+ =
+tmps
+ + (
+¡»nd
+-
+t
+);
+
+228
+tmps
+ =
+¥©
+->
+¥©_»gexp
+->
+¡¬
+[0] =mp + (
+s
+ -
+t
+);
+
+229
+¥©
+->
+¥©_»gexp
+->
+’dp
+[0] =
+tmps
+ + s·t->
+¥©_shÜt
+->
+¡r_cur
+;
+
+230
+cur¥©
+ =
+¥©
+;
+
+232
+ `¡r_s£t
+(
+¡r
+,&
+¡r_yes
+);
+
+233
+ `STABSET
+(
+¡r
+);
+
+234
+[++
+] =
+¡r
+;
+
+235 
+;
+
+237
+nÝe
+:
+
+238 ++
+¥©
+->
+¥©_shÜt
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+239 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+240 
+;
+
+241
+ `¡r_s£t
+(
+¡r
+,&
+¡r_no
+);
+
+242
+ `STABSET
+(
+¡r
+);
+
+243
+[++
+] =
+¡r
+;
+
+244 
+;
+
+245
+ }
+}
+
+247 #ifdeà
+BUGGY_MSC
+
+
+248 #´agm¨
+šŒšsic
+(
+memcmp
+)
+
+252
+ $do_¥l™
+(
+¡r
+,
+¥©
+,
+lim™
+,
+gimme
+,
+¬gÏ¡
+)
+
+253
+STR
+ *
+¡r
+;
+
+254 
+SPAT
+ *
+¥©
+;
+
+255 
+lim™
+;
+
+256 
+gimme
+;
+
+257 *
+¬gÏ¡
+;
+
+259 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+260
+STR
+ **
+ =
+¬y
+->
+¬y_¬¿y
+;
+
+261 
+ =
+¬gÏ¡
+[0] + 1;
+
+262 *
+s
+ =
+ `¡r_g‘
+(
+[
+]);
+
+263 *
+¡»nd
+ =
+s
+ +
+[
+--]->
+¡r_cur
+;
+
+264 
+STR
+ *
+d¡r
+;
+
+265 *
+m
+;
+
+266 
+™”s
+ = 0;
+
+267 
+max™”s
+ = (
+¡»nd
+ -
+s
+) + 10;
+
+268 
+i
+;
+
+269 *
+Üig
+;
+
+270 
+Üiglim™
+ =
+lim™
+;
+
+271 
+»®¬¿y
+ = 0;
+
+273 ià(!
+¥©
+ || !
+s
+)
+
+274
+ `çl
+("panic: do_split");
+
+275 ià(
+¥©
+->
+¥©_ruÁime
+) {
+
+276
+nošŒp
+ = "|)";
+
+277
+ =
+ `ev®
+(
+¥©
+->
+¥©_ruÁime
+,
+G_SCALAR
+,sp);
+
+278
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+279
+m
+ =
+ `¡r_g‘
+(
+d¡r
+ =
+[
+--]);
+
+280
+nošŒp
+ = "";
+
+281 ià(*
+m
+ =ð' ' &&
+d¡r
+->
+¡r_cur
+ == 1) {
+
+282
+ `¡r_£t
+(
+d¡r
+,"\\s+");
+
+283
+m
+ =
+d¡r
+->
+¡r_±r
+;
+
+284
+¥©
+->
+¥©_æags
+ |ð
+SPAT_SKIPWHITE
+;
+
+286 ià(
+¥©
+->
+¥©_»gexp
+) {
+
+287
+ `»gä“
+(
+¥©
+->
+¥©_»gexp
+);
+
+288
+¥©
+->
+¥©_»gexp
+ =
+ `NuÎ
+(
+REGEXP
+*);
+
+290
+¥©
+->
+¥©_»gexp
+ =
+ `»gcomp
+(
+m
+,m+
+d¡r
+->
+¡r_cur
+,
+
+291
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+292 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_KEEP
+ ||
+
+293 (
+¥©
+->
+¥©_ruÁime
+->
+¬g_ty³
+ =ð
+O_ITEM
+ &&
+
+294 (
+¥©
+->
+¥©_ruÁime
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+) ) {
+
+295
+ `¬g_ä“
+(
+¥©
+->
+¥©_ruÁime
+);
+
+296
+¥©
+->
+¥©_ruÁime
+ =
+Nuάg
+;
+
+299 #ifdeà
+DEBUGGING
+
+
+300 ià(
+debug
+ & 8) {
+
+301
+ `deb
+("2.SPAT /%s/\n",
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+);
+
+304
+¬y
+ =
+ `¡ab_x¬¿y
+(
+¥©
+->
+¥©_»¶
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+305 ià(
+¬y
+ && (
+gimme
+ !ð
+G_ARRAY
+ || (
+¥©
+->
+¥©_æags
+ &
+SPAT_ONCE
+))) {
+
+306
+»®¬¿y
+ = 1;
+
+307 ià(!(
+¬y
+->
+¬y_æags
+ &
+ARF_REAL
+)) {
+
+308
+¬y
+->
+¬y_æags
+ |ð
+ARF_REAL
+;
+
+309 
+i
+ =
+¬y
+->
+¬y_fžl
+; i >= 0; i--)
+
+310
+¬y
+->
+¬y_¬¿y
+[
+i
+] =
+NuΡr
+;
+
+312
+¬y
+->
+¬y_fžl
+ = -1;
+
+313
+ = -1;
+
+316
+¬y
+ =
+¡ack
+;
+
+317
+Üig
+ =
+s
+;
+
+318 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_SKIPWHITE
+) {
+
+319 
+ `i§scii
+(*
+s
+è&&
+ `is¥aû
+(*s))
+
+320
+s
+++;
+
+322 ià(!
+lim™
+)
+
+323
+lim™
+ =
+max™”s
+ + 2;
+
+324 ià(
+ `¡rEQ
+("\\s+",
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+)) {
+
+325 --
+lim™
+) {
+
+326 
+m
+ =
+s
+; m <
+¡»nd
+ && !(
+ `i§scii
+(*m)&&
+ `is¥aû
+(*m)); m++) ;
+
+327 ià(
+m
+ >ð
+¡»nd
+)
+
+329
+d¡r
+ =
+ `SŒ_Ãw
+(30,
+m
+-
+s
+);
+
+330
+ `¡r_n£t
+(
+d¡r
+,
+s
+,
+m
+-s);
+
+331 ià(!
+»®¬¿y
+)
+
+332
+ `¡r_2mÜl
+(
+d¡r
+);
+
+333 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+d¡r
+);
+
+334 
+s
+ =
+m
+ + 1; s <
+¡»nd
+ &&
+ `i§scii
+(*sè&&
+ `is¥aû
+(*s); s++) ;
+
+337 ià(
+ `¡rEQ
+("^",
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+)) {
+
+338 --
+lim™
+) {
+
+339 
+m
+ =
+s
+; m <
+¡»nd
+ && *m != '\n'; m++) ;
+
+340
+m
+++;
+
+341 ià(
+m
+ >ð
+¡»nd
+)
+
+343
+d¡r
+ =
+ `SŒ_Ãw
+(30,
+m
+-
+s
+);
+
+344
+ `¡r_n£t
+(
+d¡r
+,
+s
+,
+m
+-s);
+
+345 ià(!
+»®¬¿y
+)
+
+346
+ `¡r_2mÜl
+(
+d¡r
+);
+
+347 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+d¡r
+);
+
+348
+s
+ =
+m
+;
+
+351 ià(
+¥©
+->
+¥©_shÜt
+) {
+
+352
+i
+ =
+¥©
+->
+¥©_shÜt
+->
+¡r_cur
+;
+
+353 ià(
+i
+ == 1) {
+
+354 
+fÞd
+ = (
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+356
+i
+ = *
+¥©
+->
+¥©_shÜt
+->
+¡r_±r
+;
+
+357 ià(
+fÞd
+ &&
+ `isuµ”
+(
+i
+))
+
+358
+i
+ =
+ `tÞow”
+(i);
+
+359 --
+lim™
+) {
+
+360 ià(
+fÞd
+) {
+
+361 
+m
+ =
+s
+;
+
+362
+m
+ <
+¡»nd
+ && *m !ð
+i
+ &&
+
+363 (!
+ `isuµ”
+(*
+m
+è||
+ `tÞow”
+(*mè!ð
+i
+);
+
+364
+m
+++)
+
+368 
+m
+ =
+s
+; m <
+¡»nd
+ && *m !ð
+i
+; m++) ;
+
+369 ià(
+m
+ >ð
+¡»nd
+)
+
+371
+d¡r
+ =
+ `SŒ_Ãw
+(30,
+m
+-
+s
+);
+
+372
+ `¡r_n£t
+(
+d¡r
+,
+s
+,
+m
+-s);
+
+373 ià(!
+»®¬¿y
+)
+
+374
+ `¡r_2mÜl
+(
+d¡r
+);
+
+375 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+d¡r
+);
+
+376
+s
+ =
+m
+ + 1;
+
+380 #iâdeà
+lšt
+
+
+381 
+s
+ <
+¡»nd
+ && --
+lim™
+ &&
+
+382 (
+m
+=
+ `fbmš¡r
+((*)
+s
+, (*)
+¡»nd
+,
+
+383
+¥©
+->
+¥©_shÜt
+)) )
+
+386
+d¡r
+ =
+ `SŒ_Ãw
+(31,
+m
+-
+s
+);
+
+387
+ `¡r_n£t
+(
+d¡r
+,
+s
+,
+m
+-s);
+
+388 ià(!
+»®¬¿y
+)
+
+389
+ `¡r_2mÜl
+(
+d¡r
+);
+
+390 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+d¡r
+);
+
+391
+s
+ =
+m
+ +
+i
+;
+
+396
+max™”s
+ +ð(
+¡»nd
+ -
+s
+è*
+¥©
+->
+¥©_»gexp
+->
+Ŭ’s
+;
+
+397 
+s
+ <
+¡»nd
+ && --
+lim™
+ &&
+
+398
+ `»gexec
+(
+¥©
+->
+¥©_»gexp
+,
+s
+,
+¡»nd
+,
+Üig
+, 1,
+NuΡr
+,
+TRUE
+) ) {
+
+399 ià(
+¥©
+->
+¥©_»gexp
+->
+subba£
+
+
+400 &&
+¥©
+->
+¥©_»gexp
+->
+subba£
+ !ð
+Üig
+) {
+
+401
+m
+ =
+s
+;
+
+402
+s
+ =
+Üig
+;
+
+403
+Üig
+ =
+¥©
+->
+¥©_»gexp
+->
+subba£
+;
+
+404
+s
+ =
+Üig
+ + (
+m
+ - s);
+
+405
+¡»nd
+ =
+s
+ + (¡»nd -
+m
+);
+
+407
+m
+ =
+¥©
+->
+¥©_»gexp
+->
+¡¬
+[0];
+
+408
+d¡r
+ =
+ `SŒ_Ãw
+(32,
+m
+-
+s
+);
+
+409
+ `¡r_n£t
+(
+d¡r
+,
+s
+,
+m
+-s);
+
+410 ià(!
+»®¬¿y
+)
+
+411
+ `¡r_2mÜl
+(
+d¡r
+);
+
+412 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+d¡r
+);
+
+413 ià(
+¥©
+->
+¥©_»gexp
+->
+Ŭ’s
+) {
+
+414 
+i
+ = 1; i <ð
+¥©
+->
+¥©_»gexp
+->
+Ŭ’s
+; i++) {
+
+415
+s
+ =
+¥©
+->
+¥©_»gexp
+->
+¡¬
+[
+i
+];
+
+416
+m
+ =
+¥©
+->
+¥©_»gexp
+->
+’dp
+[
+i
+];
+
+417
+d¡r
+ =
+ `SŒ_Ãw
+(33,
+m
+-
+s
+);
+
+418
+ `¡r_n£t
+(
+d¡r
+,
+s
+,
+m
+-s);
+
+419 ià(!
+»®¬¿y
+)
+
+420
+ `¡r_2mÜl
+(
+d¡r
+);
+
+421 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+d¡r
+);
+
+424
+s
+ =
+¥©
+->
+¥©_»gexp
+->
+’dp
+[0];
+
+427 ià(
+»®¬¿y
+)
+
+428
+™”s
+ =
+ + 1;
+
+430
+™”s
+ =
+ -
+¬gÏ¡
+[0];
+
+431 ià(
+™”s
+ >
+max™”s
+)
+
+432
+ `çl
+("Split†oop");
+
+433 ià(
+s
+ <
+¡»nd
+ ||
+Üiglim™
+) {
+
+434
+d¡r
+ =
+ `SŒ_Ãw
+(34,
+¡»nd
+-
+s
+);
+
+435
+ `¡r_n£t
+(
+d¡r
+,
+s
+,
+¡»nd
+-s);
+
+436 ià(!
+»®¬¿y
+)
+
+437
+ `¡r_2mÜl
+(
+d¡r
+);
+
+438 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+d¡r
+);
+
+439
+™”s
+++;
+
+442 #iâdeà
+I286x
+
+
+443 
+™”s
+ > 0 &&
+¬y
+->
+¬y_¬¿y
+[
+]->
+¡r_cur
+ == 0)
+
+444
+™”s
+--,
+--;
+
+446 *
+z­s
+;
+
+447 
+z­b
+;
+
+449 ià(
+™”s
+ > 0) {
+
+450
+z­s
+ =
+ `¡r_g‘
+(
+ `aãtch
+(
+¬y
+,
+,
+FALSE
+));
+
+451
+z­b
+ = (è*
+z­s
+;
+
+454 
+™”s
+ > 0 && (!
+z­b
+)) {
+
+455
+™”s
+--,
+--;
+
+456 ià(
+™”s
+ > 0) {
+
+457
+z­s
+ =
+ `¡r_g‘
+(
+ `aãtch
+(
+¬y
+,
+™”s
+-1,
+FALSE
+));
+
+458
+z­b
+ = (è*
+z­s
+;
+
+463 ià(
+»®¬¿y
+) {
+
+464
+¬y
+->
+¬y_fžl
+ =
+;
+
+465 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+466
+++;
+
+467
+ `a¡Üe
+(
+¡ack
+,
+¬gÏ¡
+[0] + 1 +
+,
+NuΡr
+);
+
+468
+ `CÝy
+(
+¬y
+->
+¬y_¬¿y
+,
+¡ack
+->¬y_¬¿y +
+¬gÏ¡
+[0] + 1,
+,
+STR
+*);
+
+469 
+¬gÏ¡
+[0] +
+;
+
+473 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+474 
+;
+
+476
+ =
+¬gÏ¡
+[0] + 1;
+
+477
+ `¡r_num£t
+(
+¡r
+,()
+™”s
+);
+
+478
+ `STABSET
+(
+¡r
+);
+
+479
+[
+] =
+¡r
+;
+
+480 
+;
+
+481
+ }
+}
+
+484
+ $do_uÅack
+(
+¡r
+,
+gimme
+,
+¬gÏ¡
+)
+
+485
+STR
+ *
+¡r
+;
+
+486 
+gimme
+;
+
+487 *
+¬gÏ¡
+;
+
+489
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+490 
+ =
+¬gÏ¡
+[0] + 1;
+
+491 *
+·t
+ =
+ `¡r_g‘
+(
+[
+++]);
+
+492 *
+s
+ =
+ `¡r_g‘
+(
+[
+]);
+
+493 *
+¡»nd
+ =
+s
+ +
+[
+--]->
+¡r_cur
+;
+
+494 *
+¡rbeg
+ =
+s
+;
+
+495 *
+·‹nd
+ =
+·t
+ +
+[
+]->
+¡r_cur
+;
+
+496 
+d©umty³
+;
+
+497 
+Ën
+;
+
+498 
+b™s
+;
+
+501 
+ashÜt
+;
+
+502 
+ašt
+;
+
+503 
+®Úg
+;
+
+504 
+aushÜt
+;
+
+505 
+aušt
+;
+
+506 
+aulÚg
+;
+
+507 *
+­Œ
+;
+
+508 
+aæßt
+;
+
+509 
+adoubË
+;
+
+510 
+checksum
+ = 0;
+
+511 
+culÚg
+;
+
+512 
+cdoubË
+;
+
+514 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+515 
+·‹nd
+ =
+·t
+; !
+ `i§Íha
+(*patend);…atend++);
+
+516 ià(
+ `šdex
+("aAbBhH", *
+·‹nd
+è|| *
+·t
+ == '%') {
+
+517
+·‹nd
+++;
+
+518 
+ `isdig™
+(*
+·‹nd
+) || *patend == '*')
+
+519
+·‹nd
+++;
+
+522
+·‹nd
+++;
+
+524
+--;
+
+525 
+·t
+ <
+·‹nd
+) {
+
+526
+»·r£
+:
+
+527
+d©umty³
+ = *
+·t
+++;
+
+528 ià(
+·t
+ >ð
+·‹nd
+)
+
+529
+Ën
+ = 1;
+
+530 ià(*
+·t
+ == '*') {
+
+531
+Ën
+ =
+¡»nd
+ -
+¡rbeg
+;
+
+532
+·t
+++;
+
+534 ià(
+ `isdig™
+(*
+·t
+)) {
+
+535
+Ën
+ = *
+·t
+++ - '0';
+
+536 
+ `isdig™
+(*
+·t
+))
+
+537
+Ën
+ = (ËÀ* 10è+ (*
+·t
+++ - '0');
+
+540
+Ën
+ = (
+d©umty³
+ != '@');
+
+541 
+d©umty³
+) {
+
+545 ià(
+Ën
+ =ð1 &&
+·t
+[-1] != '1')
+
+546
+Ën
+ = 16;
+
+547
+checksum
+ =
+Ën
+;
+
+548
+culÚg
+ = 0;
+
+549
+cdoubË
+ = 0;
+
+550 ià(
+·t
+ <
+·‹nd
+)
+
+551 
+»·r£
+;
+
+554 ià(
+Ën
+ >
+¡»nd
+ -
+s
+)
+
+555
+ `çl
+("@ outside of string");
+
+556
+s
+ =
+¡rbeg
+ +
+Ën
+;
+
+559 ià(
+Ën
+ >
+s
+ -
+¡rbeg
+)
+
+560
+ `çl
+("X outside of string");
+
+561
+s
+ -ð
+Ën
+;
+
+564 ià(
+Ën
+ >
+¡»nd
+ -
+s
+)
+
+565
+ `çl
+("x outside of string");
+
+566
+s
+ +ð
+Ën
+;
+
+570 ià(
+Ën
+ >
+¡»nd
+ -
+s
+)
+
+571
+Ën
+ =
+¡»nd
+ -
+s
+;
+
+572 ià(
+checksum
+)
+
+573 
+uch¬_checksum
+;
+
+574
+¡r
+ =
+ `SŒ_Ãw
+(35,
+Ën
+);
+
+575
+ `¡r_n£t
+(
+¡r
+,
+s
+,
+Ën
+);
+
+576
+s
+ +ð
+Ën
+;
+
+577 ià(
+d©umty³
+ == 'A') {
+
+578
+­Œ
+ =
+s
+;
+
+579
+s
+ =
+¡r
+->
+¡r_±r
+ +
+Ën
+ - 1;
+
+580 
+s
+ >ð
+¡r
+->
+¡r_±r
+ && (!* || (
+ `i§scii
+(*s)&&
+ `is¥aû
+(*s))))
+
+581
+s
+--;
+
+582 *++
+s
+ = '\0';
+
+583
+¡r
+->
+¡r_cur
+ =
+s
+ - sŒ->
+¡r_±r
+;
+
+584
+s
+ =
+­Œ
+;
+
+586 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+590 ià(
+·t
+[-1] =ð'*' ||
+Ën
+ > (
+¡»nd
+ -
+s
+) * 8)
+
+591
+Ën
+ = (
+¡»nd
+ -
+s
+) * 8;
+
+592
+¡r
+ =
+ `SŒ_Ãw
+(35,
+Ën
+ + 1);
+
+593
+¡r
+->
+¡r_cur
+ =
+Ën
+;
+
+594
+¡r
+->
+¡r_pok
+ = 1;
+
+595
+­Œ
+ =
+·t
+;
+
+596
+·t
+ =
+¡r
+->
+¡r_±r
+;
+
+597 ià(
+d©umty³
+ == 'b') {
+
+598
+ašt
+ =
+Ën
+;
+
+599 
+Ën
+ = 0;†’ <
+ašt
+;†en++) {
+
+600 ià(
+Ën
+ & 7)
+
+601
+b™s
+ >>= 1;
+
+603
+b™s
+ = *
+s
+++;
+
+604 *
+·t
+++ = '0' + (
+b™s
+ & 1);
+
+608
+ašt
+ =
+Ën
+;
+
+609 
+Ën
+ = 0;†’ <
+ašt
+;†en++) {
+
+610 ià(
+Ën
+ & 7)
+
+611
+b™s
+ <<= 1;
+
+613
+b™s
+ = *
+s
+++;
+
+614 *
+·t
+++ = '0' + ((
+b™s
+ & 128) != 0);
+
+617 *
+·t
+ = '\0';
+
+618
+·t
+ =
+­Œ
+;
+
+619 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+623 ià(
+·t
+[-1] =ð'*' ||
+Ën
+ > (
+¡»nd
+ -
+s
+) * 2)
+
+624
+Ën
+ = (
+¡»nd
+ -
+s
+) * 2;
+
+625
+¡r
+ =
+ `SŒ_Ãw
+(35,
+Ën
+ + 1);
+
+626
+¡r
+->
+¡r_cur
+ =
+Ën
+;
+
+627
+¡r
+->
+¡r_pok
+ = 1;
+
+628
+­Œ
+ =
+·t
+;
+
+629
+·t
+ =
+¡r
+->
+¡r_±r
+;
+
+630 ià(
+d©umty³
+ == 'h') {
+
+631
+ašt
+ =
+Ën
+;
+
+632 
+Ën
+ = 0;†’ <
+ašt
+;†en++) {
+
+633 ià(
+Ën
+ & 1)
+
+634
+b™s
+ >>= 4;
+
+636
+b™s
+ = *
+s
+++;
+
+637 *
+·t
+++ =
+hexdig™
+[
+b™s
+ & 15];
+
+641
+ašt
+ =
+Ën
+;
+
+642 
+Ën
+ = 0;†’ <
+ašt
+;†en++) {
+
+643 ià(
+Ën
+ & 1)
+
+644
+b™s
+ <<= 4;
+
+646
+b™s
+ = *
+s
+++;
+
+647 *
+·t
+++ =
+hexdig™
+[(
+b™s
+ >> 4) & 15];
+
+650 *
+·t
+ = '\0';
+
+651
+·t
+ =
+­Œ
+;
+
+652 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+655 ià(
+Ën
+ >
+¡»nd
+ -
+s
+)
+
+656
+Ën
+ =
+¡»nd
+ -
+s
+;
+
+657 ià(
+checksum
+) {
+
+658 
+Ën
+-- > 0) {
+
+659
+ašt
+ = *
+s
+++;
+
+660 ià(
+ašt
+ >= 128)
+
+661
+ašt
+ -= 256;
+
+662
+culÚg
+ +ð
+ašt
+;
+
+666 
+Ën
+-- > 0) {
+
+667
+ašt
+ = *
+s
+++;
+
+668 ià(
+ašt
+ >= 128)
+
+669
+ašt
+ -= 256;
+
+670
+¡r
+ =
+ `SŒ_Ãw
+(36,0);
+
+671
+ `¡r_num£t
+(
+¡r
+,()
+ašt
+);
+
+672 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+677 ià(
+Ën
+ >
+¡»nd
+ -
+s
+)
+
+678
+Ën
+ =
+¡»nd
+ -
+s
+;
+
+679 ià(
+checksum
+) {
+
+680
+uch¬_checksum
+:
+
+681 
+Ën
+-- > 0) {
+
+682
+aušt
+ = *
+s
+++ & 255;
+
+683
+culÚg
+ +ð
+aušt
+;
+
+687 
+Ën
+-- > 0) {
+
+688
+aušt
+ = *
+s
+++ & 255;
+
+689
+¡r
+ =
+ `SŒ_Ãw
+(37,0);
+
+690
+ `¡r_num£t
+(
+¡r
+,()
+aušt
+);
+
+691 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+696
+®Úg
+ = (
+¡»nd
+ -
+s
+) / ();
+
+697 ià(
+Ën
+ >
+®Úg
+)
+
+698
+Ën
+ =
+®Úg
+;
+
+699 ià(
+checksum
+) {
+
+700 
+Ën
+-- > 0) {
+
+701
+ `bcÝy
+(
+s
+,(*)&
+ashÜt
+,());
+
+702
+s
+ += ();
+
+703
+culÚg
+ +ð
+ashÜt
+;
+
+707 
+Ën
+-- > 0) {
+
+708
+ `bcÝy
+(
+s
+,(*)&
+ashÜt
+,());
+
+709
+s
+ += ();
+
+710
+¡r
+ =
+ `SŒ_Ãw
+(38,0);
+
+711
+ `¡r_num£t
+(
+¡r
+,()
+ashÜt
+);
+
+712 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+718
+®Úg
+ = (
+¡»nd
+ -
+s
+) / ();
+
+719 ià(
+Ën
+ >
+®Úg
+)
+
+720
+Ën
+ =
+®Úg
+;
+
+721 ià(
+checksum
+) {
+
+722 
+Ën
+-- > 0) {
+
+723
+ `bcÝy
+(
+s
+,(*)&
+aushÜt
+,());
+
+724
+s
+ += ();
+
+725 #ifdeà
+HAS_NTOHS
+
+
+726 ià(
+d©umty³
+ == 'n')
+
+727
+aushÜt
+ =
+ `Áohs
+(aushort);
+
+729
+culÚg
+ +ð
+aushÜt
+;
+
+733 
+Ën
+-- > 0) {
+
+734
+ `bcÝy
+(
+s
+,(*)&
+aushÜt
+,());
+
+735
+s
+ += ();
+
+736
+¡r
+ =
+ `SŒ_Ãw
+(39,0);
+
+737 #ifdeà
+HAS_NTOHS
+
+
+738 ià(
+d©umty³
+ == 'n')
+
+739
+aushÜt
+ =
+ `Áohs
+(aushort);
+
+741
+ `¡r_num£t
+(
+¡r
+,()
+aushÜt
+);
+
+742 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+747
+®Úg
+ = (
+¡»nd
+ -
+s
+) / ();
+
+748 ià(
+Ën
+ >
+®Úg
+)
+
+749
+Ën
+ =
+®Úg
+;
+
+750 ià(
+checksum
+) {
+
+751 
+Ën
+-- > 0) {
+
+752
+ `bcÝy
+(
+s
+,(*)&
+ašt
+,());
+
+753
+s
+ += ();
+
+754 ià(
+checksum
+ > 32)
+
+755
+cdoubË
+ +ð()
+ašt
+;
+
+757
+culÚg
+ +ð
+ašt
+;
+
+761 
+Ën
+-- > 0) {
+
+762
+ `bcÝy
+(
+s
+,(*)&
+ašt
+,());
+
+763
+s
+ += ();
+
+764
+¡r
+ =
+ `SŒ_Ãw
+(40,0);
+
+765
+ `¡r_num£t
+(
+¡r
+,()
+ašt
+);
+
+766 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+771
+®Úg
+ = (
+¡»nd
+ -
+s
+) / ();
+
+772 ià(
+Ën
+ >
+®Úg
+)
+
+773
+Ën
+ =
+®Úg
+;
+
+774 ià(
+checksum
+) {
+
+775 
+Ën
+-- > 0) {
+
+776
+ `bcÝy
+(
+s
+,(*)&
+aušt
+,());
+
+777
+s
+ += ();
+
+778 ià(
+checksum
+ > 32)
+
+779
+cdoubË
+ +ð()
+aušt
+;
+
+781
+culÚg
+ +ð
+aušt
+;
+
+785 
+Ën
+-- > 0) {
+
+786
+ `bcÝy
+(
+s
+,(*)&
+aušt
+,());
+
+787
+s
+ += ();
+
+788
+¡r
+ =
+ `SŒ_Ãw
+(41,0);
+
+789
+ `¡r_num£t
+(
+¡r
+,()
+aušt
+);
+
+790 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+795
+®Úg
+ = (
+¡»nd
+ -
+s
+) / ();
+
+796 ià(
+Ën
+ >
+®Úg
+)
+
+797
+Ën
+ =
+®Úg
+;
+
+798 ià(
+checksum
+) {
+
+799 
+Ën
+-- > 0) {
+
+800
+ `bcÝy
+(
+s
+,(*)&
+®Úg
+,());
+
+801
+s
+ += ();
+
+802 ià(
+checksum
+ > 32)
+
+803
+cdoubË
+ +ð()
+®Úg
+;
+
+805
+culÚg
+ +ð
+®Úg
+;
+
+809 
+Ën
+-- > 0) {
+
+810
+ `bcÝy
+(
+s
+,(*)&
+®Úg
+,());
+
+811
+s
+ += ();
+
+812
+¡r
+ =
+ `SŒ_Ãw
+(42,0);
+
+813
+ `¡r_num£t
+(
+¡r
+,()
+®Úg
+);
+
+814 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+820
+®Úg
+ = (
+¡»nd
+ -
+s
+) / ();
+
+821 ià(
+Ën
+ >
+®Úg
+)
+
+822
+Ën
+ =
+®Úg
+;
+
+823 ià(
+checksum
+) {
+
+824 
+Ën
+-- > 0) {
+
+825
+ `bcÝy
+(
+s
+,(*)&
+aulÚg
+,());
+
+826
+s
+ += ();
+
+827 #ifdeà
+HAS_NTOHL
+
+
+828 ià(
+d©umty³
+ == 'N')
+
+829
+aulÚg
+ =
+ `Áohl
+(aulong);
+
+831 ià(
+checksum
+ > 32)
+
+832
+cdoubË
+ +ð()
+aulÚg
+;
+
+834
+culÚg
+ +ð
+aulÚg
+;
+
+838 
+Ën
+-- > 0) {
+
+839
+ `bcÝy
+(
+s
+,(*)&
+aulÚg
+,());
+
+840
+s
+ += ();
+
+841
+¡r
+ =
+ `SŒ_Ãw
+(43,0);
+
+842 #ifdeà
+HAS_NTOHL
+
+
+843 ià(
+d©umty³
+ == 'N')
+
+844
+aulÚg
+ =
+ `Áohl
+(aulong);
+
+846
+ `¡r_num£t
+(
+¡r
+,()
+aulÚg
+);
+
+847 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+852
+®Úg
+ = (
+¡»nd
+ -
+s
+) / (*);
+
+853 ià(
+Ën
+ >
+®Úg
+)
+
+854
+Ën
+ =
+®Úg
+;
+
+855 
+Ën
+-- > 0) {
+
+856 ià((*è>
+¡»nd
+ -
+s
+)
+
+859
+ `bcÝy
+(
+s
+,(*)&
+­Œ
+,(*));
+
+860
+s
+ += (*);
+
+862
+¡r
+ =
+ `SŒ_Ãw
+(44,0);
+
+863 ià(
+­Œ
+)
+
+864
+ `¡r_£t
+(
+¡r
+,
+­Œ
+);
+
+865 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+871
+®Úg
+ = (
+¡»nd
+ -
+s
+) / ();
+
+872 ià(
+Ën
+ >
+®Úg
+)
+
+873
+Ën
+ =
+®Úg
+;
+
+874 ià(
+checksum
+) {
+
+875 
+Ën
+-- > 0) {
+
+876
+ `bcÝy
+(
+s
+, (*)&
+aæßt
+, ());
+
+877
+s
+ += ();
+
+878
+cdoubË
+ +ð
+aæßt
+;
+
+882 
+Ën
+-- > 0) {
+
+883
+ `bcÝy
+(
+s
+, (*)&
+aæßt
+, ());
+
+884
+s
+ += ();
+
+885
+¡r
+ =
+ `SŒ_Ãw
+(47, 0);
+
+886
+ `¡r_num£t
+(
+¡r
+, ()
+aæßt
+);
+
+887 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+893
+®Úg
+ = (
+¡»nd
+ -
+s
+) / ();
+
+894 ià(
+Ën
+ >
+®Úg
+)
+
+895
+Ën
+ =
+®Úg
+;
+
+896 ià(
+checksum
+) {
+
+897 
+Ën
+-- > 0) {
+
+898
+ `bcÝy
+(
+s
+, (*)&
+adoubË
+, ());
+
+899
+s
+ += ();
+
+900
+cdoubË
+ +ð
+adoubË
+;
+
+904 
+Ën
+-- > 0) {
+
+905
+ `bcÝy
+(
+s
+, (*)&
+adoubË
+, ());
+
+906
+s
+ += ();
+
+907
+¡r
+ =
+ `SŒ_Ãw
+(48, 0);
+
+908
+ `¡r_num£t
+(
+¡r
+, ()
+adoubË
+);
+
+909 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+914
+®Úg
+ = (
+¡»nd
+ -
+s
+) * 3 / 4;
+
+915
+¡r
+ =
+ `SŒ_Ãw
+(42,
+®Úg
+);
+
+916 
+s
+ <
+¡»nd
+ && *s > ' ' && *s < 'a') {
+
+917 
+a
+,
+b
+,
+c
+,
+d
+;
+
+918 
+hunk
+[4];
+
+920
+hunk
+[3] = '\0';
+
+921
+Ën
+ = (*
+s
+++ - ' ') & 077;
+
+922 
+Ën
+ > 0) {
+
+923 ià(
+s
+ <
+¡»nd
+ && *s >= ' ')
+
+924
+a
+ = (*
+s
+++ - ' ') & 077;
+
+926
+a
+ = 0;
+
+927 ià(
+s
+ <
+¡»nd
+ && *s >= ' ')
+
+928
+b
+ = (*
+s
+++ - ' ') & 077;
+
+930
+b
+ = 0;
+
+931 ià(
+s
+ <
+¡»nd
+ && *s >= ' ')
+
+932
+c
+ = (*
+s
+++ - ' ') & 077;
+
+934
+c
+ = 0;
+
+935 ià(
+s
+ <
+¡»nd
+ && *s >= ' ')
+
+936
+d
+ = (*
+s
+++ - ' ') & 077;
+
+938
+d
+ = 0;
+
+939
+hunk
+[0] =
+a
+ << 2 |
+b
+ >> 4;
+
+940
+hunk
+[1] =
+b
+ << 4 |
+c
+ >> 2;
+
+941
+hunk
+[2] =
+c
+ << 6 |
+d
+;
+
+942
+ `¡r_nÿt
+(
+¡r
+,
+hunk
+,
+Ën
+ > 3 ? 3 :†en);
+
+943
+Ën
+ -= 3;
+
+945 ià(*
+s
+ == '\n')
+
+946
+s
+++;
+
+947 ià(
+s
+[1] == '\n')
+
+948
+s
+ += 2;
+
+950 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+953 ià(
+checksum
+) {
+
+954
+¡r
+ =
+ `SŒ_Ãw
+(42,0);
+
+955 ià(
+ `šdex
+("fFdD",
+d©umty³
+) ||
+
+956 (
+checksum
+ > 32 &&
+ `šdex
+("iIlLN",
+d©umty³
+)) ) {
+
+957 
+ `modf
+();
+
+958 
+ŒoubË
+;
+
+960
+adoubË
+ = 1.0;
+
+961 
+checksum
+ >= 16) {
+
+962
+checksum
+ -= 16;
+
+963
+adoubË
+ *= 65536.0;
+
+965 
+checksum
+ >= 4) {
+
+966
+checksum
+ -= 4;
+
+967
+adoubË
+ *= 16.0;
+
+969 
+checksum
+--)
+
+970
+adoubË
+ *= 2.0;
+
+971
+®Úg
+ = (1 <<
+checksum
+) - 1;
+
+972 
+cdoubË
+ < 0.0)
+
+973
+cdoubË
+ +ð
+adoubË
+;
+
+974
+cdoubË
+ =
+ `modf
+(cdoubË /
+adoubË
+, &
+ŒoubË
+) *‡double;
+
+975
+ `¡r_num£t
+(
+¡r
+,
+cdoubË
+);
+
+978 ià(
+checksum
+ < 32) {
+
+979
+®Úg
+ = (1 <<
+checksum
+) - 1;
+
+980
+culÚg
+ &ð()
+®Úg
+;
+
+982
+ `¡r_num£t
+(
+¡r
+,()
+culÚg
+);
+
+984 ()
+ `a¡Üe
+(
+¡ack
+, ++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+985
+checksum
+ = 0;
+
+988 
+;
+
+989
+ }
+}
+
+992
+ $do_¦iû
+(
+¡ab
+,
+¡r
+,
+num¬¿y
+,
+lv®
+,
+gimme
+,
+¬gÏ¡
+)
+
+993
+STAB
+ *
+¡ab
+;
+
+994
+STR
+ *
+¡r
+;
+
+995 
+num¬¿y
+;
+
+996 
+lv®
+;
+
+997 
+gimme
+;
+
+998 *
+¬gÏ¡
+;
+
+1000 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1001 
+ =
+¬gÏ¡
+[1];
+
+1002 
+max
+ =
+¬gÏ¡
+[2];
+
+1003 *
+tmps
+;
+
+1004 
+Ën
+;
+
+1005 
+magic
+ = 0;
+
+1006 
+ARRAY
+ *
+¬y
+;
+
+1007 
+HASH
+ *
+hash
+;
+
+1008 
+Þd¬yba£
+ =
+¬yba£
+;
+
+1010 ià(
+num¬¿y
+) {
+
+1011 ià(
+num¬¿y
+ == 2) {
+
+1012
+¬y
+ =
+¡ack
+;
+
+1013
+¬y
+->
+¬y_fžl
+ =
+¬gÏ¡
+[3];
+
+1014
+¬yba£
+ -ð
+max
+ + 1;
+
+1015
+[
+] =
+¡r
+;
+
+1016
+ `¡r_num£t
+(
+¡r
+,()(
+ - 1));
+
+1019
+¬y
+ =
+ `¡ab_¬¿y
+(
+¡ab
+);
+
+1022 ià(
+lv®
+) {
+
+1023 ià(
+¡ab
+ =ð
+’v¡ab
+)
+
+1024
+magic
+ = 'E';
+
+1025 ià(
+¡ab
+ =ð
+sig¡ab
+)
+
+1026
+magic
+ = 'S';
+
+1027 #ifdeà
+SOME_DBM
+
+
+1028 ià(
+ `¡ab_hash
+(
+¡ab
+)->
+tbl_dbm
+)
+
+1029
+magic
+ = 'D';
+
+1032
+hash
+ =
+ `¡ab_hash
+(
+¡ab
+);
+
+1035 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1036 ià(
+num¬¿y
+) {
+
+1037 
+ <
+max
+) {
+
+1038 ià(
+[++
+]) {
+
+1039
+[
+-1] =
+ `aãtch
+(
+¬y
+,
+
+1040 (()
+ `¡r_gnum
+(
+[
+])è-
+¬yba£
+,
+lv®
+);
+
+1043
+[
+-1] = &
+¡r_undef
+;
+
+1047 
+ <
+max
+) {
+
+1048 ià(
+[++
+]) {
+
+1049
+tmps
+ =
+ `¡r_g‘
+(
+[
+]);
+
+1050
+Ën
+ =
+[
+]->
+¡r_cur
+;
+
+1051
+[
+-1] =
+ `hãtch
+(
+hash
+,
+tmps
+,
+Ën
+,
+lv®
+);
+
+1052 ià(
+magic
+)
+
+1053
+ `¡r_magic
+(
+[
+-1],
+¡ab
+,
+magic
+,
+tmps
+,
+Ën
+);
+
+1056
+[
+-1] = &
+¡r_undef
+;
+
+1059
+--;
+
+1062 ià(
+num¬¿y
+) {
+
+1063 ià(
+[
+max
+])
+
+1064
+[
+] =
+ `aãtch
+(
+¬y
+,
+
+1065 (()
+ `¡r_gnum
+(
+[
+max
+])è-
+¬yba£
+,
+lv®
+);
+
+1067
+[
+] = &
+¡r_undef
+;
+
+1070 ià(
+[
+max
+]) {
+
+1071
+tmps
+ =
+ `¡r_g‘
+(
+[
+max
+]);
+
+1072
+Ën
+ =
+[
+max
+]->
+¡r_cur
+;
+
+1073
+[
+] =
+ `hãtch
+(
+hash
+,
+tmps
+,
+Ën
+,
+lv®
+);
+
+1074 ià(
+magic
+)
+
+1075
+ `¡r_magic
+(
+[
+],
+¡ab
+,
+magic
+,
+tmps
+,
+Ën
+);
+
+1078
+[
+] = &
+¡r_undef
+;
+
+1081
+¬yba£
+ =
+Þd¬yba£
+;
+
+1082 
+;
+
+1083
+ }
+}
+
+1086
+ $do_¥liû
+(
+¬y
+,
+gimme
+,
+¬gÏ¡
+)
+
+1087 
+ARRAY
+ *
+¬y
+;
+
+1088 
+gimme
+;
+
+1089 *
+¬gÏ¡
+;
+
+1091 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1092 
+ =
+¬gÏ¡
+[1];
+
+1093 
+max
+ =
+¬gÏ¡
+[2] + 1;
+
+1094 
+STR
+ **
+¤c
+;
+
+1095 
+STR
+ **
+d¡
+;
+
+1096 
+i
+;
+
+1097 
+off£t
+;
+
+1098 
+Ëngth
+;
+
+1099 
+ÃwËn
+;
+
+1100 
+aá”
+;
+
+1101 
+diff
+;
+
+1102
+STR
+ **
+tm·ryv®
+;
+
+1104 ià(++
+ <
+max
+) {
+
+1105
+off£t
+ = (()
+ `¡r_gnum
+(
+[
+])è-
+¬yba£
+;
+
+1106 ià(
+off£t
+ < 0)
+
+1107
+off£t
+ +ð
+¬y
+->
+¬y_fžl
+ + 1;
+
+1108 ià(++
+ <
+max
+) {
+
+1109
+Ëngth
+ = ()
+ `¡r_gnum
+(
+[
+++]);
+
+1110 ià(
+Ëngth
+ < 0)
+
+1111
+Ëngth
+ = 0;
+
+1114
+Ëngth
+ =
+¬y
+->
+¬y_max
+;
+
+1117
+off£t
+ = 0;
+
+1118
+Ëngth
+ =
+¬y
+->
+¬y_max
+;
+
+1120 ià(
+off£t
+ < 0) {
+
+1121
+Ëngth
+ +ð
+off£t
+;
+
+1122
+off£t
+ = 0;
+
+1123 ià(
+Ëngth
+ < 0)
+
+1124
+Ëngth
+ = 0;
+
+1126 ià(
+off£t
+ >
+¬y
+->
+¬y_fžl
+ + 1)
+
+1127
+off£t
+ =
+¬y
+->
+¬y_fžl
+ + 1;
+
+1128
+aá”
+ =
+¬y
+->
+¬y_fžl
+ + 1 - (
+off£t
+ +
+Ëngth
+);
+
+1129 ià(
+aá”
+ < 0) {
+
+1130
+Ëngth
+ +ð
+aá”
+;
+
+1131
+aá”
+ = 0;
+
+1132 ià(!
+¬y
+->
+¬y_®loc
+) {
+
+1133
+ `afžl
+(
+¬y
+,0);
+
+1134
+ `afžl
+(
+¬y
+,-1);
+
+1140
+ÃwËn
+ =
+max
+ -
+;
+
+1141
+diff
+ =
+ÃwËn
+ -
+Ëngth
+;
+
+1143 ià(
+diff
+ < 0) {
+
+1144 ià(
+ÃwËn
+) {
+
+1145
+ `New
+(451,
+tm·ryv®
+,
+ÃwËn
+,
+STR
+*);
+
+1146
+ `CÝy
+(
++
+,
+tm·ryv®
+,
+ÃwËn
+,
+STR
+*);
+
+1149
+ =
+¬gÏ¡
+[0] + 1;
+
+1150 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1151 ià(
+ +
+Ëngth
+ >ð
+¡ack
+->
+¬y_max
+) {
+
+1152
+ `a¡Üe
+(
+¡ack
+,
+ +
+Ëngth
+,
+NuΡr
+);
+
+1153
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1155
+ `CÝy
+(
+¬y
+->
+¬y_¬¿y
++
+off£t
+,
++
+,
+Ëngth
+,
+STR
+*);
+
+1156 ià(
+¬y
+->
+¬y_æags
+ &
+ARF_REAL
+) {
+
+1157 
+i
+ =
+Ëngth
+,
+d¡
+ =
++
+; i; i--)
+
+1158
+ `¡r_2mÜl
+(*
+d¡
+++);
+
+1160
+ +ð
+Ëngth
+ - 1;
+
+1163
+[
+] =
+¬y
+->
+¬y_¬¿y
+[
+off£t
++
+Ëngth
+-1];
+
+1164 ià(
+¬y
+->
+¬y_æags
+ &
+ARF_REAL
+)
+
+1165
+ `¡r_2mÜl
+(
+[
+]);
+
+1167
+¬y
+->
+¬y_fžl
+ +ð
+diff
+;
+
+1171 ià(
+off£t
+ <
+aá”
+) {
+
+1172 ià(
+off£t
+) {
+
+1173
+¤c
+ = &
+¬y
+->
+¬y_¬¿y
+[
+off£t
+-1];
+
+1174
+d¡
+ =
+¤c
+ -
+diff
+;
+
+1175 
+i
+ =
+off£t
+; i > 0; i--)
+
+1176 *
+d¡
+-- = *
+¤c
+--;
+
+1178
+ `Z”o
+(
+¬y
+->
+¬y_¬¿y
+, -
+diff
+,
+STR
+*);
+
+1179
+¬y
+->
+¬y_¬¿y
+ -ð
+diff
+;
+
+1180
+¬y
+->
+¬y_max
+ +ð
+diff
+;
+
+1183 ià(
+aá”
+) {
+
+1184
+¤c
+ =
+¬y
+->
+¬y_¬¿y
+ +
+off£t
+ +
+Ëngth
+;
+
+1185
+d¡
+ =
+¤c
+ +
+diff
+;
+
+1186
+ `CÝy
+(
+¤c
+,
+d¡
+,
+aá”
+,
+STR
+*);
+
+1188
+ `Z”o
+(&
+¬y
+->
+¬y_¬¿y
+[¬y->
+¬y_fžl
++1], -
+diff
+,
+STR
+*);
+
+1191 ià(
+ÃwËn
+) {
+
+1192 
+¤c
+ =
+tm·ryv®
+,
+d¡
+ =
+¬y
+->
+¬y_¬¿y
+ +
+off£t
+;
+
+1193
+ÃwËn
+;‚ewlen--) {
+
+1194 *
+d¡
+ =
+ `SŒ_Ãw
+(46,0);
+
+1195
+ `¡r_s£t
+(*
+d¡
+++,*
+¤c
+++);
+
+1197
+ `Saãä“
+(
+tm·ryv®
+);
+
+1201 ià(
+Ëngth
+) {
+
+1202
+ `New
+(452,
+tm·ryv®
+,
+Ëngth
+,
+STR
+*);
+
+1203
+ `CÝy
+(
+¬y
+->
+¬y_¬¿y
++
+off£t
+,
+tm·ryv®
+,
+Ëngth
+,
+STR
+*);
+
+1206 ià(
+diff
+ > 0) {
+
+1210 ià(
+off£t
+ <
+aá”
+ &&
+diff
+ <ð
+¬y
+->
+¬y_¬¿y
+ -‡ry->
+¬y_®loc
+) {
+
+1211 ià(
+off£t
+) {
+
+1212
+¤c
+ =
+¬y
+->
+¬y_¬¿y
+;
+
+1213
+d¡
+ =
+¤c
+ -
+diff
+;
+
+1214
+ `CÝy
+(
+¤c
+,
+d¡
+,
+off£t
+,
+STR
+*);
+
+1216
+¬y
+->
+¬y_¬¿y
+ -ð
+diff
+;
+
+1217
+¬y
+->
+¬y_max
+ +ð
+diff
+;
+
+1218
+¬y
+->
+¬y_fžl
+ +ð
+diff
+;
+
+1221 ià(
+¬y
+->
+¬y_fžl
+ +
+diff
+ >ð¬y->
+¬y_max
+)
+
+1222
+ `a¡Üe
+(
+¬y
+,‡ry->
+¬y_fžl
+ +
+diff
+,
+NuΡr
+);
+
+1224
+¬y
+->
+¬y_fžl
+ +ð
+diff
+;
+
+1225 ià(
+aá”
+) {
+
+1226
+d¡
+ =
+¬y
+->
+¬y_¬¿y
+ +‡ry->
+¬y_fžl
+;
+
+1227
+¤c
+ =
+d¡
+ -
+diff
+;
+
+1228 
+i
+ =
+aá”
+; i; i--) {
+
+1229 ià(*
+d¡
+)
+
+1230
+ `¡r_ä“
+(*
+d¡
+);
+
+1231 *
+d¡
+-- = *
+¤c
+;
+
+1232 *
+¤c
+-- =
+NuΡr
+;
+
+1238 
+¤c
+ =
++
+,
+d¡
+ =
+¬y
+->
+¬y_¬¿y
+ +
+off£t
+;
+ÃwËn
+;‚ewlen--) {
+
+1239 *
+d¡
+ =
+ `SŒ_Ãw
+(46,0);
+
+1240
+ `¡r_s£t
+(*
+d¡
+++,*
+¤c
+++);
+
+1242
+ =
+¬gÏ¡
+[0] + 1;
+
+1243 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1244 ià(
+Ëngth
+) {
+
+1245
+ `CÝy
+(
+tm·ryv®
+,
++
+,
+Ëngth
+,
+STR
+*);
+
+1246 ià(
+¬y
+->
+¬y_æags
+ &
+ARF_REAL
+) {
+
+1247 
+i
+ =
+Ëngth
+,
+d¡
+ =
++
+; i; i--)
+
+1248
+ `¡r_2mÜl
+(*
+d¡
+++);
+
+1250
+ `Saãä“
+(
+tm·ryv®
+);
+
+1252
+ +ð
+Ëngth
+ - 1;
+
+1254 ià(
+Ëngth
+) {
+
+1255
+[
+] =
+tm·ryv®
+[
+Ëngth
+-1];
+
+1256 ià(
+¬y
+->
+¬y_æags
+ &
+ARF_REAL
+)
+
+1257
+ `¡r_2mÜl
+(
+[
+]);
+
+1258
+ `Saãä“
+(
+tm·ryv®
+);
+
+1261
+[
+] = &
+¡r_undef
+;
+
+1263 
+;
+
+1264
+ }
+}
+
+1267
+ $do_g»p
+(
+¬g
+,
+¡r
+,
+gimme
+,
+¬gÏ¡
+)
+
+1268 
+ARG
+ *
+¬g
+;
+
+1269
+STR
+ *
+¡r
+;
+
+1270 
+gimme
+;
+
+1271 *
+¬gÏ¡
+;
+
+1273
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1274 
+d¡
+ =
+¬gÏ¡
+[1];
+
+1275 
+¤c
+ =
+d¡
+ + 1;
+
+1276 
+ =
+¬gÏ¡
+[2];
+
+1277 
+i
+ =
+ -
+¬gÏ¡
+[1];
+
+1278 
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+1279
+SPAT
+ *
+Þd¥©
+ =
+cur¥©
+;
+
+1280 
+Þdtmps_ba£
+ =
+tmps_ba£
+;
+
+1282
+ `§ve¥Œ
+(&
+ `¡ab_v®
+(
+def¡ab
+));
+
+1283
+tmps_ba£
+ =
+tmps_max
+;
+
+1284 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è!ð
+A_EXPR
+) {
+
+1285
+¬g
+[1].
+¬g_ty³
+ &ð
+A_MASK
+;
+
+1286
+ `dehoi¡
+(
+¬g
+,1);
+
+1287
+¬g
+[1].
+¬g_ty³
+ |ð
+A_DONT
+;
+
+1289
+¬g
+ =‡rg[1].
+¬g_±r
+.
+¬g_¬g
+;
+
+1290 
+i
+-- > 0) {
+
+1291 ià(
+[
+¤c
+])
+
+1292
+ `¡ab_v®
+(
+def¡ab
+èð
+[
+¤c
+];
+
+1294
+ `¡ab_v®
+(
+def¡ab
+èð
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+1295 ()
+ `ev®
+(
+¬g
+,
+G_SCALAR
+,
+);
+
+1296
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1297 ià(
+ `¡r_Œue
+(
+[
++1]))
+
+1298
+[
+d¡
+++] = st[
+¤c
+];
+
+1299
+¤c
+++;
+
+1300
+cur¥©
+ =
+Þd¥©
+;
+
+1302
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+1303
+tmps_ba£
+ =
+Þdtmps_ba£
+;
+
+1304 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1305
+ `¡r_num£t
+(
+¡r
+,()(
+d¡
+ -
+¬gÏ¡
+[1]));
+
+1306
+ `STABSET
+(
+¡r
+);
+
+1307
+[
+¬gÏ¡
+[0]+1] =
+¡r
+;
+
+1308 
+¬gÏ¡
+[0]+1;
+
+1310 
+¬gÏ¡
+[0] + (
+d¡
+ -‡rglast[1]);
+
+1311
+ }
+}
+
+1314
+ $do_»v”£
+(
+¬gÏ¡
+)
+
+1315 *
+¬gÏ¡
+;
+
+1317
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1318 
+STR
+ **
+up
+ = &
+[
+¬gÏ¡
+[1]];
+
+1319 
+STR
+ **
+down
+ = &
+[
+¬gÏ¡
+[2]];
+
+1320 
+i
+ =
+¬gÏ¡
+[2] -‡rglast[1];
+
+1322 
+i
+-- > 0) {
+
+1323 *
+up
+++ = *
+down
+;
+
+1324 ià(
+i
+-- > 0)
+
+1325 *
+down
+-- = *
+up
+;
+
+1327
+i
+ =
+¬gÏ¡
+[2] -‡rglast[1];
+
+1328
+ `CÝy
+(
+down
++1,
+up
+,
+i
+/2,
+STR
+*);
+
+1329 
+¬gÏ¡
+[2] - 1;
+
+1330
+ }
+}
+
+1333
+ $do_¤ev”£
+(
+¡r
+,
+¬gÏ¡
+)
+
+1334
+STR
+ *
+¡r
+;
+
+1335 *
+¬gÏ¡
+;
+
+1337
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1338 *
+up
+;
+
+1339 *
+down
+;
+
+1340 
+tmp
+;
+
+1342
+ `¡r_s£t
+(
+¡r
+,
+[
+¬gÏ¡
+[2]]);
+
+1343
+up
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+1344 ià(
+¡r
+->
+¡r_cur
+ > 1) {
+
+1345
+down
+ =
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+ - 1;
+
+1346 
+down
+ >
+up
+) {
+
+1347
+tmp
+ = *
+up
+;
+
+1348 *
+up
+++ = *
+down
+;
+
+1349 *
+down
+-- =
+tmp
+;
+
+1352
+ `STABSET
+(
+¡r
+);
+
+1353
+[
+¬gÏ¡
+[0]+1] =
+¡r
+;
+
+1354 
+¬gÏ¡
+[0]+1;
+
+1355
+ }
+}
+
+1357 
+CMD
+ *
+ gsÜtcmd
+;
+
+1358 
+HASH
+ *
+ gsÜt¡ash
+ =
+NuÎ
+(HASH*);
+
+1359 
+STAB
+ *
+ gfœ¡¡ab
+ =
+NuΡab
+;
+
+1360 
+STAB
+ *
+ g£cÚd¡ab
+ =
+NuΡab
+;
+
+1363
+ $do_sÜt
+(
+¡r
+,
+¡ab
+,
+gimme
+,
+¬gÏ¡
+)
+
+1364
+STR
+ *
+¡r
+;
+
+1365
+STAB
+ *
+¡ab
+;
+
+1366 
+gimme
+;
+
+1367 *
+¬gÏ¡
+;
+
+1369 
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1370 
+ =
+¬gÏ¡
+[1];
+
+1371 
+STR
+ **
+up
+;
+
+1372 
+max
+ =
+¬gÏ¡
+[2] -
+;
+
+1373 
+i
+;
+
+1374 
+ `sÜtcmp
+();
+
+1375 
+ `sÜtsub
+();
+
+1376
+STR
+ *
+Þdfœ¡
+;
+
+1377
+STR
+ *
+Þd£cÚd
+;
+
+1378
+ARRAY
+ *
+Þd¡ack
+;
+
+1379 
+ARRAY
+ *
+sÜt¡ack
+ =
+ `NuÎ
+(ARRAY*);
+
+1381 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1382
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+1383
+ `STABSET
+(
+¡r
+);
+
+1384
+[
+] =
+¡r
+;
+
+1385 
+;
+
+1387
+up
+ = &
+[
+];
+
+1388
+ +ð
+;
+
+1389 
+i
+ = 1; i <ð
+max
+; i++) {
+
+1390 ià(*
+up
+ =
+[
+i
+]) {
+
+1391 ià(!(*
+up
+)->
+¡r_pok
+)
+
+1392 ()
+ `¡r_2±r
+(*
+up
+);
+
+1394 (*
+up
+)->
+¡r_pok
+ &ð~
+SP_TEMP
+;
+
+1395
+up
+++;
+
+1398
+ -ð
+;
+
+1399
+max
+ =
+up
+ - &
+[
+];
+
+1400
+--;
+
+1401 ià(
+max
+ > 1) {
+
+1402 ià(
+¡ab
+) {
+
+1403 
+Þdtmps_ba£
+ =
+tmps_ba£
+;
+
+1405 ià(!
+ `¡ab_sub
+(
+¡ab
+è|| !(
+sÜtcmd
+ = sb_sub(¡ab)->
+cmd
+))
+
+1406
+ `çl
+("Undefšed subroutš\"%s\" iÀsÜt",
+ `¡ab_Çme
+(
+¡ab
+));
+
+1407 ià(!
+sÜt¡ack
+) {
+
+1408
+sÜt¡ack
+ =
+ `ªew
+(
+NuΡab
+);
+
+1409
+ `a¡Üe
+(
+sÜt¡ack
+, 0,
+NuΡr
+);
+
+1410
+ `aþ—r
+(
+sÜt¡ack
+);
+
+1411
+sÜt¡ack
+->
+¬y_æags
+ = 0;
+
+1413
+Þd¡ack
+ =
+¡ack
+;
+
+1414
+¡ack
+ =
+sÜt¡ack
+;
+
+1415
+tmps_ba£
+ =
+tmps_max
+;
+
+1416 ià(
+sÜt¡ash
+ !ð
+ `¡ab_¡ash
+(
+¡ab
+)) {
+
+1417
+fœ¡¡ab
+ =
+ `¡ab’t
+("a",
+TRUE
+);
+
+1418
+£cÚd¡ab
+ =
+ `¡ab’t
+("b",
+TRUE
+);
+
+1419
+sÜt¡ash
+ =
+ `¡ab_¡ash
+(
+¡ab
+);
+
+1421
+Þdfœ¡
+ =
+ `¡ab_v®
+(
+fœ¡¡ab
+);
+
+1422
+Þd£cÚd
+ =
+ `¡ab_v®
+(
+£cÚd¡ab
+);
+
+1423 #iâdeà
+lšt
+
+
+1424
+ `qsÜt
+((*)(
++
++1),
+max
+,(
+STR
+*),
+sÜtsub
+);
+
+1426
+ `qsÜt
+(
+NuÎch
+,
+max
+,(
+STR
+*),
+sÜtsub
+);
+
+1428
+ `¡ab_v®
+(
+fœ¡¡ab
+èð
+Þdfœ¡
+;
+
+1429
+ `¡ab_v®
+(
+£cÚd¡ab
+èð
+Þd£cÚd
+;
+
+1430
+tmps_ba£
+ =
+Þdtmps_ba£
+;
+
+1431
+¡ack
+ =
+Þd¡ack
+;
+
+1433 #iâdeà
+lšt
+
+
+1435
+ `qsÜt
+((*)(
++
++1),
+max
+,(
+STR
+*),
+sÜtcmp
+);
+
+1438 
++
+max
+;
+
+1439
+ }
+}
+
+1442
+ $sÜtsub
+(
+¡r1
+,
+¡r2
+)
+
+1443
+STR
+ **
+¡r1
+;
+
+1444
+STR
+ **
+¡r2
+;
+
+1446
+ `¡ab_v®
+(
+fœ¡¡ab
+èð*
+¡r1
+;
+
+1447
+ `¡ab_v®
+(
+£cÚd¡ab
+èð*
+¡r2
+;
+
+1448
+ `cmd_exec
+(
+sÜtcmd
+,
+G_SCALAR
+,-1);
+
+1449  ()
+ `¡r_gnum
+(*
+¡ack
+->
+¬y_¬¿y
+);
+
+1450
+ }
+}
+
+1452
+ $sÜtcmp
+(
+¡½1
+,
+¡½2
+)
+
+1453
+STR
+ **
+¡½1
+;
+
+1454
+STR
+ **
+¡½2
+;
+
+1456 
+STR
+ *
+¡r1
+ = *
+¡½1
+;
+
+1457 
+STR
+ *
+¡r2
+ = *
+¡½2
+;
+
+1458 
+»tv®
+;
+
+1460 ià(
+¡r1
+->
+¡r_cur
+ <
+¡r2
+->str_cur) {
+
+1461 ià(
+»tv®
+ =
+ `memcmp
+(
+¡r1
+->
+¡r_±r
+,
+¡r2
+->¡r_±r, sŒ1->
+¡r_cur
+))
+
+1462 
+»tv®
+;
+
+1466 ià(
+»tv®
+ =
+ `memcmp
+(
+¡r1
+->
+¡r_±r
+,
+¡r2
+->¡r_±r, sŒ2->
+¡r_cur
+))
+
+1467 
+»tv®
+;
+
+1468 ià(
+¡r1
+->
+¡r_cur
+ =ð
+¡r2
+->str_cur)
+
+1472
+ }
+}
+
+1475
+ $do_¿nge
+(
+gimme
+,
+¬gÏ¡
+)
+
+1476 
+gimme
+;
+
+1477 *
+¬gÏ¡
+;
+
+1479
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1480 
+ =
+¬gÏ¡
+[0];
+
+1481 
+i
+;
+
+1482 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+1483 
+STR
+ *
+¡r
+;
+
+1484 
+max
+;
+
+1486 ià(
+gimme
+ !ð
+G_ARRAY
+)
+
+1487
+ `çl
+("panic: do_range");
+
+1489 ià(
+[
++1]->
+¡r_nok
+ || !¡[¥+1]->
+¡r_pok
+ ||
+
+1490 (
+ `looks_like_numb”
+(
+[
++1]è&& *¡[¥+1]->
+¡r_±r
+ != '0') ) {
+
+1491
+i
+ = ()
+ `¡r_gnum
+(
+[
++1]);
+
+1492
+max
+ = ()
+ `¡r_gnum
+(
+[
++2]);
+
+1493 
+i
+ <ð
+max
+) {
+
+1494 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_no
+));
+
+1495
+ `¡r_num£t
+(
+¡r
+,()
+i
+++);
+
+1499
+STR
+ *
+fš®
+ =
+ `¡r_mÜl
+(
+[
++2]);
+
+1500 *
+tmps
+ =
+ `¡r_g‘
+(
+fš®
+);
+
+1502
+¡r
+ =
+ `¡r_mÜl
+(
+[
++1]);
+
+1503 !
+¡r
+->
+¡r_nok
+ && sŒ->
+¡r_cur
+ <ð
+fš®
+->str_cur &&
+
+1504
+ `¡rNE
+(
+¡r
+->
+¡r_±r
+,
+tmps
+) ) {
+
+1505 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+);
+
+1506
+¡r
+ =
+ `¡r_2mÜl
+(
+ `¡r_smake
+(str));
+
+1507
+ `¡r_šc
+(
+¡r
+);
+
+1509 ià(
+ `¡rEQ
+(
+¡r
+->
+¡r_±r
+,
+tmps
+))
+
+1510 ()
+ `a¡Üe
+(
+¬y
+, ++
+,
+¡r
+);
+
+1512 
+;
+
+1513
+ }
+}
+
+1516
+ $do_»³©¬y
+(
+¬gÏ¡
+)
+
+1517 *
+¬gÏ¡
+;
+
+1519
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1520 
+ =
+¬gÏ¡
+[0];
+
+1521 
+™ems
+ =
+¬gÏ¡
+[1] -
+;
+
+1522 
+couÁ
+ = (è
+ `¡r_gnum
+(
+[
+¬gÏ¡
+[2]]);
+
+1523 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+1524 
+i
+;
+
+1525 
+max
+;
+
+1527
+max
+ =
+™ems
+ *
+couÁ
+;
+
+1528 ià(
+max
+ > 0 &&
+ + max >
+¡ack
+->
+¬y_max
+) {
+
+1529
+ `a¡Üe
+(
+¡ack
+,
+ +
+max
+,
+NuΡr
+);
+
+1530
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1532 ià(
+couÁ
+ > 1) {
+
+1533 
+i
+ =
+¬gÏ¡
+[1]; i >
+; i--)
+
+1534
+[
+i
+]->
+¡r_pok
+ &ð~
+SP_TEMP
+;
+
+1535
+ `»³©ýy
+((*)&
+[
+¬gÏ¡
+[1]+1], (*)&¡[
++1],
+
+1536
+™ems
+ * (
+STR
+*),
+couÁ
+);
+
+1538
+ +ð
+max
+;
+
+1540 
+;
+
+1541
+ }
+}
+
+1544
+ $do_ÿΔ
+(
+¬g
+,
+max¬g
+,
+gimme
+,
+¬gÏ¡
+)
+
+1545
+ARG
+ *
+¬g
+;
+
+1546 
+max¬g
+;
+
+1547 
+gimme
+;
+
+1548 *
+¬gÏ¡
+;
+
+1550
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1551 
+ =
+¬gÏ¡
+[0];
+
+1552 
+CSV
+ *
+csv
+ =
+curcsv
+;
+
+1553
+STR
+ *
+¡r
+;
+
+1554 
+couÁ
+ = 0;
+
+1556 ià(!
+csv
+)
+
+1557
+ `çl
+("There is‚o caller");
+
+1558 ià(
+max¬g
+)
+
+1559
+couÁ
+ = (è
+ `¡r_gnum
+(
+[
++1]);
+
+1561 ià(!
+csv
+)
+
+1562 
+;
+
+1563 ià(
+DBsub
+ &&
+csv
+->
+curcsv
+ && csv->curcsv->
+sub
+ =ð
+ `¡ab_sub
+(DBsub))
+
+1564
+couÁ
+++;
+
+1565 ià(!
+couÁ
+--)
+
+1567
+csv
+ = csv->
+curcsv
+;
+
+1569 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1570
+STR
+ *
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+1571
+ `¡r_£t
+(
+¡r
+,
+csv
+->
+curcmd
+->
+c_¡ash
+->
+tbl_Çme
+);
+
+1572
+ `STABSET
+(
+¡r
+);
+
+1573
+[++
+] =
+¡r
+;
+
+1574 
+;
+
+1577 #iâdeà
+lšt
+
+
+1578 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1579
+ `¡r_2mÜl
+(
+ `¡r_make
+(
+csv
+->
+curcmd
+->
+c_¡ash
+->
+tbl_Çme
+,0)) );
+
+1580 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1581
+ `¡r_2mÜl
+(
+ `¡r_make
+(
+ `¡ab_v®
+(
+csv
+->
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+,0)) );
+
+1582 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1583
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+csv
+->
+curcmd
+->
+c_lše
+)) );
+
+1584 ià(!
+max¬g
+)
+
+1585 
+;
+
+1586
+¡r
+ =
+ `SŒ_Ãw
+(49,0);
+
+1587
+ `¡ab_fuÎÇme
+(
+¡r
+,
+csv
+->
+¡ab
+);
+
+1588 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+ `¡r_2mÜl
+(
+¡r
+));
+
+1589 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1590
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+csv
+->
+ha§rgs
+)) );
+
+1591 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1592
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+csv
+->
+wª¼ay
+)) );
+
+1593 ià(
+csv
+->
+ha§rgs
+) {
+
+1594
+ARRAY
+ *
+¬y
+ =
+csv
+->
+¬g¬¿y
+;
+
+1596 ià(
+db¬gs
+->
+¬y_max
+ <
+¬y
+->
+¬y_fžl
+)
+
+1597
+ `a¡Üe
+(
+db¬gs
+,
+¬y
+->
+¬y_fžl
+,
+NuΡr
+);
+
+1598
+ `CÝy
+(
+¬y
+->
+¬y_¬¿y
+,
+db¬gs
+->¬y_¬¿y,‡ry->
+¬y_fžl
++1,
+STR
+*);
+
+1599
+db¬gs
+->
+¬y_fžl
+ =
+¬y
+->ary_fill;
+
+1602 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1603
+ `¡r_2mÜl
+(
+ `¡r_make
+("",0)));
+
+1605 
+;
+
+1606
+ }
+}
+
+1609
+ $do_tms
+(
+¡r
+,
+gimme
+,
+¬gÏ¡
+)
+
+1610
+STR
+ *
+¡r
+;
+
+1611 
+gimme
+;
+
+1612 *
+¬gÏ¡
+;
+
+1614 #ifdeà
+MSDOS
+
+
+1617
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1618 
+ =
+¬gÏ¡
+[0];
+
+1620 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1621
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+1622
+ `STABSET
+(
+¡r
+);
+
+1623
+[++
+] =
+¡r
+;
+
+1624 
+;
+
+1626 ()
+ `times
+(&
+timesbuf
+);
+
+1628 #iâdeà
+HZ
+
+
+1629 
+ #HZ
+ 60
+
+ )
+
+1632 #iâdeà
+lšt
+
+
+1633 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1634
+ `¡r_2mÜl
+(
+ `¡r_nmake
+((()
+timesbuf
+.
+tms_utime
+)/
+HZ
+)));
+
+1635 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1636
+ `¡r_2mÜl
+(
+ `¡r_nmake
+((()
+timesbuf
+.
+tms_¡ime
+)/
+HZ
+)));
+
+1637 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1638
+ `¡r_2mÜl
+(
+ `¡r_nmake
+((()
+timesbuf
+.
+tms_cutime
+)/
+HZ
+)));
+
+1639 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1640
+ `¡r_2mÜl
+(
+ `¡r_nmake
+((()
+timesbuf
+.
+tms_c¡ime
+)/
+HZ
+)));
+
+1642 ()
+ `a¡Üe
+(
+¡ack
+,++
+,
+
+1643
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(0.0)));
+
+1645 
+;
+
+1647
+ }
+}
+
+1650
+ $do_time
+(
+¡r
+,
+tmbuf
+,
+gimme
+,
+¬gÏ¡
+)
+
+1651
+STR
+ *
+¡r
+;
+
+1652 
+tm
+ *
+tmbuf
+;
+
+1653 
+gimme
+;
+
+1654 *
+¬gÏ¡
+;
+
+1656 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+1657
+STR
+ **
+ =
+¬y
+->
+¬y_¬¿y
+;
+
+1658 
+ =
+¬gÏ¡
+[0];
+
+1660 ià(!
+tmbuf
+ ||
+gimme
+ !ð
+G_ARRAY
+) {
+
+1661
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+1662
+ `STABSET
+(
+¡r
+);
+
+1663
+[++
+] =
+¡r
+;
+
+1664 
+;
+
+1666 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_£c
+)));
+
+1667 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_mš
+)));
+
+1668 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_hour
+)));
+
+1669 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_mday
+)));
+
+1670 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_mÚ
+)));
+
+1671 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_y—r
+)));
+
+1672 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_wday
+)));
+
+1673 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_yday
+)));
+
+1674 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_nmake
+(()
+tmbuf
+->
+tm_isd¡
+)));
+
+1675 
+;
+
+1676
+ }
+}
+
+1679
+ $do_kv
+(
+¡r
+,
+hash
+,
+kv
+,
+gimme
+,
+¬gÏ¡
+)
+
+1680
+STR
+ *
+¡r
+;
+
+1681
+HASH
+ *
+hash
+;
+
+1682 
+kv
+;
+
+1683 
+gimme
+;
+
+1684 *
+¬gÏ¡
+;
+
+1686 
+ARRAY
+ *
+¬y
+ =
+¡ack
+;
+
+1687
+STR
+ **
+ =
+¬y
+->
+¬y_¬¿y
+;
+
+1688 
+ =
+¬gÏ¡
+[0];
+
+1689 
+i
+;
+
+1690 
+HENT
+ *
+’Œy
+;
+
+1691 *
+tmps
+;
+
+1692
+STR
+ *
+tmp¡r
+;
+
+1693 
+dokeys
+ = (
+kv
+ =ð
+O_KEYS
+ || kv =ð
+O_HASH
+);
+
+1694 
+dov®ues
+ = (
+kv
+ =ð
+O_VALUES
+ || kv =ð
+O_HASH
+);
+
+1696 ià(
+gimme
+ !ð
+G_ARRAY
+) {
+
+1697
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+1698
+ `STABSET
+(
+¡r
+);
+
+1699
+[++
+] =
+¡r
+;
+
+1700 
+;
+
+1702 ()
+ `h™”š™
+(
+hash
+);
+
+1703 
+’Œy
+ =
+ `h™”Ãxt
+(
+hash
+)) {
+
+1704 ià(
+dokeys
+) {
+
+1705
+tmps
+ =
+ `h™”key
+(
+’Œy
+,&
+i
+);
+
+1706 ià(!
+i
+)
+
+1707
+tmps
+ = "";
+
+1708 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+ `¡r_make
+(
+tmps
+,
+i
+)));
+
+1710 ià(
+dov®ues
+) {
+
+1711
+tmp¡r
+ =
+ `SŒ_Ãw
+(45,0);
+
+1712 #ifdeà
+DEBUGGING
+
+
+1713 ià(
+debug
+ & 8192) {
+
+1714
+ `¥rštf
+(
+buf
+,"%d%%%d=%d\n",
+’Œy
+->
+h’t_hash
+,
+
+1715
+hash
+->
+tbl_max
++1,
+’Œy
+->
+h’t_hash
+ & hash->tbl_max);
+
+1716
+ `¡r_£t
+(
+tmp¡r
+,
+buf
+);
+
+1720
+ `¡r_s£t
+(
+tmp¡r
+,
+ `h™”v®
+(
+hash
+,
+’Œy
+));
+
+1721 ()
+ `a¡Üe
+(
+¬y
+,++
+,
+ `¡r_2mÜl
+(
+tmp¡r
+));
+
+1724 
+;
+
+1725
+ }
+}
+
+1728
+ $do_—ch
+(
+¡r
+,
+hash
+,
+gimme
+,
+¬gÏ¡
+)
+
+1729
+STR
+ *
+¡r
+;
+
+1730
+HASH
+ *
+hash
+;
+
+1731 
+gimme
+;
+
+1732 *
+¬gÏ¡
+;
+
+1734
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1735 
+ =
+¬gÏ¡
+[0];
+
+1736 
+STR
+ *
+my¡rk
+ =
+NuΡr
+;
+
+1737
+HENT
+ *
+’Œy
+ =
+ `h™”Ãxt
+(
+hash
+);
+
+1738 
+i
+;
+
+1739 *
+tmps
+;
+
+1741 ià(
+my¡rk
+) {
+
+1742
+ `¡r_ä“
+(
+my¡rk
+);
+
+1743
+my¡rk
+ =
+NuΡr
+;
+
+1746 ià(
+’Œy
+) {
+
+1747 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1748
+tmps
+ =
+ `h™”key
+(
+’Œy
+, &
+i
+);
+
+1749 ià(!
+i
+)
+
+1750
+tmps
+ = "";
+
+1751
+[++
+] =
+my¡rk
+ =
+ `¡r_make
+(
+tmps
+,
+i
+);
+
+1753
+[++
+] =
+¡r
+;
+
+1754
+ `¡r_s£t
+(
+¡r
+,
+ `h™”v®
+(
+hash
+,
+’Œy
+));
+
+1755
+ `STABSET
+(
+¡r
+);
+
+1756 
+;
+
+1759 
+;
+
+1760
+ }
+}
+
+ @dump.c
+
+14 
+ ~"EXTERN.h
+"
+
+15 
+ ~"³¾.h
+"
+
+17 #ifdeà
+DEBUGGING
+
+
+18 
+ gdum¶vl
+ = 0;
+
+20
+ $dump_®l
+()
+
+22 
+i
+;
+
+23 
+STAB
+ *
+¡ab
+;
+
+24 
+HENT
+ *
+’Œy
+;
+
+25
+STR
+ *
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+27
+ `dump_cmd
+(
+maš_roÙ
+,
+NuÎcmd
+);
+
+28 
+i
+ = 0; i <= 127; i++) {
+
+29 
+’Œy
+ =
+def¡ash
+->
+tbl_¬¿y
+[
+i
+];ƒÁry;ƒÁry =ƒÁry->
+h’t_Ãxt
+) {
+
+30
+¡ab
+ = (
+STAB
+*)
+’Œy
+->
+h’t_v®
+;
+
+31 ià(
+ `¡ab_sub
+(
+¡ab
+)) {
+
+32
+ `¡ab_fuÎÇme
+(
+¡r
+,
+¡ab
+);
+
+33
+ `dump
+("\nSUB % ð",
+¡r
+->
+¡r_±r
+);
+
+34
+ `dump_cmd
+(
+ `¡ab_sub
+(
+¡ab
+)->
+cmd
+,
+NuÎcmd
+);
+
+38
+ }
+}
+
+40
+ $dump_cmd
+(
+cmd
+,
+®t
+)
+
+41 
+CMD
+ *
+cmd
+;
+
+42 
+CMD
+ *
+®t
+;
+
+44
+ `årštf
+(
+¡d”r
+,"{\n");
+
+45 
+cmd
+) {
+
+46
+dum¶vl
+++;
+
+47
+ `dump
+("C_TYPE = %s\n",
+cmdÇme
+[
+cmd
+->
+c_ty³
+]);
+
+48
+ `dump
+("C_ADDR = 0x%lx\n",
+cmd
+);
+
+49
+ `dump
+("C_NEXT = 0x%lx\n",
+cmd
+->
+c_Ãxt
+);
+
+50 ià(
+cmd
+->
+c_lše
+)
+
+51
+ `dump
+("C_LINE = %d (0x%lx)\n",
+cmd
+->
+c_lše
+,cmd);
+
+52 ià(
+cmd
+->
+c_Ïb–
+)
+
+53
+ `dump
+("C_LABEL = \"%s\"\n",
+cmd
+->
+c_Ïb–
+);
+
+54
+ `dump
+("C_OPT = CFT_%s\n",
+cmdÝt
+[
+cmd
+->
+c_æags
+ &
+CF_OPTIMIZE
+]);
+
+55 *
+buf
+ = '\0';
+
+56 ià(
+cmd
+->
+c_æags
+ &
+CF_FIRSTNEG
+)
+
+57 ()
+ `¡rÿt
+(
+buf
+,"FIRSTNEG,");
+
+58 ià(
+cmd
+->
+c_æags
+ &
+CF_NESURE
+)
+
+59 ()
+ `¡rÿt
+(
+buf
+,"NESURE,");
+
+60 ià(
+cmd
+->
+c_æags
+ &
+CF_EQSURE
+)
+
+61 ()
+ `¡rÿt
+(
+buf
+,"EQSURE,");
+
+62 ià(
+cmd
+->
+c_æags
+ &
+CF_COND
+)
+
+63 ()
+ `¡rÿt
+(
+buf
+,"COND,");
+
+64 ià(
+cmd
+->
+c_æags
+ &
+CF_LOOP
+)
+
+65 ()
+ `¡rÿt
+(
+buf
+,"LOOP,");
+
+66 ià(
+cmd
+->
+c_æags
+ &
+CF_INVERT
+)
+
+67 ()
+ `¡rÿt
+(
+buf
+,"INVERT,");
+
+68 ià(
+cmd
+->
+c_æags
+ &
+CF_ONCE
+)
+
+69 ()
+ `¡rÿt
+(
+buf
+,"ONCE,");
+
+70 ià(
+cmd
+->
+c_æags
+ &
+CF_FLIP
+)
+
+71 ()
+ `¡rÿt
+(
+buf
+,"FLIP,");
+
+72 ià(
+cmd
+->
+c_æags
+ &
+CF_TERM
+)
+
+73 ()
+ `¡rÿt
+(
+buf
+,"TERM,");
+
+74 ià(*
+buf
+)
+
+75
+buf
+[
+ `¡¾’
+(buf)-1] = '\0';
+
+76
+ `dump
+("C_FLAGS = (%s)\n",
+buf
+);
+
+77 ià(
+cmd
+->
+c_shÜt
+) {
+
+78
+ `dump
+("C_SHORT = \"%s\"\n",
+ `¡r_³ek
+(
+cmd
+->
+c_shÜt
+));
+
+79
+ `dump
+("C_SLEN = \"%d\"\n",
+cmd
+->
+c_¦’
+);
+
+81 ià(
+cmd
+->
+c_¡ab
+) {
+
+82
+ `dump
+("C_STAB = ");
+
+83
+ `dump_¡ab
+(
+cmd
+->
+c_¡ab
+);
+
+85 ià(
+cmd
+->
+c_¥©
+) {
+
+86
+ `dump
+("C_SPAT = ");
+
+87
+ `dump_¥©
+(
+cmd
+->
+c_¥©
+);
+
+89 ià(
+cmd
+->
+c_ex´
+) {
+
+90
+ `dump
+("C_EXPR = ");
+
+91
+ `dump_¬g
+(
+cmd
+->
+c_ex´
+);
+
+93
+ `dump
+("C_EXPR = NULL\n");
+
+94 
+cmd
+->
+c_ty³
+) {
+
+95 
+C_NEXT
+:
+
+96 
+C_WHILE
+:
+
+97 
+C_BLOCK
+:
+
+98 
+C_ELSE
+:
+
+99 
+C_IF
+:
+
+100 ià(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+) {
+
+101
+ `dump
+("CC_TRUE = ");
+
+102
+ `dump_cmd
+(
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_Œue
+,cmd->ucmd.ccmd.
+cc_®t
+);
+
+105
+ `dump
+("CC_TRUE = NULL\n");
+
+106 ià(
+cmd
+->
+c_ty³
+ =ð
+C_IF
+ && cmd->
+ucmd
+.
+ccmd
+.
+cc_®t
+) {
+
+107
+ `dump
+("CC_ENDELSE = 0x%lx\n",
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+);
+
+109 ià(
+cmd
+->
+c_ty³
+ =ð
+C_NEXT
+ && cmd->
+ucmd
+.
+ccmd
+.
+cc_®t
+) {
+
+110
+ `dump
+("CC_NEXT = 0x%lx\n",
+cmd
+->
+ucmd
+.
+ccmd
+.
+cc_®t
+);
+
+113
+ `dump
+("CC_ALT = NULL\n");
+
+115 
+C_EXPR
+:
+
+116 ià(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_¡ab
+) {
+
+117
+ `dump
+("AC_STAB = ");
+
+118
+ `dump_¡ab
+(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_¡ab
+);
+
+120
+ `dump
+("AC_STAB = NULL\n");
+
+121 ià(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+) {
+
+122
+ `dump
+("AC_EXPR = ");
+
+123
+ `dump_¬g
+(
+cmd
+->
+ucmd
+.
+acmd
+.
+ac_ex´
+);
+
+125
+ `dump
+("AC_EXPR = NULL\n");
+
+127 
+C_CSWITCH
+:
+
+128 
+C_NSWITCH
+:
+
+130 
+max
+,
+i
+;
+
+132
+max
+ =
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_max
+;
+
+133
+ `dump
+("SC_MIN = (%d)\n",
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_off£t
+ + 1);
+
+134
+ `dump
+("SC_MAX = (%d)\n",
+max
+ +
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_off£t
+ - 1);
+
+135
+ `dump
+("SC_NEXT[LT] = 0x%lx\n",
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[0]);
+
+136 
+i
+ = 1; i <
+max
+; i++)
+
+137
+ `dump
+("SC_NEXT[%d] = 0x%lx\n",
+i
+ +
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_off£t
+,
+
+138
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+i
+]);
+
+139
+ `dump
+("SC_NEXT[GT] = 0x%lx\n",
+cmd
+->
+ucmd
+.
+scmd
+.
+sc_Ãxt
+[
+max
+]);
+
+143
+cmd
+ = cmd->
+c_Ãxt
+;
+
+144 ià(
+cmd
+ && cmd->
+c_h—d
+ == cmd) {
+
+145
+ `dump
+("C_NEXT = HEAD\n");
+
+146
+dum¶vl
+--;
+
+147
+ `dump
+("}\n");
+
+150
+dum¶vl
+--;
+
+151
+ `dump
+("}\n");
+
+152 ià(
+cmd
+)
+
+153 ià(
+cmd
+ =ð
+®t
+)
+
+154
+ `dump
+("CONT 0x%lx {\n",
+cmd
+);
+
+156
+ `dump
+("{\n");
+
+158
+ }
+}
+
+160
+ $dump_¬g
+(
+¬g
+)
+
+161 
+ARG
+ *
+¬g
+;
+
+163 
+i
+;
+
+165
+ `årštf
+(
+¡d”r
+,"{\n");
+
+166
+dum¶vl
+++;
+
+167
+ `dump
+("OP_TYPE = %s\n",
+ÝÇme
+[
+¬g
+->
+¬g_ty³
+]);
+
+168
+ `dump
+("OP_LEN = %d\n",
+¬g
+->
+¬g_Ën
+);
+
+169 ià(
+¬g
+->
+¬g_æags
+) {
+
+170
+ `dump_æags
+(
+buf
+,
+¬g
+->
+¬g_æags
+);
+
+171
+ `dump
+("OP_FLAGS = (%s)\n",
+buf
+);
+
+173 
+i
+ = 1; i <ð
+¬g
+->
+¬g_Ën
+; i++) {
+
+174
+ `dump
+("[%d]ARG_TYPE = %s%s\n",
+i
+,
+¬gÇme
+[
+¬g
+[i].
+¬g_ty³
+ &
+A_MASK
+],
+
+175
+¬g
+[
+i
+].
+¬g_ty³
+ &
+A_DONT
+ ? " (unevaluated)" : "");
+
+176 ià(
+¬g
+[
+i
+].
+¬g_Ën
+)
+
+177
+ `dump
+("[%d]ARG_LEN = %d\n",
+i
+,
+¬g
+[i].
+¬g_Ën
+);
+
+178 ià(
+¬g
+[
+i
+].
+¬g_æags
+) {
+
+179
+ `dump_æags
+(
+buf
+,
+¬g
+[
+i
+].
+¬g_æags
+);
+
+180
+ `dump
+("[%d]ARG_FLAGS = (%s)\n",
+i
+,
+buf
+);
+
+182 
+¬g
+[
+i
+].
+¬g_ty³
+ &
+A_MASK
+) {
+
+183 
+A_NULL
+:
+
+184 ià(
+¬g
+->
+¬g_ty³
+ =ð
+O_TRANS
+) {
+
+185 *
+tbl
+ = (*)
+¬g
+[2].
+¬g_±r
+.
+¬g_cv®
+;
+
+186 
+i
+;
+
+188 
+i
+ = 0; i < 256; i++) {
+
+189 ià(
+tbl
+[
+i
+] >= 0)
+
+190
+ `dump
+(" %d -> %d\n",
+i
+,
+tbl
+[i]);
+
+191 ià(
+tbl
+[
+i
+] == -2)
+
+192
+ `dump
+(" %d -> DELETE\n",
+i
+);
+
+196 
+A_LEXPR
+:
+
+197 
+A_EXPR
+:
+
+198
+ `dump
+("[%d]ARG_ARG = ",
+i
+);
+
+199
+ `dump_¬g
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+);
+
+201 
+A_CMD
+:
+
+202
+ `dump
+("[%d]ARG_CMD = ",
+i
+);
+
+203
+ `dump_cmd
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_cmd
+,
+NuÎcmd
+);
+
+205 
+A_WORD
+:
+
+206 
+A_STAB
+:
+
+207 
+A_LVAL
+:
+
+208 
+A_READ
+:
+
+209 
+A_GLOB
+:
+
+210 
+A_ARYLEN
+:
+
+211 
+A_ARYSTAB
+:
+
+212 
+A_LARYSTAB
+:
+
+213
+ `dump
+("[%d]ARG_STAB = ",
+i
+);
+
+214
+ `dump_¡ab
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¡ab
+);
+
+216 
+A_SINGLE
+:
+
+217 
+A_DOUBLE
+:
+
+218 
+A_BACKTICK
+:
+
+219
+ `dump
+("[%d]ARG_STR = '%s'\n",
+i
+,
+ `¡r_³ek
+(
+¬g
+[i].
+¬g_±r
+.
+¬g_¡r
+));
+
+221 
+A_SPAT
+:
+
+222
+ `dump
+("[%d]ARG_SPAT = ",
+i
+);
+
+223
+ `dump_¥©
+(
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¥©
+);
+
+227
+dum¶vl
+--;
+
+228
+ `dump
+("}\n");
+
+229
+ }
+}
+
+231
+ $dump_æags
+(
+b
+,
+æags
+)
+
+232 *
+b
+;
+
+233 
+æags
+;
+
+235 *
+b
+ = '\0';
+
+236 ià(
+æags
+ &
+AF_ARYOK
+)
+
+237 ()
+ `¡rÿt
+(
+b
+,"ARYOK,");
+
+238 ià(
+æags
+ &
+AF_POST
+)
+
+239 ()
+ `¡rÿt
+(
+b
+,"POST,");
+
+240 ià(
+æags
+ &
+AF_PRE
+)
+
+241 ()
+ `¡rÿt
+(
+b
+,"PRE,");
+
+242 ià(
+æags
+ &
+AF_UP
+)
+
+243 ()
+ `¡rÿt
+(
+b
+,"UP,");
+
+244 ià(
+æags
+ &
+AF_COMMON
+)
+
+245 ()
+ `¡rÿt
+(
+b
+,"COMMON,");
+
+246 ià(
+æags
+ &
+AF_DEPR
+)
+
+247 ()
+ `¡rÿt
+(
+b
+,"DEPR,");
+
+248 ià(
+æags
+ &
+AF_LISTISH
+)
+
+249 ()
+ `¡rÿt
+(
+b
+,"LISTISH,");
+
+250 ià(
+æags
+ &
+AF_LOCAL
+)
+
+251 ()
+ `¡rÿt
+(
+b
+,"LOCAL,");
+
+252 ià(*
+b
+)
+
+253
+b
+[
+ `¡¾’
+(b)-1] = '\0';
+
+254
+ }
+}
+
+256
+ $dump_¡ab
+(
+¡ab
+)
+
+257 
+STAB
+ *
+¡ab
+;
+
+259
+STR
+ *
+¡r
+;
+
+261 ià(!
+¡ab
+) {
+
+262
+ `årštf
+(
+¡d”r
+,"{}\n");
+
+265
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+266
+dum¶vl
+++;
+
+267
+ `årštf
+(
+¡d”r
+,"{\n");
+
+268
+ `¡ab_fuÎÇme
+(
+¡r
+,
+¡ab
+);
+
+269
+ `dump
+("STAB_NAME = %s\n",
+¡r
+->
+¡r_±r
+);
+
+270
+dum¶vl
+--;
+
+271
+ `dump
+("}\n");
+
+272
+ }
+}
+
+274
+ $dump_¥©
+(
+¥©
+)
+
+275 
+SPAT
+ *
+¥©
+;
+
+277 
+ch
+;
+
+279 ià(!
+¥©
+) {
+
+280
+ `årštf
+(
+¡d”r
+,"{}\n");
+
+283
+ `årštf
+(
+¡d”r
+,"{\n");
+
+284
+dum¶vl
+++;
+
+285 ià(
+¥©
+->
+¥©_ruÁime
+) {
+
+286
+ `dump
+("SPAT_RUNTIME = ");
+
+287
+ `dump_¬g
+(
+¥©
+->
+¥©_ruÁime
+);
+
+289 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_ONCE
+)
+
+290
+ch
+ = '?';
+
+292
+ch
+ = '/';
+
+293
+ `dump
+("SPAT_PRE %c%s%c\n",
+ch
+,
+¥©
+->
+¥©_»gexp
+->
+´ecomp
+,ch);
+
+295 ià(
+¥©
+->
+¥©_»¶
+) {
+
+296
+ `dump
+("SPAT_REPL = ");
+
+297
+ `dump_¬g
+(
+¥©
+->
+¥©_»¶
+);
+
+299 ià(
+¥©
+->
+¥©_shÜt
+) {
+
+300
+ `dump
+("SPAT_SHORT = \"%s\"\n",
+ `¡r_³ek
+(
+¥©
+->
+¥©_shÜt
+));
+
+302
+dum¶vl
+--;
+
+303
+ `dump
+("}\n");
+
+304
+ }
+}
+
+307
+ $dump
+(
+¬g1
+,
+¬g2
+,
+¬g3
+,
+¬g4
+,
+¬g5
+)
+
+308 *
+¬g1
+;
+
+309 
+¬g2
+,
+¬g3
+,
+¬g4
+,
+¬g5
+;
+
+311 
+i
+;
+
+313 
+i
+ =
+dum¶vl
+*4; i; i--)
+
+314 ()
+ `putc
+(' ',
+¡d”r
+);
+
+315
+ `årštf
+(
+¡d”r
+,
+¬g1
+,
+¬g2
+,
+¬g3
+,
+¬g4
+,
+¬g5
+);
+
+316
+ }
+}
+
+319 #ifdeà
+DEBUG
+
+
+321
+ $showšput
+()
+
+323 *
+s
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+324 
+fd
+;
+
+325 
+cmd
+[] =
+
+329 ià(
+rså
+ !ð
+¡dš
+ ||
+ `¡ºEQ
+(
+s
+,"#!",2))
+
+330 
+s
+;
+
+331 ; *
+s
+; s++) {
+
+332 ià(*
+s
+ & 0200) {
+
+333
+fd
+ =
+ `ü—t
+("/tmp/.foo",0600);
+
+334
+ `wr™e
+(
+fd
+,
+ `¡r_g‘
+(
+lše¡r
+),lše¡r->
+¡r_cur
+);
+
+335 
+s
+ =
+ `¡r_g‘s
+(
+lše¡r
+,
+rså
+,0)) {
+
+336
+ `wr™e
+(
+fd
+,
+s
+,
+lše¡r
+->
+¡r_cur
+);
+
+338 ()
+ `þo£
+(
+fd
+);
+
+339 
+s
+=
+cmd
+; *s; s++)
+
+340 ià(*
+s
+ < ' ')
+
+341 *
+s
+ += 96;
+
+342
+rså
+ =
+ `mypÝ’
+(
+cmd
+,"r");
+
+343
+s
+ =
+ `¡r_g‘s
+(
+lše¡r
+,
+rså
+,0);
+
+344 
+s
+;
+
+347 
+ `¡r_g‘
+(
+lše¡r
+);
+
+348
+ }
+}
+
+ @eval.c
+
+18 
+ ~"EXTERN.h
+"
+
+19 
+ ~"³¾.h
+"
+
+21 #ià!
+defšed
+(
+NSIG
+è|| defšed(
+M_UNIX
+è|| defšed(
+M_XENIX
+)
+
+22 
+ ~<sigÇl.h
+>
+
+25 #ifdeà
+I_FCNTL
+
+
+26 
+ ~<fúŽ.h
+>
+
+28 #ifdeà
+I_SYS_FILE
+
+
+29 
+ ~<sys/fže.h
+>
+
+31 #ifdeà
+I_VFORK
+
+
+32 
+ ~<vfÜk.h
+>
+
+35 #ifdeà
+VOIDSIG
+
+
+36 (*
+ gihªd
+)();
+
+37 (*
+ gqhªd
+)();
+
+39 (*
+ gihªd
+)();
+
+40 (*
+ gqhªd
+)();
+
+43
+ARG
+ *
+ gdeb¬g
+;
+
+44
+STR
+
+ g¡r_¬gs
+;
+
+45 
+STAB
+ *
+ g¡ab2
+;
+
+46 
+STIO
+ *
+ g¡io
+;
+
+47 
+l¡ršg
+ *
+ gl¡r
+;
+
+48 
+ gÞd_rsch¬
+;
+
+49 
+ gÞd_r¦’
+;
+
+51 
+sš
+(),
+cos
+(),
+©ª2
+(),
+pow
+();
+
+53 *
+g‘logš
+();
+
+56
+ $ev®
+(
+¬g
+,
+gimme
+,
+)
+
+57 
+ARG
+ *
+¬g
+;
+
+58 
+gimme
+;
+
+59 
+;
+
+61 
+STR
+ *
+¡r
+;
+
+62 
+ªum
+;
+
+63 
+Ýty³
+;
+
+64 
+STR
+ **
+;
+
+65 
+max¬g
+;
+
+66 
+v®ue
+;
+
+67 *
+tmps
+;
+
+68 *
+tmps2
+;
+
+69 
+¬gæags
+;
+
+70 
+¬gty³
+;
+
+71 
+¬g±r
+‡rgptr;
+
+72 
+¬gÏ¡
+[8];
+
+73 
+tm¶Úg
+;
+
+74 
+wh’
+;
+
+75
+FILE
+ *
+;
+
+76
+STR
+ *
+tmp¡r
+;
+
+77
+FCMD
+ *
+fÜm
+;
+
+78
+STAB
+ *
+¡ab
+;
+
+79
+ARRAY
+ *
+¬y
+;
+
+80
+boÞ
+
+assignšg
+ =
+FALSE
+;
+
+81 
+ `exp
+(),
+ `log
+(),
+ `sq¹
+(),
+ `modf
+();
+
+82 *
+ `üy±
+(), *
+ `g‘’v
+();
+
+83
+
+ `grow_dËv–
+();
+
+85 ià(!
+¬g
+)
+
+86 
+§y_undef
+;
+
+87
+Ýty³
+ =
+¬g
+->
+¬g_ty³
+;
+
+88
+max¬g
+ =
+¬g
+->
+¬g_Ën
+;
+
+89
+¬gÏ¡
+[0] =
+;
+
+90
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+91 ià(
+ +
+max¬g
+ >
+¡ack
+->
+¬y_max
+)
+
+92
+ `a¡Üe
+(
+¡ack
+,
+ +
+max¬g
+,
+NuΡr
+);
+
+93
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+95 #ifdeà
+DEBUGGING
+
+
+96 ià(
+debug
+) {
+
+97 ià(
+debug
+ & 8) {
+
+98
+ `deb
+("% (%lxè%d‡rgs:\n",
+ÝÇme
+[
+Ýty³
+],
+¬g
+,
+max¬g
+);
+
+100
+debÇme
+[
+dËv–
+] =
+ÝÇme
+[
+Ýty³
+][0];
+
+101
+debd–im
+[
+dËv–
+] = ':';
+
+102 ià(++
+dËv–
+ >ð
+dlmax
+)
+
+103
+ `grow_dËv–
+();
+
+107 
+ªum
+ = 1;‡num <ð
+max¬g
+;‡num++) {
+
+108
+¬gæags
+ =
+¬g
+[
+ªum
+].
+¬g_æags
+;
+
+109
+¬gty³
+ =
+¬g
+[
+ªum
+].
+¬g_ty³
+;
+
+110
+¬g±r
+ =
+¬g
+[
+ªum
+].
+¬g_±r
+;
+
+111
+»_ev®
+:
+
+112 
+¬gty³
+) {
+
+114
+[++
+] = &
+¡r_undef
+;
+
+115 #ifdeà
+DEBUGGING
+
+
+116
+tmps
+ = "NULL";
+
+119 
+A_EXPR
+:
+
+120 #ifdeà
+DEBUGGING
+
+
+121 ià(
+debug
+ & 8) {
+
+122
+tmps
+ = "EXPR";
+
+123
+ `deb
+("%d.EXPR =>\n",
+ªum
+);
+
+126
+ =
+ `ev®
+(
+¬g±r
+.
+¬g_¬g
+,
+
+127 (
+¬gæags
+ &
+AF_ARYOK
+è?
+G_ARRAY
+ :
+G_SCALAR
+,
+);
+
+128 ià(
+ + (
+max¬g
+ -
+ªum
+è>
+¡ack
+->
+¬y_max
+)
+
+129
+ `a¡Üe
+(
+¡ack
+,
+ + (
+max¬g
+ -
+ªum
+),
+NuΡr
+);
+
+130
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+132 
+A_CMD
+:
+
+133 #ifdeà
+DEBUGGING
+
+
+134 ià(
+debug
+ & 8) {
+
+135
+tmps
+ = "CMD";
+
+136
+ `deb
+("%d.CMD (%lxè=>\n",
+ªum
+,
+¬g±r
+.
+¬g_cmd
+);
+
+139
+ =
+ `cmd_exec
+(
+¬g±r
+.
+¬g_cmd
+,
+gimme
+, sp);
+
+140 ià(
+ + (
+max¬g
+ -
+ªum
+è>
+¡ack
+->
+¬y_max
+)
+
+141
+ `a¡Üe
+(
+¡ack
+,
+ + (
+max¬g
+ -
+ªum
+),
+NuΡr
+);
+
+142
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+144 
+A_LARYSTAB
+:
+
+145 ++
+;
+
+146 
+Ýty³
+) {
+
+147 
+O_ITEM2
+:
+¬gty³
+ = 2; ;
+
+148 
+O_ITEM3
+:
+¬gty³
+ = 3; ;
+
+149 :
+¬gty³
+ =
+ªum
+; ;
+
+151
+¡r
+ =
+ `aãtch
+(
+ `¡ab_¬¿y
+(
+¬g±r
+.
+¬g_¡ab
+),
+
+152
+¬g
+[
+¬gty³
+].
+¬g_Ën
+ -
+¬yba£
+,
+TRUE
+);
+
+153 #ifdeà
+DEBUGGING
+
+
+154 ià(
+debug
+ & 8) {
+
+155 ()
+ `¥rštf
+(
+buf
+,"LARYSTAB $%s[%d]",
+ `¡ab_Çme
+(
+¬g±r
+.
+¬g_¡ab
+),
+
+156
+¬g
+[
+¬gty³
+].
+¬g_Ën
+);
+
+157
+tmps
+ =
+buf
+;
+
+160 
+do_üem’t
+;
+
+161 
+A_ARYSTAB
+:
+
+162 
+Ýty³
+) {
+
+163 
+O_ITEM2
+:
+¬gty³
+ = 2; ;
+
+164 
+O_ITEM3
+:
+¬gty³
+ = 3; ;
+
+165 :
+¬gty³
+ =
+ªum
+; ;
+
+167
+[++
+] =
+ `aãtch
+(
+ `¡ab_¬¿y
+(
+¬g±r
+.
+¬g_¡ab
+),
+
+168
+¬g
+[
+¬gty³
+].
+¬g_Ën
+ -
+¬yba£
+,
+FALSE
+);
+
+169 #ifdeà
+DEBUGGING
+
+
+170 ià(
+debug
+ & 8) {
+
+171 ()
+ `¥rštf
+(
+buf
+,"ARYSTAB $%s[%d]",
+ `¡ab_Çme
+(
+¬g±r
+.
+¬g_¡ab
+),
+
+172
+¬g
+[
+¬gty³
+].
+¬g_Ën
+);
+
+173
+tmps
+ =
+buf
+;
+
+177 
+A_STAR
+:
+
+178
+¡ab
+ =
+¬g±r
+.
+¬g_¡ab
+;
+
+179
+[++
+] = (
+STR
+*)
+¡ab
+;
+
+180 ià(!
+ `¡ab_x¬¿y
+(
+¡ab
+))
+
+181
+ `¯dd
+(
+¡ab
+);
+
+182 ià(!
+ `¡ab_xhash
+(
+¡ab
+))
+
+183
+ `hadd
+(
+¡ab
+);
+
+184 ià(!
+ `¡ab_io
+(
+¡ab
+))
+
+185
+ `¡ab_io
+(
+¡ab
+èð
+ `¡io_Ãw
+();
+
+186 #ifdeà
+DEBUGGING
+
+
+187 ià(
+debug
+ & 8) {
+
+188 ()
+ `¥rštf
+(
+buf
+,"STAR *%s",
+ `¡ab_Çme
+(
+¬g±r
+.
+¬g_¡ab
+));
+
+189
+tmps
+ =
+buf
+;
+
+193 
+A_LSTAR
+:
+
+194
+¡r
+ =
+[++
+] = (
+STR
+*)
+¬g±r
+.
+¬g_¡ab
+;
+
+195 #ifdeà
+DEBUGGING
+
+
+196 ià(
+debug
+ & 8) {
+
+197 ()
+ `¥rštf
+(
+buf
+,"LSTAR *%s",
+ `¡ab_Çme
+(
+¬g±r
+.
+¬g_¡ab
+));
+
+198
+tmps
+ =
+buf
+;
+
+202 
+A_STAB
+:
+
+203
+[++
+] =
+ `STAB_STR
+(
+¬g±r
+.
+¬g_¡ab
+);
+
+204 #ifdeà
+DEBUGGING
+
+
+205 ià(
+debug
+ & 8) {
+
+206 ()
+ `¥rštf
+(
+buf
+,"STAB $%s",
+ `¡ab_Çme
+(
+¬g±r
+.
+¬g_¡ab
+));
+
+207
+tmps
+ =
+buf
+;
+
+211 
+A_LEXPR
+:
+
+212 #ifdeà
+DEBUGGING
+
+
+213 ià(
+debug
+ & 8) {
+
+214
+tmps
+ = "LEXPR";
+
+215
+ `deb
+("%d.LEXPR =>\n",
+ªum
+);
+
+218 ià(
+¬gæags
+ &
+AF_ARYOK
+) {
+
+219
+ =
+ `ev®
+(
+¬g±r
+.
+¬g_¬g
+,
+G_ARRAY
+, sp);
+
+220 ià(
+ + (
+max¬g
+ -
+ªum
+è>
+¡ack
+->
+¬y_max
+)
+
+221
+ `a¡Üe
+(
+¡ack
+,
+ + (
+max¬g
+ -
+ªum
+),
+NuΡr
+);
+
+222
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+225
+ =
+ `ev®
+(
+¬g±r
+.
+¬g_¬g
+,
+G_SCALAR
+, sp);
+
+226
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+227
+¡r
+ =
+[
+];
+
+228 
+do_üem’t
+;
+
+231 
+A_LVAL
+:
+
+232 #ifdeà
+DEBUGGING
+
+
+233 ià(
+debug
+ & 8) {
+
+234 ()
+ `¥rštf
+(
+buf
+,"LVAL $%s",
+ `¡ab_Çme
+(
+¬g±r
+.
+¬g_¡ab
+));
+
+235
+tmps
+ =
+buf
+;
+
+238 ++
+;
+
+239
+¡r
+ =
+ `STAB_STR
+(
+¬g±r
+.
+¬g_¡ab
+);
+
+240 ià(!
+¡r
+)
+
+241
+ `çl
+("panic: A_LVAL");
+
+242
+do_üem’t
+:
+
+243
+assignšg
+ =
+TRUE
+;
+
+244 ià(
+¬gæags
+ &
+AF_PRE
+) {
+
+245 ià(
+¬gæags
+ &
+AF_UP
+)
+
+246
+ `¡r_šc
+(
+¡r
+);
+
+248
+ `¡r_dec
+(
+¡r
+);
+
+249
+ `STABSET
+(
+¡r
+);
+
+250
+[
+] =
+¡r
+;
+
+251
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+253 ià(
+¬gæags
+ &
+AF_POST
+) {
+
+254
+[
+] =
+ `¡r_mÜl
+(
+¡r
+);
+
+255 ià(
+¬gæags
+ &
+AF_UP
+)
+
+256
+ `¡r_šc
+(
+¡r
+);
+
+258
+ `¡r_dec
+(
+¡r
+);
+
+259
+ `STABSET
+(
+¡r
+);
+
+260
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+263
+[
+] =
+¡r
+;
+
+265 
+A_LARYLEN
+:
+
+266 ++
+;
+
+267
+¡ab
+ =
+¬g±r
+.
+¬g_¡ab
+;
+
+268
+¡r
+ =
+ `¡ab_¬¿y
+(
+¬g±r
+.
+¬g_¡ab
+)->
+¬y_magic
+;
+
+269 ià(
+Ýty³
+ !ð
+O_SASSIGN
+ ||
+¬gæags
+ & (
+AF_PRE
+|
+AF_POST
+))
+
+270
+ `¡r_num£t
+(
+¡r
+,()(
+ `¡ab_¬¿y
+(
+¡ab
+)->
+¬y_fžl
++
+¬yba£
+));
+
+271 #ifdeà
+DEBUGGING
+
+
+272
+tmps
+ = "LARYLEN";
+
+274 ià(!
+¡r
+)
+
+275
+ `çl
+("panic: A_LEXPR");
+
+276 
+do_üem’t
+;
+
+277 
+A_ARYLEN
+:
+
+278
+¡ab
+ =
+¬g±r
+.
+¬g_¡ab
+;
+
+279
+[++
+] =
+ `¡ab_¬¿y
+(
+¡ab
+)->
+¬y_magic
+;
+
+280
+ `¡r_num£t
+(
+[
+],()(
+ `¡ab_¬¿y
+(
+¡ab
+)->
+¬y_fžl
++
+¬yba£
+));
+
+281 #ifdeà
+DEBUGGING
+
+
+282
+tmps
+ = "ARYLEN";
+
+285 
+A_SINGLE
+:
+
+286
+[++
+] =
+¬g±r
+.
+¬g_¡r
+;
+
+287 #ifdeà
+DEBUGGING
+
+
+288
+tmps
+ = "SINGLE";
+
+291 
+A_DOUBLE
+:
+
+292 (è
+ `š‹½
+(
+¡r
+,
+¬g±r
+.
+¬g_¡r
+,
+);
+
+293
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+294
+[++
+] =
+¡r
+;
+
+295 #ifdeà
+DEBUGGING
+
+
+296
+tmps
+ = "DOUBLE";
+
+299 
+A_BACKTICK
+:
+
+300
+tmps
+ =
+ `¡r_g‘
+(
+ `š‹½
+(
+¡r
+,
+¬g±r
+.
+¬g_¡r
+,
+));
+
+301
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+302 #ifdeà
+TAINT
+
+
+303
+ `šrÝ”
+("Insecure dependency in ``");
+
+305
+ =
+ `mypÝ’
+(
+tmps
+,"r");
+
+306
+ `¡r_£t
+(
+¡r
+,"");
+
+307 ià(
+) {
+
+308 ià(
+gimme
+ =ð
+G_SCALAR
+) {
+
+309 
+ `¡r_g‘s
+(
+¡r
+,
+,¡r->
+¡r_cur
+è!ð
+NuÎch
+)
+
+314 ià(++
+ >
+¡ack
+->
+¬y_max
+) {
+
+315
+ `a¡Üe
+(
+¡ack
+,
+,
+NuΡr
+);
+
+316
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+318
+¡r
+ =
+[
+] =
+ `SŒ_Ãw
+(56,80);
+
+319 ià(
+ `¡r_g‘s
+(
+¡r
+,
+,0è=ð
+NuÎch
+) {
+
+320
+--;
+
+323 ià(
+¡r
+->
+¡r_Ën
+ - sŒ->
+¡r_cur
+ > 20) {
+
+324
+¡r
+->
+¡r_Ën
+ = sŒ->
+¡r_cur
++1;
+
+325
+ `R’ew
+(
+¡r
+->
+¡r_±r
+, sŒ->
+¡r_Ën
+, );
+
+327
+ `¡r_2mÜl
+(
+¡r
+);
+
+330
+¡©usv®ue
+ =
+ `mypþo£
+(
+);
+
+333
+¡©usv®ue
+ = -1;
+
+335 ià(
+gimme
+ =ð
+G_SCALAR
+)
+
+336
+[++
+] =
+¡r
+;
+
+337 #ifdeà
+DEBUGGING
+
+
+338
+tmps
+ = "BACK";
+
+341 
+A_WANTARRAY
+:
+
+343 ià(
+curcsv
+->
+wª¼ay
+ =ð
+G_ARRAY
+)
+
+344
+[++
+] = &
+¡r_yes
+;
+
+346
+[++
+] = &
+¡r_no
+;
+
+348 #ifdeà
+DEBUGGING
+
+
+349
+tmps
+ = "WANTARRAY";
+
+352 
+A_INDREAD
+:
+
+353
+Ï¡_š_¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+ `STAB_STR
+(
+¬g±r
+.
+¬g_¡ab
+)),
+TRUE
+);
+
+354
+Þd_rsch¬
+ =
+rsch¬
+;
+
+355
+Þd_r¦’
+ =
+r¦’
+;
+
+356 
+do_»ad
+;
+
+357 
+A_GLOB
+:
+
+358
+¬gæags
+ |ð
+AF_POST
+;
+
+359
+Ï¡_š_¡ab
+ =
+¬g±r
+.
+¬g_¡ab
+;
+
+360
+Þd_rsch¬
+ =
+rsch¬
+;
+
+361
+Þd_r¦’
+ =
+r¦’
+;
+
+362
+r¦’
+ = 1;
+
+363 #ifdeà
+MSDOS
+
+
+364
+rsch¬
+ = 0;
+
+366 #ifdeà
+CSH
+
+
+367
+rsch¬
+ = 0;
+
+369
+rsch¬
+ = '\n';
+
+372 
+do_»ad
+;
+
+373 
+A_READ
+:
+
+374
+Ï¡_š_¡ab
+ =
+¬g±r
+.
+¬g_¡ab
+;
+
+375
+Þd_rsch¬
+ =
+rsch¬
+;
+
+376
+Þd_r¦’
+ =
+r¦’
+;
+
+377
+do_»ad
+:
+
+378 ià(
+ªum
+ > 1)
+
+379
+gimme
+ =
+G_SCALAR
+;
+
+380 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+381
+¡r
+ =
+ `SŒ_Ãw
+(57,0);
+
+382 ++
+;
+
+383
+ =
+NuÎå
+;
+
+384 ià(
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)) {
+
+385
+ =
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+iå
+;
+
+386 ià(!
+) {
+
+387 ià(
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+æags
+ &
+IOF_ARGV
+) {
+
+388 ià(
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+æags
+ &
+IOF_START
+) {
+
+389
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+æags
+ &ð~
+IOF_START
+;
+
+390
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+lšes
+ = 0;
+
+391 ià(
+ `®’
+(
+ `¡ab_¬¿y
+(
+Ï¡_š_¡ab
+)) < 0) {
+
+392
+tmp¡r
+ =
+ `¡r_make
+("-",1);
+
+393 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+Ï¡_š_¡ab
+),
+tmp¡r
+);
+
+396
+ =
+ `Ãxrgv
+(
+Ï¡_š_¡ab
+);
+
+397 ià(!
+) {
+
+398 ()
+ `do_þo£
+(
+Ï¡_š_¡ab
+,
+FALSE
+);
+
+399
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+æags
+ |ð
+IOF_START
+;
+
+402 ià(
+¬gty³
+ =ð
+A_GLOB
+) {
+
+403 (è
+ `š‹½
+(
+¡r
+,
+ `¡ab_v®
+(
+Ï¡_š_¡ab
+),
+);
+
+404
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+405
+tmp¡r
+ =
+ `SŒ_Ãw
+(55,0);
+
+406 #ifdeà
+MSDOS
+
+
+407
+ `¡r_£t
+(
+tmp¡r
+, "perlglob ");
+
+408
+ `¡r_sÿt
+(
+tmp¡r
+,
+¡r
+);
+
+409
+ `¡r_ÿt
+(
+tmp¡r
+," |");
+
+411 #ifdeà
+CSH
+
+
+412
+ `¡r_n£t
+(
+tmp¡r
+,
+cshÇme
+,
+cshËn
+);
+
+413
+ `¡r_ÿt
+(
+tmp¡r
+," -cf 'set‚onomatch; glob ");
+
+414
+ `¡r_sÿt
+(
+tmp¡r
+,
+¡r
+);
+
+415
+ `¡r_ÿt
+(
+tmp¡r
+,"'|");
+
+417
+ `¡r_£t
+(
+tmp¡r
+, "echo ");
+
+418
+ `¡r_sÿt
+(
+tmp¡r
+,
+¡r
+);
+
+419
+ `¡r_ÿt
+(
+tmp¡r
+,
+
+423 ()
+ `do_Ý’
+(
+Ï¡_š_¡ab
+,
+tmp¡r
+->
+¡r_±r
+,
+
+424
+tmp¡r
+->
+¡r_cur
+);
+
+425
+ =
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+iå
+;
+
+426
+ `¡r_ä“
+(
+tmp¡r
+);
+
+430 ià(!
+ &&
+dow¬n
+)
+
+431
+ `w¬n
+("R—d oÀþo£d fžehªdË <%s>",
+ `¡ab_Çme
+(
+Ï¡_š_¡ab
+));
+
+432
+wh’
+ =
+¡r
+->
+¡r_Ën
+;
+
+433 ià(!
+wh’
+)
+
+434
+ `SŒ_Grow
+(
+¡r
+,80);
+
+435
+k“pgošg
+:
+
+436 ià(!
+)
+
+437
+[
+] = &
+¡r_undef
+;
+
+438 ià(!
+ `¡r_g‘s
+(
+¡r
+,
+,
+Ýty³
+ =ð
+O_RCAT
+ ? sŒ->
+¡r_cur
+ : 0)) {
+
+439
+ `þ—»¼
+(
+);
+
+440 ià(
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+æags
+ &
+IOF_ARGV
+) {
+
+441
+ =
+ `Ãxrgv
+(
+Ï¡_š_¡ab
+);
+
+442 ià(
+)
+
+443 
+k“pgošg
+;
+
+444 ()
+ `do_þo£
+(
+Ï¡_š_¡ab
+,
+FALSE
+);
+
+445
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+æags
+ |ð
+IOF_START
+;
+
+447 ià(
+¬gæags
+ &
+AF_POST
+) {
+
+448 ()
+ `do_þo£
+(
+Ï¡_š_¡ab
+,
+FALSE
+);
+
+450
+[
+] = &
+¡r_undef
+;
+
+451
+rsch¬
+ =
+Þd_rsch¬
+;
+
+452
+r¦’
+ =
+Þd_r¦’
+;
+
+453 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+454 --
+;
+
+455
+ `¡r_2mÜl
+(
+¡r
+);
+
+456 
+¬¿y_»tuº
+;
+
+461
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+lšes
+++;
+
+462
+[
+] =
+¡r
+;
+
+463 #ifdeà
+TAINT
+
+
+464
+¡r
+->
+¡r_š‹d
+ = 1;
+
+466 ià(
+¬gæags
+ &
+AF_POST
+) {
+
+467 ià(
+¡r
+->
+¡r_cur
+ > 0)
+
+468
+¡r
+->
+¡r_cur
+--;
+
+469 ià(
+¡r
+->
+¡r_±r
+[¡r->
+¡r_cur
+] =ð
+rsch¬
+)
+
+470
+¡r
+->
+¡r_±r
+[¡r->
+¡r_cur
+] = '\0';
+
+472
+¡r
+->
+¡r_cur
+++;
+
+473 
+tmps
+ =
+¡r
+->
+¡r_±r
+; *tmps;mps++)
+
+474 ià(!
+ `i§Íha
+(*
+tmps
+è&& !
+ `isdig™
+(*tmps) &&
+
+475
+ `šdex
+("$&*(){}[]'\";\\|?<>~`",*
+tmps
+))
+
+477 ià(*
+tmps
+ &&
+ `¡©
+(
+¡r
+->
+¡r_±r
+,&
+¡©buf
+) < 0)
+
+478 
+k“pgošg
+;
+
+480 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+481 ià(
+¡r
+->
+¡r_Ën
+ - sŒ->
+¡r_cur
+ > 20) {
+
+482
+¡r
+->
+¡r_Ën
+ = sŒ->
+¡r_cur
++1;
+
+483
+ `R’ew
+(
+¡r
+->
+¡r_±r
+, sŒ->
+¡r_Ën
+, );
+
+485
+ `¡r_2mÜl
+(
+¡r
+);
+
+486 ià(++
+ >
+¡ack
+->
+¬y_max
+) {
+
+487
+ `a¡Üe
+(
+¡ack
+,
+,
+NuΡr
+);
+
+488
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+490
+¡r
+ =
+ `SŒ_Ãw
+(58,80);
+
+491 
+k“pgošg
+;
+
+493 ià(!
+wh’
+ &&
+¡r
+->
+¡r_Ën
+ - sŒ->
+¡r_cur
+ > 80) {
+
+495 ià(
+¡r
+->
+¡r_cur
+ < 60)
+
+496
+¡r
+->
+¡r_Ën
+ = 80;
+
+498
+¡r
+->
+¡r_Ën
+ = sŒ->
+¡r_cur
++40;
+
+499
+ `R’ew
+(
+¡r
+->
+¡r_±r
+, sŒ->
+¡r_Ën
+, );
+
+502
+rsch¬
+ =
+Þd_rsch¬
+;
+
+503
+r¦’
+ =
+Þd_r¦’
+;
+
+504 #ifdeà
+DEBUGGING
+
+
+505
+tmps
+ = "READ";
+
+509 #ifdeà
+DEBUGGING
+
+
+510 ià(
+debug
+ & 8)
+
+511
+ `deb
+("%d.% ð'%s'\n",
+ªum
+,
+tmps
+,
+ `¡r_³ek
+(
+[
+]));
+
+513 ià(
+ªum
+ < 8)
+
+514
+¬gÏ¡
+[
+ªum
+] =
+;
+
+517
+ +ð
+¬gÏ¡
+[0];
+
+518 #ifdeà
+SMALLSWITCHES
+
+
+519 ià(
+Ýty³
+ <
+O_CHOWN
+)
+
+521 
+Ýty³
+) {
+
+522 
+O_RCAT
+:
+
+523
+ `STABSET
+(
+¡r
+);
+
+525 
+O_ITEM
+:
+
+526 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+527 
+¬¿y_»tuº
+;
+
+529 
+O_SCALAR
+:
+
+530
+ `STR_SSET
+(
+¡r
+,
+[1]);
+
+531
+ `STABSET
+(
+¡r
+);
+
+533 
+O_ITEM2
+:
+
+534 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+535 
+¬¿y_»tuº
+;
+
+536 --
+ªum
+;
+
+537
+ `STR_SSET
+(
+¡r
+,
+[
+¬gÏ¡
+[
+ªum
+]-arglast[0]]);
+
+538
+ `STABSET
+(
+¡r
+);
+
+540 
+O_ITEM3
+:
+
+541 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+542 
+¬¿y_»tuº
+;
+
+543 --
+ªum
+;
+
+544
+ `STR_SSET
+(
+¡r
+,
+[
+¬gÏ¡
+[
+ªum
+]-arglast[0]]);
+
+545
+ `STABSET
+(
+¡r
+);
+
+547 
+O_CONCAT
+:
+
+548
+ `STR_SSET
+(
+¡r
+,
+[1]);
+
+549
+ `¡r_sÿt
+(
+¡r
+,
+[2]);
+
+550
+ `STABSET
+(
+¡r
+);
+
+552 
+O_REPEAT
+:
+
+553 ià(
+gimme
+ =ð
+G_ARRAY
+ &&
+¬g
+[1].
+¬g_æags
+ &
+AF_ARYOK
+) {
+
+554
+ =
+ `do_»³©¬y
+(
+¬gÏ¡
+);
+
+555 
+¬¿y_»tuº
+;
+
+557
+ `STR_SSET
+(
+¡r
+,
+[
+¬gÏ¡
+[1] -‡rglast[0]]);
+
+558
+ªum
+ = ()
+ `¡r_gnum
+(
+[
+¬gÏ¡
+[2] -‡rglast[0]]);
+
+559 ià(
+ªum
+ >= 1) {
+
+560
+tmp¡r
+ =
+ `SŒ_Ãw
+(50, 0);
+
+561
+tmps
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+562
+ `¡r_n£t
+(
+tmp¡r
+,
+tmps
+,
+¡r
+->
+¡r_cur
+);
+
+563
+tmps
+ =
+ `¡r_g‘
+(
+tmp¡r
+);
+
+564
+ `STR_GROW
+(
+¡r
+, (
+ªum
+ * sŒ->
+¡r_cur
+) + 1);
+
+565
+ `»³©ýy
+(
+¡r
+->
+¡r_±r
+,
+tmps
+,
+tmp¡r
+->
+¡r_cur
+,
+ªum
+);
+
+566
+¡r
+->
+¡r_cur
+ *ð
+ªum
+;
+
+567
+¡r
+->
+¡r_±r
+[¡r->
+¡r_cur
+] = '\0';
+
+568
+¡r
+->
+¡r_nok
+ = 0;
+
+569
+ `¡r_ä“
+(
+tmp¡r
+);
+
+572
+ `¡r_s£t
+(
+¡r
+,&
+¡r_no
+);
+
+573
+ `STABSET
+(
+¡r
+);
+
+575 
+O_MATCH
+:
+
+576
+ =
+ `do_m©ch
+(
+¡r
+,
+¬g
+,
+
+577
+gimme
+,
+¬gÏ¡
+);
+
+578 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+579 
+¬¿y_»tuº
+;
+
+580
+ `STABSET
+(
+¡r
+);
+
+582 
+O_NMATCH
+:
+
+583
+ =
+ `do_m©ch
+(
+¡r
+,
+¬g
+,
+
+584
+G_SCALAR
+,
+¬gÏ¡
+);
+
+585
+ `¡r_s£t
+(
+¡r
+,
+ `¡r_Œue
+(¡rè? &
+¡r_no
+ : &
+¡r_yes
+);
+
+586
+ `STABSET
+(
+¡r
+);
+
+588 
+O_SUBST
+:
+
+589
+ =
+ `do_sub¡
+(
+¡r
+,
+¬g
+,
+¬gÏ¡
+[0]);
+
+590 
+¬¿y_»tuº
+;
+
+591 
+O_NSUBST
+:
+
+592
+ =
+ `do_sub¡
+(
+¡r
+,
+¬g
+,
+¬gÏ¡
+[0]);
+
+593
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+594
+ `¡r_£t
+(
+¡r
+,
+ `¡r_Œue
+(¡rè?
+No
+ :
+Yes
+);
+
+595 
+¬¿y_»tuº
+;
+
+596 
+O_ASSIGN
+:
+
+597 ià(
+¬g
+[1].
+¬g_æags
+ &
+AF_ARYOK
+) {
+
+598 ià(
+¬g
+->
+¬g_Ën
+ == 1) {
+
+599
+¬g
+->
+¬g_ty³
+ =
+O_LOCAL
+;
+
+600 
+loÿl
+;
+
+603
+¬g
+->
+¬g_ty³
+ =
+O_AASSIGN
+;
+
+604 
+¯ssign
+;
+
+608
+¬g
+->
+¬g_ty³
+ =
+O_SASSIGN
+;
+
+609 
+§ssign
+;
+
+611 
+O_LOCAL
+:
+
+612
+loÿl
+:
+
+613
+¬gÏ¡
+[2] =‡rglast[1];
+
+615 
+O_AASSIGN
+:
+
+616
+¯ssign
+:
+
+617
+ =
+ `do_assign
+(
+¬g
+,
+
+618
+gimme
+,
+¬gÏ¡
+);
+
+619 
+¬¿y_»tuº
+;
+
+620 
+O_SASSIGN
+:
+
+621
+§ssign
+:
+
+622
+ `STR_SSET
+(
+¡r
+,
+[2]);
+
+623
+ `STABSET
+(
+¡r
+);
+
+625 
+O_CHOP
+:
+
+626
+ -ð
+¬gÏ¡
+[0];
+
+627
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+628 
+ =
+¬gÏ¡
+[0] + 1; sp <=‡rglast[1]; sp++)
+
+629
+ `do_chÝ
+(
+¡r
+,
+[
+]);
+
+630
+ +ð
+¬gÏ¡
+[0];
+
+632 
+O_DEFINED
+:
+
+633 ià(
+¬g
+[1].
+¬g_ty³
+ &
+A_DONT
+) {
+
+634
+ =
+ `do_defšed
+(
+¡r
+,
+¬g
+,
+
+635
+gimme
+,
+¬gÏ¡
+);
+
+636 
+¬¿y_»tuº
+;
+
+638 ià(
+¡r
+->
+¡r_pok
+ || sŒ->
+¡r_nok
+)
+
+639 
+§y_yes
+;
+
+640 
+§y_no
+;
+
+641 
+O_UNDEF
+:
+
+642 ià(
+¬g
+[1].
+¬g_ty³
+ &
+A_DONT
+) {
+
+643
+ =
+ `do_undef
+(
+¡r
+,
+¬g
+,
+
+644
+gimme
+,
+¬gÏ¡
+);
+
+645 
+¬¿y_»tuº
+;
+
+647 ià(
+¡r
+ !ð
+ `¡ab_v®
+(
+def¡ab
+)) {
+
+648 ià(
+¡r
+->
+¡r_Ën
+) {
+
+649 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+)
+
+650
+ `SŒ_Grow
+(
+¡r
+,0);
+
+651
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+652
+¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+653
+¡r
+->
+¡r_Ën
+ = 0;
+
+655
+¡r
+->
+¡r_pok
+ = sŒ->
+¡r_nok
+ = 0;
+
+656
+ `STABSET
+(
+¡r
+);
+
+658 
+§y_undef
+;
+
+659 
+O_STUDY
+:
+
+660
+ =
+ `do_¡udy
+(
+¡r
+,
+¬g
+,
+
+661
+gimme
+,
+¬gÏ¡
+);
+
+662 
+¬¿y_»tuº
+;
+
+663 
+O_POW
+:
+
+664
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+665
+v®ue
+ =
+ `pow
+(v®ue,
+ `¡r_gnum
+(
+[2]));
+
+666 
+dÚum£t
+;
+
+667 
+O_MULTIPLY
+:
+
+668
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+669
+v®ue
+ *ð
+ `¡r_gnum
+(
+[2]);
+
+670 
+dÚum£t
+;
+
+671 
+O_DIVIDE
+:
+
+672 ià((
+v®ue
+ =
+ `¡r_gnum
+(
+[2])) == 0.0)
+
+673
+ `çl
+("Illegal division by zero");
+
+674 #ifdeà
+üay
+
+
+677 
+x
+;
+
+678 
+k
+;
+
+679
+x
+ =
+ `¡r_gnum
+(
+[1]);
+
+680 ià(()()
+x
+ == x &&
+
+681 ()()
+v®ue
+ == value &&
+
+682 (
+k
+ = ()
+x
+/()
+v®ue
+)*()value == ()x) {
+
+683
+v®ue
+ =
+k
+;
+
+685
+v®ue
+ =
+x
+/value;
+
+689
+v®ue
+ =
+ `¡r_gnum
+(
+[1]) / value;
+
+691 
+dÚum£t
+;
+
+692 
+O_MODULO
+:
+
+693
+tm¶Úg
+ = (è
+ `¡r_gnum
+(
+[2]);
+
+694 ià(
+tm¶Úg
+ == 0L)
+
+695
+ `çl
+("Illegal modulus zero");
+
+696
+wh’
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+697 #iâdeà
+lšt
+
+
+698 ià(
+wh’
+ >= 0)
+
+699
+v®ue
+ = ()(
+wh’
+ %
+tm¶Úg
+);
+
+701
+v®ue
+ = ()(
+tm¶Úg
+ - ((-
+wh’
+ - 1) %mplong)) - 1;
+
+703 
+dÚum£t
+;
+
+704 
+O_ADD
+:
+
+705
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+706
+v®ue
+ +ð
+ `¡r_gnum
+(
+[2]);
+
+707 
+dÚum£t
+;
+
+708 
+O_SUBTRACT
+:
+
+709
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+710
+v®ue
+ -ð
+ `¡r_gnum
+(
+[2]);
+
+711 
+dÚum£t
+;
+
+712 
+O_LEFT_SHIFT
+:
+
+713
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+714
+ªum
+ = ()
+ `¡r_gnum
+(
+[2]);
+
+715 #iâdeà
+lšt
+
+
+716
+v®ue
+ = ()(
+ `U_L
+(v®ueè<<
+ªum
+);
+
+718 
+dÚum£t
+;
+
+719 
+O_RIGHT_SHIFT
+:
+
+720
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+721
+ªum
+ = ()
+ `¡r_gnum
+(
+[2]);
+
+722 #iâdeà
+lšt
+
+
+723
+v®ue
+ = ()(
+ `U_L
+(v®ueè>>
+ªum
+);
+
+725 
+dÚum£t
+;
+
+726 
+O_LT
+:
+
+727
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+728
+v®ue
+ = (v®u<
+ `¡r_gnum
+(
+[2])) ? 1.0 : 0.0;
+
+729 
+dÚum£t
+;
+
+730 
+O_GT
+:
+
+731
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+732
+v®ue
+ = (v®u>
+ `¡r_gnum
+(
+[2])) ? 1.0 : 0.0;
+
+733 
+dÚum£t
+;
+
+734 
+O_LE
+:
+
+735
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+736
+v®ue
+ = (v®u<ð
+ `¡r_gnum
+(
+[2])) ? 1.0 : 0.0;
+
+737 
+dÚum£t
+;
+
+738 
+O_GE
+:
+
+739
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+740
+v®ue
+ = (v®u>ð
+ `¡r_gnum
+(
+[2])) ? 1.0 : 0.0;
+
+741 
+dÚum£t
+;
+
+742 
+O_EQ
+:
+
+743 ià(
+dow¬n
+) {
+
+744 ià((!
+[1]->
+¡r_nok
+ && !
+ `looks_like_numb”
+(st[1])) ||
+
+745 (!
+[2]->
+¡r_nok
+ && !
+ `looks_like_numb”
+(st[2])) )
+
+746
+ `w¬n
+("Possible use of == on string value");
+
+748
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+749
+v®ue
+ = (v®u=ð
+ `¡r_gnum
+(
+[2])) ? 1.0 : 0.0;
+
+750 
+dÚum£t
+;
+
+751 
+O_NE
+:
+
+752
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+753
+v®ue
+ = (v®u!ð
+ `¡r_gnum
+(
+[2])) ? 1.0 : 0.0;
+
+754 
+dÚum£t
+;
+
+755 
+O_NCMP
+:
+
+756
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+757
+v®ue
+ -ð
+ `¡r_gnum
+(
+[2]);
+
+758 ià(
+v®ue
+ > 0.0)
+
+759
+v®ue
+ = 1.0;
+
+760 ià(
+v®ue
+ < 0.0)
+
+761
+v®ue
+ = -1.0;
+
+762 
+dÚum£t
+;
+
+763 
+O_BIT_AND
+:
+
+764 ià(!
+§wvec
+ ||
+[1]->
+¡r_nok
+ || st[2]->str_nok) {
+
+765
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+766 #iâdeà
+lšt
+
+
+767
+v®ue
+ = ()(
+ `U_L
+(v®ueè& U_L(
+ `¡r_gnum
+(
+[2])));
+
+769 
+dÚum£t
+;
+
+772
+ `do_vÝ
+(
+Ýty³
+,
+¡r
+,
+[1],st[2]);
+
+774 
+O_XOR
+:
+
+775 ià(!
+§wvec
+ ||
+[1]->
+¡r_nok
+ || st[2]->str_nok) {
+
+776
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+777 #iâdeà
+lšt
+
+
+778
+v®ue
+ = ()(
+ `U_L
+(v®ueè^ U_L(
+ `¡r_gnum
+(
+[2])));
+
+780 
+dÚum£t
+;
+
+783
+ `do_vÝ
+(
+Ýty³
+,
+¡r
+,
+[1],st[2]);
+
+785 
+O_BIT_OR
+:
+
+786 ià(!
+§wvec
+ ||
+[1]->
+¡r_nok
+ || st[2]->str_nok) {
+
+787
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+788 #iâdeà
+lšt
+
+
+789
+v®ue
+ = ()(
+ `U_L
+(v®ueè| U_L(
+ `¡r_gnum
+(
+[2])));
+
+791 
+dÚum£t
+;
+
+794
+ `do_vÝ
+(
+Ýty³
+,
+¡r
+,
+[1],st[2]);
+
+797 
+O_AND
+:
+
+798 ià(
+ `¡r_Œue
+(
+[1])) {
+
+799
+ªum
+ = 2;
+
+800
+Ýty³
+ =
+O_ITEM2
+;
+
+801
+¬gæags
+ =
+¬g
+[
+ªum
+].
+¬g_æags
+;
+
+802 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+803
+¬gæags
+ |ð
+AF_ARYOK
+;
+
+804
+¬gty³
+ =
+¬g
+[
+ªum
+].
+¬g_ty³
+ &
+A_MASK
+;
+
+805
+¬g±r
+ =
+¬g
+[
+ªum
+].
+¬g_±r
+;
+
+806
+max¬g
+ =
+ªum
+ = 1;
+
+807
+ =
+¬gÏ¡
+[0];
+
+808
+ -ð
+;
+
+809 
+»_ev®
+;
+
+812 ià(
+assignšg
+) {
+
+813
+ `¡r_s£t
+(
+¡r
+,
+[1]);
+
+814
+ `STABSET
+(
+¡r
+);
+
+817
+¡r
+ =
+[1];
+
+820 
+O_OR
+:
+
+821 ià(
+ `¡r_Œue
+(
+[1])) {
+
+822 ià(
+assignšg
+) {
+
+823
+ `¡r_s£t
+(
+¡r
+,
+[1]);
+
+824
+ `STABSET
+(
+¡r
+);
+
+827
+¡r
+ =
+[1];
+
+831
+ªum
+ = 2;
+
+832
+Ýty³
+ =
+O_ITEM2
+;
+
+833
+¬gæags
+ =
+¬g
+[
+ªum
+].
+¬g_æags
+;
+
+834 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+835
+¬gæags
+ |ð
+AF_ARYOK
+;
+
+836
+¬gty³
+ =
+¬g
+[
+ªum
+].
+¬g_ty³
+ &
+A_MASK
+;
+
+837
+¬g±r
+ =
+¬g
+[
+ªum
+].
+¬g_±r
+;
+
+838
+max¬g
+ =
+ªum
+ = 1;
+
+839
+ =
+¬gÏ¡
+[0];
+
+840
+ -ð
+;
+
+841 
+»_ev®
+;
+
+843 
+O_COND_EXPR
+:
+
+844
+ªum
+ = (
+ `¡r_Œue
+(
+[1]) ? 2 : 3);
+
+845
+Ýty³
+ = (
+ªum
+ =ð2 ?
+O_ITEM2
+ :
+O_ITEM3
+);
+
+846
+¬gæags
+ =
+¬g
+[
+ªum
+].
+¬g_æags
+;
+
+847 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+848
+¬gæags
+ |ð
+AF_ARYOK
+;
+
+849
+¬gty³
+ =
+¬g
+[
+ªum
+].
+¬g_ty³
+ &
+A_MASK
+;
+
+850
+¬g±r
+ =
+¬g
+[
+ªum
+].
+¬g_±r
+;
+
+851
+max¬g
+ =
+ªum
+ = 1;
+
+852
+ =
+¬gÏ¡
+[0];
+
+853
+ -ð
+;
+
+854 
+»_ev®
+;
+
+855 
+O_COMMA
+:
+
+856 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+857 
+¬¿y_»tuº
+;
+
+858
+¡r
+ =
+[2];
+
+860 
+O_NEGATE
+:
+
+861
+v®ue
+ = -
+ `¡r_gnum
+(
+[1]);
+
+862 
+dÚum£t
+;
+
+863 
+O_NOT
+:
+
+864
+v®ue
+ = (è!
+ `¡r_Œue
+(
+[1]);
+
+865 
+dÚum£t
+;
+
+866 
+O_COMPLEMENT
+:
+
+867 ià(!
+§wvec
+ ||
+[1]->
+¡r_nok
+) {
+
+868 #iâdeà
+lšt
+
+
+869
+v®ue
+ = (è~
+ `U_L
+(
+ `¡r_gnum
+(
+[1]));
+
+871 
+dÚum£t
+;
+
+874
+ `STR_SSET
+(
+¡r
+,
+[1]);
+
+875
+tmps
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+876 
+ªum
+ =
+¡r
+->
+¡r_cur
+;‡num;‡num--,
+tmps
+++)
+
+877 *
+tmps
+ = ~*tmps;
+
+880 
+O_SELECT
+:
+
+881
+ `¡ab_fuÎÇme
+(
+¡r
+,
+defout¡ab
+);
+
+882 ià(
+max¬g
+ > 0) {
+
+883 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+884
+defout¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+886
+defout¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+887 ià(!
+ `¡ab_io
+(
+defout¡ab
+))
+
+888
+ `¡ab_io
+(
+defout¡ab
+èð
+ `¡io_Ãw
+();
+
+889
+curout¡ab
+ =
+defout¡ab
+;
+
+891
+ `STABSET
+(
+¡r
+);
+
+893 
+O_WRITE
+:
+
+894 ià(
+max¬g
+ == 0)
+
+895
+¡ab
+ =
+defout¡ab
+;
+
+896 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+) {
+
+897 ià(!(
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+))
+
+898
+¡ab
+ =
+defout¡ab
+;
+
+901
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+902 ià(!
+ `¡ab_io
+(
+¡ab
+)) {
+
+903
+ `¡r_£t
+(
+¡r
+,
+No
+);
+
+904
+ `STABSET
+(
+¡r
+);
+
+907
+curout¡ab
+ =
+¡ab
+;
+
+908
+ =
+ `¡ab_io
+(
+¡ab
+)->
+oå
+;
+
+909
+deb¬g
+ =
+¬g
+;
+
+910 ià(
+ `¡ab_io
+(
+¡ab
+)->
+fmt_¡ab
+)
+
+911
+fÜm
+ =
+ `¡ab_fÜm
+(
+ `¡ab_io
+(
+¡ab
+)->
+fmt_¡ab
+);
+
+913
+fÜm
+ =
+ `¡ab_fÜm
+(
+¡ab
+);
+
+914 ià(!
+fÜm
+ || !
+) {
+
+915 ià(
+dow¬n
+) {
+
+916 ià(
+fÜm
+)
+
+917
+ `w¬n
+("No format for filehandle");
+
+919 ià(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+)
+
+920
+ `w¬n
+("Filehandle only opened for input");
+
+922
+ `w¬n
+("Write on closed filehandle");
+
+925
+ `¡r_£t
+(
+¡r
+,
+No
+);
+
+926
+ `STABSET
+(
+¡r
+);
+
+929
+ `fÜm©
+(&
+ouŒec
+,
+fÜm
+,
+);
+
+930
+ `do_wr™e
+(&
+ouŒec
+,
+ `¡ab_io
+(
+¡ab
+),
+);
+
+931 ià(
+ `¡ab_io
+(
+¡ab
+)->
+æags
+ &
+IOF_FLUSH
+)
+
+932 ()
+ `fæush
+(
+);
+
+933
+ `¡r_£t
+(
+¡r
+,
+Yes
+);
+
+934
+ `STABSET
+(
+¡r
+);
+
+936 
+O_DBMOPEN
+:
+
+937 #ifdeà
+SOME_DBM
+
+
+938
+ªum
+ =
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+;
+
+939 ià(
+ªum
+ =ð
+A_WORD
+ ||‡num =ð
+A_STAB
+)
+
+940
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+942
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+943 ià(
+[3]->
+¡r_nok
+ || st[3]->
+¡r_pok
+)
+
+944
+ªum
+ = ()
+ `¡r_gnum
+(
+[3]);
+
+946
+ªum
+ = -1;
+
+947
+v®ue
+ = ()
+ `hdbmÝ’
+(
+ `¡ab_hash
+(
+¡ab
+),
+ `¡r_g‘
+(
+[2]),
+ªum
+);
+
+948 
+dÚum£t
+;
+
+950
+ `çl
+("No dbm or‚dbm onhis machine");
+
+952 
+O_DBMCLOSE
+:
+
+953 #ifdeà
+SOME_DBM
+
+
+954 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+955
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+957
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+958
+ `hdbmþo£
+(
+ `¡ab_hash
+(
+¡ab
+));
+
+959 
+§y_yes
+;
+
+961
+ `çl
+("No dbm or‚dbm onhis machine");
+
+963 
+O_OPEN
+:
+
+964 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+965
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+967
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+968
+tmps
+ =
+ `¡r_g‘
+(
+[2]);
+
+969 ià(
+ `do_Ý’
+(
+¡ab
+,
+tmps
+,
+[2]->
+¡r_cur
+)) {
+
+970
+v®ue
+ = ()
+fÜk´oûss
+;
+
+971
+ `¡ab_io
+(
+¡ab
+)->
+lšes
+ = 0;
+
+972 
+dÚum£t
+;
+
+974 ià(
+fÜk´oûss
+ == 0)
+
+975 
+§y_z”o
+;
+
+977 
+§y_undef
+;
+
+979 
+O_TRANS
+:
+
+980
+v®ue
+ = (è
+ `do_λs
+(
+¡r
+,
+¬g
+);
+
+981
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+982 
+dÚum£t
+;
+
+983 
+O_NTRANS
+:
+
+984
+ `¡r_£t
+(
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+,
+ `do_λs
+(
+¡r
+,¬gè=ð0 ?
+Yes
+ :
+No
+);
+
+985
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+987 
+O_CLOSE
+:
+
+988 ià(
+max¬g
+ == 0)
+
+989
+¡ab
+ =
+defout¡ab
+;
+
+990 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+991
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+993
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+994
+ `¡r_£t
+(
+¡r
+,
+ `do_þo£
+(
+¡ab
+,
+TRUE
+è?
+Yes
+ :
+No
+ );
+
+995
+ `STABSET
+(
+¡r
+);
+
+997 
+O_EACH
+:
+
+998
+ =
+ `do_—ch
+(
+¡r
+,
+ `¡ab_hash
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+),
+
+999
+gimme
+,
+¬gÏ¡
+);
+
+1000 
+¬¿y_»tuº
+;
+
+1001 
+O_VALUES
+:
+
+1002 
+O_KEYS
+:
+
+1003
+ =
+ `do_kv
+(
+¡r
+,
+ `¡ab_hash
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+),
+Ýty³
+,
+
+1004
+gimme
+,
+¬gÏ¡
+);
+
+1005 
+¬¿y_»tuº
+;
+
+1006 
+O_LARRAY
+:
+
+1007
+¡r
+->
+¡r_nok
+ = sŒ->
+¡r_pok
+ = 0;
+
+1008
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1009
+¡r
+->
+¡r_¡©e
+ =
+SS_ARY
+;
+
+1011 
+O_ARRAY
+:
+
+1012
+¬y
+ =
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+1013
+max¬g
+ =
+¬y
+->
+¬y_fžl
+ + 1;
+
+1014 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1015
+ =
+¬gÏ¡
+[0];
+
+1016
+ -ð
+;
+
+1017 ià(
+max¬g
+ > 0 &&
+ + max¬g >
+¡ack
+->
+¬y_max
+) {
+
+1018
+ `a¡Üe
+(
+¡ack
+,
+ +
+max¬g
+,
+NuΡr
+);
+
+1019
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1021
+ +ð
+;
+
+1022
+ `CÝy
+(
+¬y
+->
+¬y_¬¿y
+, &
+[1],
+max¬g
+,
+STR
+*);
+
+1023
+ +ð
+max¬g
+;
+
+1024 
+¬¿y_»tuº
+;
+
+1027
+v®ue
+ = ()
+max¬g
+;
+
+1028 
+dÚum£t
+;
+
+1030 
+O_AELEM
+:
+
+1031
+ªum
+ = (()
+ `¡r_gnum
+(
+[2])è-
+¬yba£
+;
+
+1032
+¡r
+ =
+ `aãtch
+(
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+),
+ªum
+,
+FALSE
+);
+
+1034 
+O_DELETE
+:
+
+1035
+tmp¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1036
+tmps
+ =
+ `¡r_g‘
+(
+[2]);
+
+1037
+¡r
+ =
+ `hd–‘e
+(
+ `¡ab_hash
+(
+tmp¡ab
+),
+tmps
+,
+[2]->
+¡r_cur
+);
+
+1038 ià(
+tmp¡ab
+ =ð
+’v¡ab
+)
+
+1039
+ `my_£‹nv
+(
+tmps
+,
+NuÎch
+);
+
+1040 ià(!
+¡r
+)
+
+1041 
+§y_undef
+;
+
+1043 
+O_LHASH
+:
+
+1044
+¡r
+->
+¡r_nok
+ = sŒ->
+¡r_pok
+ = 0;
+
+1045
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1046
+¡r
+->
+¡r_¡©e
+ =
+SS_HASH
+;
+
+1048 
+O_HASH
+:
+
+1049 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1050
+ =
+ `do_kv
+(
+¡r
+,
+ `¡ab_hash
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+),
+Ýty³
+,
+
+1051
+gimme
+,
+¬gÏ¡
+);
+
+1052 
+¬¿y_»tuº
+;
+
+1055
+tmp¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1056 ià(!
+ `¡ab_hash
+(
+tmp¡ab
+)->
+tbl_fžl
+)
+
+1057 
+§y_z”o
+;
+
+1058
+ `¥rštf
+(
+buf
+,"%d/%d",
+ `¡ab_hash
+(
+tmp¡ab
+)->
+tbl_fžl
+,
+
+1059
+ `¡ab_hash
+(
+tmp¡ab
+)->
+tbl_max
++1);
+
+1060
+ `¡r_£t
+(
+¡r
+,
+buf
+);
+
+1063 
+O_HELEM
+:
+
+1064
+tmp¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1065
+tmps
+ =
+ `¡r_g‘
+(
+[2]);
+
+1066
+¡r
+ =
+ `hãtch
+(
+ `¡ab_hash
+(
+tmp¡ab
+),
+tmps
+,
+[2]->
+¡r_cur
+,
+FALSE
+);
+
+1068 
+O_LAELEM
+:
+
+1069
+ªum
+ = (()
+ `¡r_gnum
+(
+[2])è-
+¬yba£
+;
+
+1070
+¡r
+ =
+ `aãtch
+(
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+),
+ªum
+,
+TRUE
+);
+
+1071 ià(!
+¡r
+ || sŒ =ð&
+¡r_undef
+)
+
+1072
+ `çl
+("Assignm’ˆtØnÚ-ü—bË v®ue, subsüˆ%d",
+ªum
+);
+
+1074 
+O_LHELEM
+:
+
+1075
+tmp¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1076
+tmps
+ =
+ `¡r_g‘
+(
+[2]);
+
+1077
+ªum
+ =
+[2]->
+¡r_cur
+;
+
+1078
+¡r
+ =
+ `hãtch
+(
+ `¡ab_hash
+(
+tmp¡ab
+),
+tmps
+,
+ªum
+,
+TRUE
+);
+
+1079 ià(!
+¡r
+ || sŒ =ð&
+¡r_undef
+)
+
+1080
+ `çl
+("Assignm’ˆtØnÚ-ü—bË v®ue, subsüˆ\"%s\"",
+tmps
+);
+
+1081 ià(
+tmp¡ab
+ =ð
+’v¡ab
+)
+
+1082
+ `¡r_magic
+(
+¡r
+,
+tmp¡ab
+, 'E',
+tmps
+,
+ªum
+);
+
+1084 ià(
+tmp¡ab
+ =ð
+sig¡ab
+)
+
+1085
+ `¡r_magic
+(
+¡r
+,
+tmp¡ab
+, 'S',
+tmps
+,
+ªum
+);
+
+1086 #ifdeà
+SOME_DBM
+
+
+1087 ià(
+ `¡ab_hash
+(
+tmp¡ab
+)->
+tbl_dbm
+)
+
+1088
+ `¡r_magic
+(
+¡r
+,
+tmp¡ab
+, 'D',
+tmps
+,
+ªum
+);
+
+1090 ià(
+³¾db
+ &&
+tmp¡ab
+ =ð
+DBlše
+)
+
+1091
+ `¡r_magic
+(
+¡r
+,
+tmp¡ab
+, 'L',
+tmps
+,
+ªum
+);
+
+1093 
+O_LSLICE
+:
+
+1094
+ªum
+ = 2;
+
+1095
+¬gty³
+ =
+FALSE
+;
+
+1096 
+do_¦iû_®»ady
+;
+
+1097 
+O_ASLICE
+:
+
+1098
+ªum
+ = 1;
+
+1099
+¬gty³
+ =
+FALSE
+;
+
+1100 
+do_¦iû_®»ady
+;
+
+1101 
+O_HSLICE
+:
+
+1102
+ªum
+ = 0;
+
+1103
+¬gty³
+ =
+FALSE
+;
+
+1104 
+do_¦iû_®»ady
+;
+
+1105 
+O_LASLICE
+:
+
+1106
+ªum
+ = 1;
+
+1107
+¬gty³
+ =
+TRUE
+;
+
+1108 
+do_¦iû_®»ady
+;
+
+1109 
+O_LHSLICE
+:
+
+1110
+ªum
+ = 0;
+
+1111
+¬gty³
+ =
+TRUE
+;
+
+1112
+do_¦iû_®»ady
+:
+
+1113
+ =
+ `do_¦iû
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+,
+¡r
+,
+ªum
+,
+¬gty³
+,
+
+1114
+gimme
+,
+¬gÏ¡
+);
+
+1115 
+¬¿y_»tuº
+;
+
+1116 
+O_SPLICE
+:
+
+1117
+ =
+ `do_¥liû
+(
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+),
+gimme
+,
+¬gÏ¡
+);
+
+1118 
+¬¿y_»tuº
+;
+
+1119 
+O_PUSH
+:
+
+1120 ià(
+¬gÏ¡
+[2] -‡rglast[1] != 1)
+
+1121
+¡r
+ =
+ `do_push
+(
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+),
+¬gÏ¡
+);
+
+1123
+¡r
+ =
+ `SŒ_Ãw
+(51,0);
+
+1124
+ `¡r_s£t
+(
+¡r
+,
+[2]);
+
+1125 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+),
+¡r
+);
+
+1128 
+O_POP
+:
+
+1129
+¡r
+ =
+ `­Ý
+(
+¬y
+ =
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+));
+
+1130 
+¡©iÿliz©iÚ
+;
+
+1131 
+O_SHIFT
+:
+
+1132
+¡r
+ =
+ `ashiá
+(
+¬y
+ =
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+));
+
+1133
+¡©iÿliz©iÚ
+:
+
+1134 ià(!
+¡r
+)
+
+1135 
+§y_undef
+;
+
+1136 ià(
+¬y
+->
+¬y_æags
+ &
+ARF_REAL
+)
+
+1137 ()
+ `¡r_2mÜl
+(
+¡r
+);
+
+1139 
+O_UNPACK
+:
+
+1140
+ =
+ `do_uÅack
+(
+¡r
+,
+gimme
+,
+¬gÏ¡
+);
+
+1141 
+¬¿y_»tuº
+;
+
+1142 
+O_SPLIT
+:
+
+1143
+v®ue
+ =
+ `¡r_gnum
+(
+[3]);
+
+1144
+ =
+ `do_¥l™
+(
+¡r
+,
+¬g
+[2].
+¬g_±r
+.
+¬g_¥©
+, ()
+v®ue
+,
+
+1145
+gimme
+,
+¬gÏ¡
+);
+
+1146 
+¬¿y_»tuº
+;
+
+1147 
+O_LENGTH
+:
+
+1148 ià(
+max¬g
+ < 1)
+
+1149
+v®ue
+ = ()
+ `¡r_Ën
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1151
+v®ue
+ = ()
+ `¡r_Ën
+(
+[1]);
+
+1152 
+dÚum£t
+;
+
+1153 
+O_SPRINTF
+:
+
+1154
+ `do_¥rštf
+(
+¡r
+,
+-
+¬gÏ¡
+[0],
++1);
+
+1156 
+O_SUBSTR
+:
+
+1157
+ªum
+ = (()
+ `¡r_gnum
+(
+[2])è-
+¬yba£
+;
+
+1158
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1159 ià(
+¬gty³
+ = (
+¡r
+ =ð
+[1]))
+
+1160
+¡r
+ =
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+;
+
+1161 ià(
+ªum
+ < 0)
+
+1162
+ªum
+ +ð
+[1]->
+¡r_cur
+ +
+¬yba£
+;
+
+1163 ià(
+ªum
+ < 0 ||‡num >
+[1]->
+¡r_cur
+)
+
+1164
+ `¡r_n£t
+(
+¡r
+,"",0);
+
+1166
+Ýty³
+ =
+max¬g
+ < 3 ?
+[1]->
+¡r_cur
+ : ()
+ `¡r_gnum
+(st[3]);
+
+1167 ià(
+Ýty³
+ < 0)
+
+1168
+Ýty³
+ = 0;
+
+1169
+tmps
+ +ð
+ªum
+;
+
+1170
+ªum
+ =
+[1]->
+¡r_cur
+ -‡num;
+
+1171 ià(
+ªum
+ >
+Ýty³
+)
+
+1172
+ªum
+ =
+Ýty³
+;
+
+1173
+ `¡r_n£t
+(
+¡r
+,
+tmps
+,
+ªum
+);
+
+1174 ià(
+¬gty³
+) {
+
+1175
+l¡r
+ = (
+l¡ršg
+*)
+¡r
+;
+
+1176
+¡r
+->
+¡r_magic
+ =
+[1];
+
+1177
+[1]->
+¡r_¿»
+ = 's';
+
+1178
+l¡r
+->
+l¡r_off£t
+ =
+tmps
+ -
+ `¡r_g‘
+(
+[1]);
+
+1179
+l¡r
+->
+l¡r_Ën
+ =
+ªum
+;
+
+1183 
+O_PACK
+:
+
+1184 ()
+ `do_·ck
+(
+¡r
+,
+¬gÏ¡
+);
+
+1186 
+O_GREP
+:
+
+1187
+ =
+ `do_g»p
+(
+¬g
+,
+¡r
+,
+gimme
+,
+¬gÏ¡
+);
+
+1188 
+¬¿y_»tuº
+;
+
+1189 
+O_JOIN
+:
+
+1190
+ `do_još
+(
+¡r
+,
+¬gÏ¡
+);
+
+1192 
+O_SLT
+:
+
+1193
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1194
+v®ue
+ = (è(
+ `¡r_cmp
+(
+[1],st[2]) < 0);
+
+1195 
+dÚum£t
+;
+
+1196 
+O_SGT
+:
+
+1197
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1198
+v®ue
+ = (è(
+ `¡r_cmp
+(
+[1],st[2]) > 0);
+
+1199 
+dÚum£t
+;
+
+1200 
+O_SLE
+:
+
+1201
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1202
+v®ue
+ = (è(
+ `¡r_cmp
+(
+[1],st[2]) <= 0);
+
+1203 
+dÚum£t
+;
+
+1204 
+O_SGE
+:
+
+1205
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1206
+v®ue
+ = (è(
+ `¡r_cmp
+(
+[1],st[2]) >= 0);
+
+1207 
+dÚum£t
+;
+
+1208 
+O_SEQ
+:
+
+1209
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1210
+v®ue
+ = (è
+ `¡r_eq
+(
+[1],st[2]);
+
+1211 
+dÚum£t
+;
+
+1212 
+O_SNE
+:
+
+1213
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1214
+v®ue
+ = (è!
+ `¡r_eq
+(
+[1],st[2]);
+
+1215 
+dÚum£t
+;
+
+1216 
+O_SCMP
+:
+
+1217
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1218
+v®ue
+ = (è
+ `¡r_cmp
+(
+[1],st[2]);
+
+1219 
+dÚum£t
+;
+
+1220 
+O_SUBR
+:
+
+1221
+ =
+ `do_subr
+(
+¬g
+,
+gimme
+,
+¬gÏ¡
+);
+
+1222
+ =
+¡ack
+->
+¬y_¬¿y
+ +
+¬gÏ¡
+[0];
+
+1223 
+¬¿y_»tuº
+;
+
+1224 
+O_DBSUBR
+:
+
+1225
+ =
+ `do_subr
+(
+¬g
+,
+gimme
+,
+¬gÏ¡
+);
+
+1226
+ =
+¡ack
+->
+¬y_¬¿y
+ +
+¬gÏ¡
+[0];
+
+1227 
+¬¿y_»tuº
+;
+
+1228 
+O_CALLER
+:
+
+1229
+ =
+ `do_ÿΔ
+(
+¬g
+,
+max¬g
+,
+gimme
+,
+¬gÏ¡
+);
+
+1230
+ =
+¡ack
+->
+¬y_¬¿y
+ +
+¬gÏ¡
+[0];
+
+1231 
+¬¿y_»tuº
+;
+
+1232 
+O_SORT
+:
+
+1233 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+1234
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1236
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+1237
+ =
+ `do_sÜt
+(
+¡r
+,
+¡ab
+,
+
+1238
+gimme
+,
+¬gÏ¡
+);
+
+1239 
+¬¿y_»tuº
+;
+
+1240 
+O_REVERSE
+:
+
+1241 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+1242
+ =
+ `do_»v”£
+(
+¬gÏ¡
+);
+
+1244
+ =
+ `do_¤ev”£
+(
+¡r
+,
+¬gÏ¡
+);
+
+1245 
+¬¿y_»tuº
+;
+
+1246 
+O_WARN
+:
+
+1247 ià(
+¬gÏ¡
+[2] -‡rglast[1] != 1) {
+
+1248
+ `do_još
+(
+¡r
+,
+¬gÏ¡
+);
+
+1249
+tmps
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+1252
+¡r
+ =
+[2];
+
+1253
+tmps
+ =
+ `¡r_g‘
+(
+[2]);
+
+1255 ià(!
+tmps
+ || !*tmps)
+
+1256
+tmps
+ = "Warning: something's wrong";
+
+1257
+ `w¬n
+("%s",
+tmps
+);
+
+1258 
+§y_yes
+;
+
+1259 
+O_DIE
+:
+
+1260 ià(
+¬gÏ¡
+[2] -‡rglast[1] != 1) {
+
+1261
+ `do_još
+(
+¡r
+,
+¬gÏ¡
+);
+
+1262
+tmps
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+1265
+¡r
+ =
+[2];
+
+1266
+tmps
+ =
+ `¡r_g‘
+(
+[2]);
+
+1268 ià(!
+tmps
+ || !*tmps)
+
+1269
+tmps
+ = "Died";
+
+1270
+ `çl
+("%s",
+tmps
+);
+
+1271 
+§y_z”o
+;
+
+1272 
+O_PRTF
+:
+
+1273 
+O_PRINT
+:
+
+1274 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+1275
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1277
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+1278 ià(!
+¡ab
+)
+
+1279
+¡ab
+ =
+defout¡ab
+;
+
+1280 ià(!
+ `¡ab_io
+(
+¡ab
+)) {
+
+1281 ià(
+dow¬n
+)
+
+1282
+ `w¬n
+("Filehandle‚ever opened");
+
+1283 
+§y_z”o
+;
+
+1285 ià(!(
+ =
+ `¡ab_io
+(
+¡ab
+)->
+oå
+)) {
+
+1286 ià(
+dow¬n
+) {
+
+1287 ià(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+)
+
+1288
+ `w¬n
+("Filehandle opened only for input");
+
+1290
+ `w¬n
+("Print on closed filehandle");
+
+1292 
+§y_z”o
+;
+
+1295 ià(
+Ýty³
+ =ð
+O_PRTF
+ ||
+¬gÏ¡
+[2] -‡rglast[1] != 1)
+
+1296
+v®ue
+ = ()
+ `do_­ršt
+(
+¬g
+,
+,
+¬gÏ¡
+);
+
+1298
+v®ue
+ = ()
+ `do_´št
+(
+[2],
+);
+
+1299 ià(
+ܦ’
+ &&
+Ýty³
+ =ð
+O_PRINT
+)
+
+1300 ià(
+ `fwr™e
+(
+Üs
+, 1,
+ܦ’
+,
+) == 0)
+
+1301 
+§y_z”o
+;
+
+1303 ià(
+ `¡ab_io
+(
+¡ab
+)->
+æags
+ &
+IOF_FLUSH
+)
+
+1304 ià(
+ `fæush
+(
+è=ð
+EOF
+)
+
+1305 
+§y_z”o
+;
+
+1307 
+dÚum£t
+;
+
+1308 
+O_CHDIR
+:
+
+1309 ià(
+max¬g
+ < 1)
+
+1310
+tmps
+ =
+NuÎch
+;
+
+1312
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1313 ià(!
+tmps
+ || !*tmps) {
+
+1314
+tmp¡r
+ =
+ `hãtch
+(
+ `¡ab_hash
+(
+’v¡ab
+),"HOME",4,
+FALSE
+);
+
+1315
+tmps
+ =
+ `¡r_g‘
+(
+tmp¡r
+);
+
+1317 ià(!
+tmps
+ || !*tmps) {
+
+1318
+tmp¡r
+ =
+ `hãtch
+(
+ `¡ab_hash
+(
+’v¡ab
+),"LOGDIR",6,
+FALSE
+);
+
+1319
+tmps
+ =
+ `¡r_g‘
+(
+tmp¡r
+);
+
+1321 #ifdeà
+TAINT
+
+
+1322
+ `šrÝ”
+("Insecure dependency in chdir");
+
+1324
+v®ue
+ = ()(
+ `chdœ
+(
+tmps
+) >= 0);
+
+1325 
+dÚum£t
+;
+
+1326 
+O_EXIT
+:
+
+1327 ià(
+max¬g
+ < 1)
+
+1328
+ªum
+ = 0;
+
+1330
+ªum
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+1331
+ `ex™
+(
+ªum
+);
+
+1332 
+§y_z”o
+;
+
+1333 
+O_RESET
+:
+
+1334 ià(
+max¬g
+ < 1)
+
+1335
+tmps
+ = "";
+
+1337
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1338
+ `¡r_»£t
+(
+tmps
+,
+curcmd
+->
+c_¡ash
+);
+
+1339
+v®ue
+ = 1.0;
+
+1340 
+dÚum£t
+;
+
+1341 
+O_LIST
+:
+
+1342 ià(
+gimme
+ =ð
+G_ARRAY
+)
+
+1343 
+¬¿y_»tuº
+;
+
+1344 ià(
+max¬g
+ > 0)
+
+1345
+¡r
+ =
+[
+ -
+¬gÏ¡
+[0]];
+
+1347
+¡r
+ = &
+¡r_undef
+;
+
+1349 
+O_EOF
+:
+
+1350 ià(
+max¬g
+ <= 0)
+
+1351
+¡ab
+ =
+Ï¡_š_¡ab
+;
+
+1352 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+1353
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1355
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+1356
+ `¡r_£t
+(
+¡r
+,
+ `do_eof
+(
+¡ab
+è?
+Yes
+ :
+No
+);
+
+1357
+ `STABSET
+(
+¡r
+);
+
+1359 
+O_GETC
+:
+
+1360 ià(
+max¬g
+ <= 0)
+
+1361
+¡ab
+ =
+¡dš¡ab
+;
+
+1362 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+1363
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1365
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+1366 ià(!
+¡ab
+)
+
+1367
+¡ab
+ =
+¬gv¡ab
+;
+
+1368 ià(!
+¡ab
+ ||
+ `do_eof
+(stab))
+
+1369 
+§y_undef
+;
+
+1371 #ifdeà
+TAINT
+
+
+1372
+š‹d
+ = 1;
+
+1374
+ `¡r_£t
+(
+¡r
+," ");
+
+1375 *
+¡r
+->
+¡r_±r
+ =
+ `g‘c
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+);
+
+1377
+ `STABSET
+(
+¡r
+);
+
+1379 
+O_TELL
+:
+
+1380 ià(
+max¬g
+ <= 0)
+
+1381
+¡ab
+ =
+Ï¡_š_¡ab
+;
+
+1382 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+1383
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1385
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+1386 #iâdeà
+lšt
+
+
+1387
+v®ue
+ = ()
+ `do_‹Î
+(
+¡ab
+);
+
+1389 ()
+ `do_‹Î
+(
+¡ab
+);
+
+1391 
+dÚum£t
+;
+
+1392 
+O_RECV
+:
+
+1393 
+O_READ
+:
+
+1394 
+O_SYSREAD
+:
+
+1395 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+1396
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1398
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+1399
+tmps
+ =
+ `¡r_g‘
+(
+[2]);
+
+1400
+ªum
+ = ()
+ `¡r_gnum
+(
+[3]);
+
+1401
+Ӽo
+ = 0;
+
+1402
+max¬g
+ =
+ -
+¬gÏ¡
+[0];
+
+1403 ià(
+max¬g
+ > 4)
+
+1404
+ `w¬n
+("Too many‡rgs on„ead");
+
+1405 ià(
+max¬g
+ == 4)
+
+1406
+max¬g
+ = ()
+ `¡r_gnum
+(
+[4]);
+
+1408
+max¬g
+ = 0;
+
+1409 ià(!
+ `¡ab_io
+(
+¡ab
+è|| !¡ab_io(¡ab)->
+iå
+)
+
+1410 
+§y_undef
+;
+
+1411 #ifdeà
+HAS_SOCKET
+
+
+1412 ià(
+Ýty³
+ =ð
+O_RECV
+) {
+
+1413
+¬gty³
+ = 
+buf
+;
+
+1414
+ `STR_GROW
+(
+[2],
+ªum
++1), (
+tmps
+ =
+ `¡r_g‘
+(st[2]));
+
+1415
+ªum
+ =
+ `»cväom
+(
+ `fž’o
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+),
+tmps
+,‡num,
+max¬g
+,
+
+1416
+buf
+, &
+¬gty³
+);
+
+1417 ià(
+ªum
+ >= 0) {
+
+1418
+[2]->
+¡r_cur
+ =
+ªum
+;
+
+1419
+[2]->
+¡r_±r
+[
+ªum
+] = '\0';
+
+1420
+ `¡r_n£t
+(
+¡r
+,
+buf
+,
+¬gty³
+);
+
+1423
+ `¡r_s£t
+(
+¡r
+,&
+¡r_undef
+);
+
+1427 ià(
+Ýty³
+ =ð
+O_RECV
+)
+
+1428 
+badsock
+;
+
+1430
+ `STR_GROW
+(
+[2],
+ªum
++
+max¬g
++1), (
+tmps
+ =
+ `¡r_g‘
+(st[2]));
+
+1431 #ifdeà
+HAS_SOCKET
+
+
+1432 ià(
+ `¡ab_io
+(
+¡ab
+)->
+ty³
+ == 's') {
+
+1433
+¬gty³
+ = 
+buf
+;
+
+1434
+ªum
+ =
+ `»cväom
+(
+ `fž’o
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+),
+tmps
++
+max¬g
+,‡num, 0,
+
+1435
+buf
+, &
+¬gty³
+);
+
+1439 ià(
+Ýty³
+ =ð
+O_SYSREAD
+) {
+
+1440
+ªum
+ =
+ `»ad
+(
+ `fž’o
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+),
+tmps
++
+max¬g
+,‡num);
+
+1443
+ªum
+ =
+ `ä—d
+(
+tmps
++
+max¬g
+, 1,‡num,
+ `¡ab_io
+(
+¡ab
+)->
+iå
+);
+
+1444 ià(
+ªum
+ < 0)
+
+1445 
+§y_undef
+;
+
+1446
+[2]->
+¡r_cur
+ =
+ªum
++
+max¬g
+;
+
+1447
+[2]->
+¡r_±r
+[
+ªum
++
+max¬g
+] = '\0';
+
+1448
+v®ue
+ = ()
+ªum
+;
+
+1449 
+dÚum£t
+;
+
+1450 
+O_SYSWRITE
+:
+
+1451 
+O_SEND
+:
+
+1452 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+1453
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1455
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+1456
+tmps
+ =
+ `¡r_g‘
+(
+[2]);
+
+1457
+ªum
+ = ()
+ `¡r_gnum
+(
+[3]);
+
+1458
+Ӽo
+ = 0;
+
+1459
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+);
+
+1460
+max¬g
+ =
+ -
+¬gÏ¡
+[0];
+
+1461 ià(!
+¡io
+ || !¡io->
+iå
+) {
+
+1462
+ªum
+ = -1;
+
+1463 ià(
+dow¬n
+) {
+
+1464 ià(
+Ýty³
+ =ð
+O_SYSWRITE
+)
+
+1465
+ `w¬n
+("Syswrite on closed filehandle");
+
+1467
+ `w¬n
+("Send on closed socket");
+
+1470 ià(
+Ýty³
+ =ð
+O_SYSWRITE
+) {
+
+1471 ià(
+max¬g
+ > 4)
+
+1472
+ `w¬n
+("Too many‡rgs on syswrite");
+
+1473 ià(
+max¬g
+ == 4)
+
+1474
+Ýty³
+ = ()
+ `¡r_gnum
+(
+[4]);
+
+1476
+Ýty³
+ = 0;
+
+1477
+ªum
+ =
+ `wr™e
+(
+ `fž’o
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+),
+tmps
++
+Ýty³
+,‡num);
+
+1479 #ifdeà
+HAS_SOCKET
+
+
+1480 ià(
+max¬g
+ >= 4) {
+
+1481 ià(
+max¬g
+ > 4)
+
+1482
+ `w¬n
+("Too many‡rgs on send");
+
+1483
+tmps2
+ =
+ `¡r_g‘
+(
+[4]);
+
+1484
+ªum
+ =
+ `£ndto
+(
+ `fž’o
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+),
+tmps
+,
+[2]->
+¡r_cur
+,
+
+1485
+ªum
+,
+tmps2
+,
+[4]->
+¡r_cur
+);
+
+1488
+ªum
+ =
+ `£nd
+(
+ `fž’o
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+),
+tmps
+,
+[2]->
+¡r_cur
+,‡num);
+
+1491 
+badsock
+;
+
+1493 ià(
+ªum
+ < 0)
+
+1494 
+§y_undef
+;
+
+1495
+v®ue
+ = ()
+ªum
+;
+
+1496 
+dÚum£t
+;
+
+1497 
+O_SEEK
+:
+
+1498 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+1499
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+1501
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+1502
+v®ue
+ =
+ `¡r_gnum
+(
+[2]);
+
+1503
+ `¡r_£t
+(
+¡r
+,
+ `do_£ek
+(
+¡ab
+,
+
+1504 ()
+v®ue
+, ()
+ `¡r_gnum
+(
+[3]èè?
+Yes
+ :
+No
+);
+
+1505
+ `STABSET
+(
+¡r
+);
+
+1507 
+O_RETURN
+:
+
+1508
+tmps
+ = "_SUB_";
+
+1509
+Ýty³
+ =
+O_LAST
+;
+
+1510 ià(
+curcsv
+ && curcsv->
+wª¼ay
+ =ð
+G_ARRAY
+) {
+
+1511
+Ï¡»t¡r
+ =
+NuΡr
+;
+
+1512
+Ï¡¥ba£
+ =
+¬gÏ¡
+[1];
+
+1513
+Ï¡size
+ =
+¬gÏ¡
+[2] -‡rglast[1];
+
+1516
+Ï¡»t¡r
+ =
+ `¡r_mÜl
+(
+[
+¬gÏ¡
+[2] -‡rglast[0]]);
+
+1517 
+dÝÝ
+;
+
+1518 
+O_REDO
+:
+
+1519 
+O_NEXT
+:
+
+1520 
+O_LAST
+:
+
+1521 ià(
+max¬g
+ > 0) {
+
+1522
+tmps
+ =
+ `¡r_g‘
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+);
+
+1523
+dÝÝ
+:
+
+1524 
+loÝ_±r
+ >ð0 && (!
+loÝ_¡ack
+[loÝ_±r].
+loÝ_Ïb–
+ ||
+
+1525
+ `¡rNE
+(
+tmps
+,
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+) )) {
+
+1526 #ifdeà
+DEBUGGING
+
+
+1527 ià(
+debug
+ & 4) {
+
+1528
+ `deb
+("(Skpšg†ab– #%d %s)\n",
+loÝ_±r
+,
+
+1529
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+);
+
+1532
+loÝ_±r
+--;
+
+1534 #ifdeà
+DEBUGGING
+
+
+1535 ià(
+debug
+ & 4) {
+
+1536
+ `deb
+("(Found†ab– #%d %s)\n",
+loÝ_±r
+,
+
+1537
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+);
+
+1541 ià(
+loÝ_±r
+ < 0) {
+
+1542 ià(
+tmps
+ &&
+ `¡rEQ
+(tmps, "_SUB_"))
+
+1543
+ `çl
+("Can't„eturn outside‡ subroutine");
+
+1544
+ `çl
+("Bad†ab–: %s",
+max¬g
+ > 0 ?
+tmps
+ : "<null>");
+
+1546 ià(!
+Ï¡»t¡r
+ &&
+Ýty³
+ =ð
+O_LAST
+ &&
+Ï¡size
+) {
+
+1547
+ -ð
+¬gÏ¡
+[0];
+
+1548
+ +ð
+Ï¡¥ba£
+ + 1;
+
+1549
+Ýty³
+ =
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_¥
+ -
+Ï¡¥ba£
+;
+
+1550 ià(
+Ýty³
+) {
+
+1551 
+ªum
+ =
+Ï¡size
+;‡num > 0;‡num--,
+++)
+
+1552
+[
+Ýty³
+] =
+ `¡r_mÜl
+(st[0]);
+
+1554
+ `lÚgjmp
+(
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_’v
+,
+O_LAST
+);
+
+1556
+ `lÚgjmp
+(
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_’v
+,
+Ýty³
+);
+
+1557 
+O_DUMP
+:
+
+1558 
+O_GOTO
+:
+
+1559
+gÙo_rg
+ =
+ `¡r_g‘
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+);
+
+1560 ià(!*
+gÙo_rg
+)
+
+1561
+gÙo_rg
+ =
+NuÎch
+;
+
+1562 ià(
+Ýty³
+ =ð
+O_DUMP
+) {
+
+1563
+do_undump
+ = 1;
+
+1564
+ `my_uÃxec
+();
+
+1566
+ `lÚgjmp
+(
+tÝ_’v
+, 1);
+
+1567 
+O_INDEX
+:
+
+1568
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1569 ià(
+max¬g
+ < 3)
+
+1570
+ªum
+ = 0;
+
+1572
+ªum
+ = (è
+ `¡r_gnum
+(
+[3]è-
+¬yba£
+;
+
+1573 ià(
+ªum
+ < 0)
+
+1574
+ªum
+ = 0;
+
+1575 ià(
+ªum
+ >
+[1]->
+¡r_cur
+)
+
+1576
+ªum
+ =
+[1]->
+¡r_cur
+;
+
+1578 #iâdeà
+lšt
+
+
+1579 ià(!(
+tmps2
+ =
+ `fbmš¡r
+((*)
+tmps
+ +
+ªum
+,
+
+1580 (*)
+tmps
+ +
+[1]->
+¡r_cur
+, st[2])))
+
+1582 ià(
+tmps2
+ =
+ `fbmš¡r
+(
+ `NuÎ
+(*),NuÎ(*),
+NuΡr
+))
+
+1584
+v®ue
+ = ()(-1 +
+¬yba£
+);
+
+1586
+v®ue
+ = ()(
+tmps2
+ -
+tmps
+ +
+¬yba£
+);
+
+1587 
+dÚum£t
+;
+
+1588 
+O_RINDEX
+:
+
+1589
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1590
+tmps2
+ =
+ `¡r_g‘
+(
+[2]);
+
+1591 ià(
+max¬g
+ < 3)
+
+1592
+ªum
+ =
+[1]->
+¡r_cur
+;
+
+1594
+ªum
+ = (è
+ `¡r_gnum
+(
+[3]è-
+¬yba£
+ + st[2]->
+¡r_cur
+;
+
+1595 ià(
+ªum
+ < 0)
+
+1596
+ªum
+ = 0;
+
+1597 ià(
+ªum
+ >
+[1]->
+¡r_cur
+)
+
+1598
+ªum
+ =
+[1]->
+¡r_cur
+;
+
+1600 #iâdeà
+lšt
+
+
+1601 ià(!(
+tmps2
+ =
+ `ºš¡r
+(
+tmps
+,mp +
+ªum
+,
+
+1602
+tmps2
+,mps2 +
+[2]->
+¡r_cur
+)))
+
+1604 ià(
+tmps2
+ =
+ `ºš¡r
+(
+NuÎch
+,Nullch,Nullch,Nullch))
+
+1606
+v®ue
+ = ()(-1 +
+¬yba£
+);
+
+1608
+v®ue
+ = ()(
+tmps2
+ -
+tmps
+ +
+¬yba£
+);
+
+1609 
+dÚum£t
+;
+
+1610 
+O_TIME
+:
+
+1611 #iâdeà
+lšt
+
+
+1612
+v®ue
+ = (è
+ `time
+(
+ `NuÎ
+(*));
+
+1614 
+dÚum£t
+;
+
+1615 
+O_TMS
+:
+
+1616
+ =
+ `do_tms
+(
+¡r
+,
+gimme
+,
+¬gÏ¡
+);
+
+1617 
+¬¿y_»tuº
+;
+
+1618 
+O_LOCALTIME
+:
+
+1619 ià(
+max¬g
+ < 1)
+
+1620 ()
+ `time
+(&
+wh’
+);
+
+1622
+wh’
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+1623
+ =
+ `do_time
+(
+¡r
+,
+ `loÿÉime
+(&
+wh’
+),
+
+1624
+gimme
+,
+¬gÏ¡
+);
+
+1625 
+¬¿y_»tuº
+;
+
+1626 
+O_GMTIME
+:
+
+1627 ià(
+max¬g
+ < 1)
+
+1628 ()
+ `time
+(&
+wh’
+);
+
+1630
+wh’
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+1631
+ =
+ `do_time
+(
+¡r
+,
+ `gmtime
+(&
+wh’
+),
+
+1632
+gimme
+,
+¬gÏ¡
+);
+
+1633 
+¬¿y_»tuº
+;
+
+1634 
+O_TRUNCATE
+:
+
+1635
+ =
+ `do_Œunÿ‹
+(
+¡r
+,
+¬g
+,
+
+1636
+gimme
+,
+¬gÏ¡
+);
+
+1637 
+¬¿y_»tuº
+;
+
+1638 
+O_LSTAT
+:
+
+1639 
+O_STAT
+:
+
+1640
+ =
+ `do_¡©
+(
+¡r
+,
+¬g
+,
+
+1641
+gimme
+,
+¬gÏ¡
+);
+
+1642 
+¬¿y_»tuº
+;
+
+1643 
+O_CRYPT
+:
+
+1644 #ifdeà
+HAS_CRYPT
+
+
+1645
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1646 #ifdeà
+FCRYPT
+
+
+1647
+ `¡r_£t
+(
+¡r
+,
+ `füy±
+(
+tmps
+,
+ `¡r_g‘
+(
+[2])));
+
+1649
+ `¡r_£t
+(
+¡r
+,
+ `üy±
+(
+tmps
+,
+ `¡r_g‘
+(
+[2])));
+
+1652
+ `çl
+(
+
+1656 
+O_ATAN2
+:
+
+1657
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+1658
+v®ue
+ =
+ `©ª2
+(v®ue,
+ `¡r_gnum
+(
+[2]));
+
+1659 
+dÚum£t
+;
+
+1660 
+O_SIN
+:
+
+1661 ià(
+max¬g
+ < 1)
+
+1662
+v®ue
+ =
+ `¡r_gnum
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1664
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+1665
+v®ue
+ =
+ `sš
+(value);
+
+1666 
+dÚum£t
+;
+
+1667 
+O_COS
+:
+
+1668 ià(
+max¬g
+ < 1)
+
+1669
+v®ue
+ =
+ `¡r_gnum
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1671
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+1672
+v®ue
+ =
+ `cos
+(value);
+
+1673 
+dÚum£t
+;
+
+1674 
+O_RAND
+:
+
+1675 ià(
+max¬g
+ < 1)
+
+1676
+v®ue
+ = 1.0;
+
+1678
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+1679 ià(
+v®ue
+ == 0.0)
+
+1680
+v®ue
+ = 1.0;
+
+1681 #ià
+RANDBITS
+ == 31
+
+1682
+v®ue
+ =
+ `¿nd
+() * value / 2147483648.0;
+
+1684 #ià
+RANDBITS
+ == 16
+
+1685
+v®ue
+ =
+ `¿nd
+() * value / 65536.0;
+
+1687 #ià
+RANDBITS
+ == 15
+
+1688
+v®ue
+ =
+ `¿nd
+() * value / 32768.0;
+
+1690
+v®ue
+ =
+ `¿nd
+(è* v®u/ ()((()1è<<
+RANDBITS
+);
+
+1694 
+dÚum£t
+;
+
+1695 
+O_SRAND
+:
+
+1696 ià(
+max¬g
+ < 1) {
+
+1697 ()
+ `time
+(&
+wh’
+);
+
+1698
+ªum
+ =
+wh’
+;
+
+1701
+ªum
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+1702 ()
+ `¤ªd
+(
+ªum
+);
+
+1703 
+§y_yes
+;
+
+1704 
+O_EXP
+:
+
+1705 ià(
+max¬g
+ < 1)
+
+1706
+v®ue
+ =
+ `¡r_gnum
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1708
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+1709
+v®ue
+ =
+ `exp
+(value);
+
+1710 
+dÚum£t
+;
+
+1711 
+O_LOG
+:
+
+1712 ià(
+max¬g
+ < 1)
+
+1713
+v®ue
+ =
+ `¡r_gnum
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1715
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+1716 ià(
+v®ue
+ <= 0.0)
+
+1717
+ `çl
+("Cª'ˆklog oà%g\n",
+v®ue
+);
+
+1718
+v®ue
+ =
+ `log
+(value);
+
+1719 
+dÚum£t
+;
+
+1720 
+O_SQRT
+:
+
+1721 ià(
+max¬g
+ < 1)
+
+1722
+v®ue
+ =
+ `¡r_gnum
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1724
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+1725 ià(
+v®ue
+ < 0.0)
+
+1726
+ `çl
+("Cª'ˆksq¹ oà%g\n",
+v®ue
+);
+
+1727
+v®ue
+ =
+ `sq¹
+(value);
+
+1728 
+dÚum£t
+;
+
+1729 
+O_INT
+:
+
+1730 ià(
+max¬g
+ < 1)
+
+1731
+v®ue
+ =
+ `¡r_gnum
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1733
+v®ue
+ =
+ `¡r_gnum
+(
+[1]);
+
+1734 ià(
+v®ue
+ >= 0.0)
+
+1735 ()
+ `modf
+(
+v®ue
+,&value);
+
+1737 ()
+ `modf
+(-
+v®ue
+,&value);
+
+1738
+v®ue
+ = -value;
+
+1740 
+dÚum£t
+;
+
+1741 
+O_ORD
+:
+
+1742 ià(
+max¬g
+ < 1)
+
+1743
+tmps
+ =
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1745
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1746 #iâdeà
+I286
+
+
+1747
+v®ue
+ = (è(*
+tmps
+ & 255);
+
+1749
+ªum
+ = (è*
+tmps
+;
+
+1750
+v®ue
+ = (è(
+ªum
+ & 255);
+
+1752 
+dÚum£t
+;
+
+1753 
+O_ALARM
+:
+
+1754 #ifdeà
+HAS_ALARM
+
+
+1755 ià(
+max¬g
+ < 1)
+
+1756
+tmps
+ =
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1758
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1759 ià(!
+tmps
+)
+
+1760
+tmps
+ = "0";
+
+1761
+ªum
+ =
+ `®¬m
+(()
+ `©oi
+(
+tmps
+));
+
+1762 ià(
+ªum
+ < 0)
+
+1763 
+§y_undef
+;
+
+1764
+v®ue
+ = ()
+ªum
+;
+
+1765 
+dÚum£t
+;
+
+1767
+ `çl
+("Unsupported function‡larm");
+
+1770 
+O_SLEEP
+:
+
+1771 ià(
+max¬g
+ < 1)
+
+1772
+tmps
+ =
+NuÎch
+;
+
+1774
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1775 ()
+ `time
+(&
+wh’
+);
+
+1776 ià(!
+tmps
+ || !*tmps)
+
+1777
+ `¦“p
+((32767<<16)+32767);
+
+1779
+ `¦“p
+(()
+ `©oi
+(
+tmps
+));
+
+1780 #iâdeà
+lšt
+
+
+1781
+v®ue
+ = ()
+wh’
+;
+
+1782 ()
+ `time
+(&
+wh’
+);
+
+1783
+v®ue
+ = (()
+wh’
+) - value;
+
+1785 
+dÚum£t
+;
+
+1786 
+O_RANGE
+:
+
+1787
+ =
+ `do_¿nge
+(
+gimme
+,
+¬gÏ¡
+);
+
+1788 
+¬¿y_»tuº
+;
+
+1789 
+O_F_OR_R
+:
+
+1790 ià(
+gimme
+ =ð
+G_ARRAY
+) {
+
+1792 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+ &&
+
+1793 (
+¬g
+[2].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+) {
+
+1794
+[2] =
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+;
+
+1795
+ =
+ `do_¿nge
+(
+gimme
+,
+¬gÏ¡
+);
+
+1796
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1797
+max¬g
+ =
+ -
+¬gÏ¡
+[0];
+
+1798
+ `¡r_ä“
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+);
+
+1799
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+NuΡr
+;
+
+1800
+ `¡r_ä“
+(
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+);
+
+1801
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+ =
+NuΡr
+;
+
+1802
+¬g
+->
+¬g_ty³
+ =
+O_ARRAY
+;
+
+1803
+¬g
+[1].
+¬g_ty³
+ =
+A_STAB
+|
+A_DONT
+;
+
+1804
+¬g
+->
+¬g_Ën
+ = 1;
+
+1805
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =
+ `¯dd
+(
+ `g’¡ab
+());
+
+1806
+¬y
+ =
+ `¡ab_¬¿y
+(
+¡ab
+);
+
+1807
+ `afžl
+(
+¬y
+,
+max¬g
+ - 1);
+
+1808
+ªum
+ =
+max¬g
+;
+
+1809
+ +ð
+¬gÏ¡
+[0]+1;
+
+1810 
+max¬g
+-- > 0)
+
+1811
+¬y
+->
+¬y_¬¿y
+[
+max¬g
+] =
+ `¡r_smake
+(
+[maxarg]);
+
+1812
+ -ð
+¬gÏ¡
+[0]+1;
+
+1813 
+¬¿y_»tuº
+;
+
+1815
+¬g
+->
+¬g_ty³
+ =
+Ýty³
+ =
+O_RANGE
+;
+
+1816
+max¬g
+ =
+¬g
+->
+¬g_Ën
+ = 2;
+
+1817
+ªum
+ = 2;
+
+1818
+¬g
+[
+ªum
+].
+¬g_æags
+ &ð~
+AF_ARYOK
+;
+
+1819
+¬gæags
+ =
+¬g
+[
+ªum
+].
+¬g_æags
+;
+
+1820
+¬gty³
+ =
+¬g
+[
+ªum
+].
+¬g_ty³
+ &
+A_MASK
+;
+
+1821
+¬g
+[
+ªum
+].
+¬g_ty³
+ =
+¬gty³
+;
+
+1822
+¬g±r
+ =
+¬g
+[
+ªum
+].
+¬g_±r
+;
+
+1823
+ =
+¬gÏ¡
+[0];
+
+1824
+ -ð
+;
+
+1825
+++;
+
+1826 
+»_ev®
+;
+
+1828
+¬g
+->
+¬g_ty³
+ =
+O_FLIP
+;
+
+1830 
+O_FLIP
+:
+
+1831 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+ ?
+
+1832
+Ï¡_š_¡ab
+ && ()
+ `¡r_gnum
+(
+[1]è=ð
+ `¡ab_io
+Öa¡_š_¡ab)->
+lšes
+
+
+1834
+ `¡r_Œue
+(
+[1]) ) {
+
+1835
+ `¡r_num£t
+(
+¡r
+,0.0);
+
+1836
+ªum
+ = 2;
+
+1837
+¬g
+->
+¬g_ty³
+ =
+Ýty³
+ =
+O_FLOP
+;
+
+1838
+¬g
+[2].
+¬g_ty³
+ &ð~
+A_DONT
+;
+
+1839
+¬g
+[1].
+¬g_ty³
+ |ð
+A_DONT
+;
+
+1840
+¬gæags
+ =
+¬g
+[2].
+¬g_æags
+;
+
+1841
+¬gty³
+ =
+¬g
+[2].
+¬g_ty³
+ &
+A_MASK
+;
+
+1842
+¬g±r
+ =
+¬g
+[2].
+¬g_±r
+;
+
+1843
+ =
+¬gÏ¡
+[0];
+
+1844
+ -ð
+++;
+
+1845 
+»_ev®
+;
+
+1847
+ `¡r_£t
+(
+¡r
+,"");
+
+1849 
+O_FLOP
+:
+
+1850
+ `¡r_šc
+(
+¡r
+);
+
+1851 ià((
+¬g
+[2].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+ ?
+
+1852
+Ï¡_š_¡ab
+ && ()
+ `¡r_gnum
+(
+[2]è=ð
+ `¡ab_io
+Öa¡_š_¡ab)->
+lšes
+
+
+1854
+ `¡r_Œue
+(
+[2]) ) {
+
+1855
+¬g
+->
+¬g_ty³
+ =
+O_FLIP
+;
+
+1856
+¬g
+[1].
+¬g_ty³
+ &ð~
+A_DONT
+;
+
+1857
+¬g
+[2].
+¬g_ty³
+ |ð
+A_DONT
+;
+
+1858
+ `¡r_ÿt
+(
+¡r
+,"E0");
+
+1861 
+O_FORK
+:
+
+1862 #ifdeà
+HAS_FORK
+
+
+1863
+ªum
+ =
+ `fÜk
+();
+
+1864 ià(
+ªum
+ < 0)
+
+1865 
+§y_undef
+;
+
+1866 ià(!
+ªum
+) {
+
+1867 ià(
+tmp¡ab
+ =
+ `¡ab’t
+("$",
+®l¡abs
+))
+
+1868
+ `¡r_num£t
+(
+ `STAB_STR
+(
+tmp¡ab
+),()
+ `g‘pid
+());
+
+1869
+ `hþ—r
+(
+pid¡©us
+);
+
+1871
+v®ue
+ = ()
+ªum
+;
+
+1872 
+dÚum£t
+;
+
+1874
+ `çl
+("Unsupported function fork");
+
+1877 
+O_WAIT
+:
+
+1878 #ifdeà
+HAS_WAIT
+
+
+1879 #iâdeà
+lšt
+
+
+1880
+ªum
+ =
+ `wa™
+(&
+¬gæags
+);
+
+1881 ià(
+ªum
+ > 0)
+
+1882
+ `pidgÚe
+(
+ªum
+,
+¬gæags
+);
+
+1883
+v®ue
+ = ()
+ªum
+;
+
+1885
+¡©usv®ue
+ = ()
+¬gæags
+;
+
+1886 
+dÚum£t
+;
+
+1888
+ `çl
+("Unsupported function wait");
+
+1891 
+O_WAITPID
+:
+
+1892 #ifdeà
+HAS_WAIT
+
+
+1893 #iâdeà
+lšt
+
+
+1894
+ªum
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+1895
+Ýty³
+ = ()
+ `¡r_gnum
+(
+[2]);
+
+1896
+ªum
+ =
+ `wa™4pid
+×num, &
+¬gæags
+,
+Ýty³
+);
+
+1897
+v®ue
+ = ()
+ªum
+;
+
+1899
+¡©usv®ue
+ = ()
+¬gæags
+;
+
+1900 
+dÚum£t
+;
+
+1902
+ `çl
+("Unsupported function wait");
+
+1905 
+O_SYSTEM
+:
+
+1906 #ifdeà
+HAS_FORK
+
+
+1907 #ifdeà
+TAINT
+
+
+1908 ià(
+¬gÏ¡
+[2] -‡rglast[1] == 1) {
+
+1909
+ `š‹nv
+();
+
+1910
+š‹d
+ |ð
+[2]->
+¡r_š‹d
+;
+
+1911
+ `šrÝ”
+("Insecure dependency in system");
+
+1914 (
+ªum
+ =
+ `vfÜk
+()) == -1) {
+
+1915 ià(
+Ӽo
+ !ð
+EAGAIN
+) {
+
+1916
+v®ue
+ = -1.0;
+
+1917 
+dÚum£t
+;
+
+1919
+ `¦“p
+(5);
+
+1921 ià(
+ªum
+ > 0) {
+
+1922 #iâdeà
+lšt
+
+
+1923
+ihªd
+ =
+ `sigÇl
+(
+SIGINT
+,
+SIG_IGN
+);
+
+1924
+qhªd
+ =
+ `sigÇl
+(
+SIGQUIT
+,
+SIG_IGN
+);
+
+1925
+¬gty³
+ =
+ `wa™4pid
+(
+ªum
+, &
+¬gæags
+, 0);
+
+1927
+ihªd
+ =
+qhªd
+ = 0;
+
+1929 ()
+ `sigÇl
+(
+SIGINT
+,
+ihªd
+);
+
+1930 ()
+ `sigÇl
+(
+SIGQUIT
+,
+qhªd
+);
+
+1931
+¡©usv®ue
+ = ()
+¬gæags
+;
+
+1932 ià(
+¬gty³
+ < 0)
+
+1933
+v®ue
+ = -1.0;
+
+1935
+v®ue
+ = ()(()
+¬gæags
+ & 0xffff);
+
+1937
+ `do_execä“
+();
+
+1938 
+dÚum£t
+;
+
+1940 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_STAB
+)
+
+1941
+v®ue
+ = ()
+ `do_«xec
+(
+[1],
+¬gÏ¡
+);
+
+1942 ià(
+¬gÏ¡
+[2] -‡rglast[1] != 1)
+
+1943
+v®ue
+ = ()
+ `do_«xec
+(
+NuΡr
+,
+¬gÏ¡
+);
+
+1945
+v®ue
+ = ()
+ `do_exec
+(
+ `¡r_g‘
+(
+ `¡r_mÜl
+(
+[2])));
+
+1947
+ `_ex™
+(-1);
+
+1949 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_STAB
+)
+
+1950
+v®ue
+ = ()
+ `do_a¥awn
+(
+[1],
+¬gÏ¡
+);
+
+1951 ià(
+¬gÏ¡
+[2] -‡rglast[1] != 1)
+
+1952
+v®ue
+ = ()
+ `do_a¥awn
+(
+NuΡr
+,
+¬gÏ¡
+);
+
+1954
+v®ue
+ = ()
+ `do_¥awn
+(
+ `¡r_g‘
+(
+ `¡r_mÜl
+(
+[2])));
+
+1956 
+dÚum£t
+;
+
+1958 
+O_EXEC_OP
+:
+
+1959 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_STAB
+)
+
+1960
+v®ue
+ = ()
+ `do_«xec
+(
+[1],
+¬gÏ¡
+);
+
+1961 ià(
+¬gÏ¡
+[2] -‡rglast[1] != 1)
+
+1962
+v®ue
+ = ()
+ `do_«xec
+(
+NuΡr
+,
+¬gÏ¡
+);
+
+1964
+v®ue
+ = ()
+ `do_exec
+(
+ `¡r_g‘
+(
+ `¡r_mÜl
+(
+[2])));
+
+1966 
+dÚum£t
+;
+
+1967 
+O_HEX
+:
+
+1968 ià(
+max¬g
+ < 1)
+
+1969
+tmps
+ =
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1971
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1972
+v®ue
+ = ()
+ `sÿnhex
+(
+tmps
+, 99, &
+¬gty³
+);
+
+1973 
+dÚum£t
+;
+
+1975 
+O_OCT
+:
+
+1976 ià(
+max¬g
+ < 1)
+
+1977
+tmps
+ =
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+1979
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+1980 *
+tmps
+ &&
+ `i§scii
+(*tmpsè&& (
+ `is¥aû
+(*tmps) || *tmps == '0'))
+
+1981
+tmps
+++;
+
+1982 ià(*
+tmps
+ == 'x')
+
+1983
+v®ue
+ = ()
+ `sÿnhex
+(++
+tmps
+, 99, &
+¬gty³
+);
+
+1985
+v®ue
+ = ()
+ `sÿnoù
+(
+tmps
+, 99, &
+¬gty³
+);
+
+1986 
+dÚum£t
+;
+
+1991
+¬¿y_»tuº
+:
+
+1992 #ifdeà
+DEBUGGING
+
+
+1993 ià(
+debug
+) {
+
+1994
+dËv–
+--;
+
+1995 ià(
+debug
+ & 8) {
+
+1996
+ªum
+ =
+ -
+¬gÏ¡
+[0];
+
+1997 
+ªum
+) {
+
+1999
+ `deb
+("% RETURNS ()\n",
+ÝÇme
+[
+Ýty³
+]);
+
+2002
+ `deb
+("% RETURNS (\"%s\")\n",
+ÝÇme
+[
+Ýty³
+],
+ `¡r_g‘
+(
+[1]));
+
+2005
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2006
+ `deb
+("% RETURNS %d ARGS (\"%s\",%s\"%s\")\n",
+ÝÇme
+[
+Ýty³
+],
+
+2007
+ªum
+,
+tmps
+,ªum==2?"":"...,",
+ `¡r_g‘
+(
+[anum]));
+
+2013 
+;
+
+2015
+§y_yes
+:
+
+2016
+¡r
+ = &
+¡r_yes
+;
+
+2017 
+nÜm®_»tuº
+;
+
+2019
+§y_no
+:
+
+2020
+¡r
+ = &
+¡r_no
+;
+
+2021 
+nÜm®_»tuº
+;
+
+2023
+§y_undef
+:
+
+2024
+¡r
+ = &
+¡r_undef
+;
+
+2025 
+nÜm®_»tuº
+;
+
+2027
+§y_z”o
+:
+
+2028
+v®ue
+ = 0.0;
+
+2031
+dÚum£t
+:
+
+2032
+ `¡r_num£t
+(
+¡r
+,
+v®ue
+);
+
+2033
+ `STABSET
+(
+¡r
+);
+
+2034
+[1] =
+¡r
+;
+
+2035 #ifdeà
+DEBUGGING
+
+
+2036 ià(
+debug
+) {
+
+2037
+dËv–
+--;
+
+2038 ià(
+debug
+ & 8)
+
+2039
+ `deb
+("% RETURNS \"%f\"\n",
+ÝÇme
+[
+Ýty³
+],
+v®ue
+);
+
+2042 
+¬gÏ¡
+[0] + 1;
+
+2043 #ifdeà
+SMALLSWITCHES
+
+
+2046 
+Ýty³
+) {
+
+2048 
+O_CHOWN
+:
+
+2049 #ifdeà
+HAS_CHOWN
+
+
+2050
+v®ue
+ = ()
+ `­¶y
+(
+Ýty³
+,
+¬gÏ¡
+);
+
+2051 
+dÚum£t
+;
+
+2053
+ `çl
+("Unsupported function chown");
+
+2056 
+O_KILL
+:
+
+2057 #ifdeà
+HAS_KILL
+
+
+2058
+v®ue
+ = ()
+ `­¶y
+(
+Ýty³
+,
+¬gÏ¡
+);
+
+2059 
+dÚum£t
+;
+
+2061
+ `çl
+("Unsupported function kill");
+
+2064 
+O_UNLINK
+:
+
+2065 
+O_CHMOD
+:
+
+2066 
+O_UTIME
+:
+
+2067
+v®ue
+ = ()
+ `­¶y
+(
+Ýty³
+,
+¬gÏ¡
+);
+
+2068 
+dÚum£t
+;
+
+2069 
+O_UMASK
+:
+
+2070 #ifdeà
+HAS_UMASK
+
+
+2071 ià(
+max¬g
+ < 1) {
+
+2072
+ªum
+ =
+ `umask
+(0);
+
+2073 ()
+ `umask
+(
+ªum
+);
+
+2076
+ªum
+ =
+ `umask
+(()
+ `¡r_gnum
+(
+[1]));
+
+2077
+v®ue
+ = ()
+ªum
+;
+
+2078 #ifdeà
+TAINT
+
+
+2079
+ `šrÝ”
+("Insecure dependency in umask");
+
+2081 
+dÚum£t
+;
+
+2083
+ `çl
+("Unsupported function umask");
+
+2086 #ià
+ `defšed
+(
+HAS_MSG
+è|| defšed(
+HAS_SEM
+è|| defšed(
+HAS_SHM
+)
+
+2087 
+O_MSGGET
+:
+
+2088 
+O_SHMGET
+:
+
+2089 
+O_SEMGET
+:
+
+2090 ià((
+ªum
+ =
+ `do_cg‘
+(
+Ýty³
+,
+¬gÏ¡
+)) == -1)
+
+2091 
+§y_undef
+;
+
+2092
+v®ue
+ = ()
+ªum
+;
+
+2093 
+dÚum£t
+;
+
+2094 
+O_MSGCTL
+:
+
+2095 
+O_SHMCTL
+:
+
+2096 
+O_SEMCTL
+:
+
+2097
+ªum
+ =
+ `do_cùl
+(
+Ýty³
+,
+¬gÏ¡
+);
+
+2098 ià(
+ªum
+ == -1)
+
+2099 
+§y_undef
+;
+
+2100 ià(
+ªum
+ != 0) {
+
+2101
+v®ue
+ = ()
+ªum
+;
+
+2102 
+dÚum£t
+;
+
+2104
+ `¡r_£t
+(
+¡r
+,"0 butrue");
+
+2105
+ `STABSET
+(
+¡r
+);
+
+2107 
+O_MSGSND
+:
+
+2108
+v®ue
+ = ()(
+ `do_msg¢d
+(
+¬gÏ¡
+) >= 0);
+
+2109 
+dÚum£t
+;
+
+2110 
+O_MSGRCV
+:
+
+2111
+v®ue
+ = ()(
+ `do_msgrcv
+(
+¬gÏ¡
+) >= 0);
+
+2112 
+dÚum£t
+;
+
+2113 
+O_SEMOP
+:
+
+2114
+v®ue
+ = ()(
+ `do_£mÝ
+(
+¬gÏ¡
+) >= 0);
+
+2115 
+dÚum£t
+;
+
+2116 
+O_SHMREAD
+:
+
+2117 
+O_SHMWRITE
+:
+
+2118
+v®ue
+ = ()(
+ `do_shmio
+(
+Ýty³
+,
+¬gÏ¡
+) >= 0);
+
+2119 
+dÚum£t
+;
+
+2121 
+O_MSGGET
+:
+
+2122 
+O_MSGCTL
+:
+
+2123 
+O_MSGSND
+:
+
+2124 
+O_MSGRCV
+:
+
+2125 
+O_SEMGET
+:
+
+2126 
+O_SEMCTL
+:
+
+2127 
+O_SEMOP
+:
+
+2128 
+O_SHMGET
+:
+
+2129 
+O_SHMCTL
+:
+
+2130 
+O_SHMREAD
+:
+
+2131 
+O_SHMWRITE
+:
+
+2132
+ `çl
+("System V IPC is‚ot implemented onhis machine");
+
+2134 
+O_RENAME
+:
+
+2135
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2136
+tmps2
+ =
+ `¡r_g‘
+(
+[2]);
+
+2137 #ifdeà
+TAINT
+
+
+2138
+ `šrÝ”
+("Insecure dependency in„ename");
+
+2140 #ifdeà
+HAS_RENAME
+
+
+2141
+v®ue
+ = ()(
+ `Ȃme
+(
+tmps
+,
+tmps2
+) >= 0);
+
+2143 ià(
+ `§me_dœ’t
+(
+tmps2
+,
+tmps
+))
+
+2144
+ªum
+ = 1;
+
+2146 ià(
+euid
+ ||
+ `¡©
+(
+tmps2
+,&
+¡©buf
+è< 0 || !
+ `S_ISDIR
+(¡©buf.
+¡_mode
+))
+
+2147 ()
+ `UNLINK
+(
+tmps2
+);
+
+2148 ià(!(
+ªum
+ =
+ `lšk
+(
+tmps
+,
+tmps2
+)))
+
+2149
+ªum
+ =
+ `UNLINK
+(
+tmps
+);
+
+2151
+v®ue
+ = ()(
+ªum
+ >= 0);
+
+2153 
+dÚum£t
+;
+
+2154 
+O_LINK
+:
+
+2155 #ifdeà
+HAS_LINK
+
+
+2156
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2157
+tmps2
+ =
+ `¡r_g‘
+(
+[2]);
+
+2158 #ifdeà
+TAINT
+
+
+2159
+ `šrÝ”
+("Insecure dependency in†ink");
+
+2161
+v®ue
+ = ()(
+ `lšk
+(
+tmps
+,
+tmps2
+) >= 0);
+
+2162 
+dÚum£t
+;
+
+2164
+ `çl
+("Unsupported function†ink");
+
+2167 
+O_MKDIR
+:
+
+2168
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2169
+ªum
+ = ()
+ `¡r_gnum
+(
+[2]);
+
+2170 #ifdeà
+TAINT
+
+
+2171
+ `šrÝ”
+("Insecure dependency in mkdir");
+
+2173 #ifdeà
+HAS_MKDIR
+
+
+2174
+v®ue
+ = ()(
+ `mkdœ
+(
+tmps
+,
+ªum
+) >= 0);
+
+2175 
+dÚum£t
+;
+
+2177 ()
+ `¡rýy
+(
+buf
+,"mkdir ");
+
+2179 #ià!
+ `defšed
+(
+HAS_MKDIR
+è|| !defšed(
+HAS_RMDIR
+)
+
+2180
+Úe_lš”
+:
+
+2181 
+tmps2
+ =
+buf
++6; *
+tmps
+; ) {
+
+2182 *
+tmps2
+++ = '\\';
+
+2183 *
+tmps2
+++ = *
+tmps
+++;
+
+2185 ()
+ `¡rýy
+(
+tmps2
+," 2>&1");
+
+2186
+rså
+ =
+ `mypÝ’
+(
+buf
+,"r");
+
+2187 ià(
+rså
+) {
+
+2188 *
+buf
+ = '\0';
+
+2189
+tmps2
+ =
+ `fg‘s
+(
+buf
+, buf,
+rså
+);
+
+2190 ()
+ `mypþo£
+(
+rså
+);
+
+2191 ià(
+tmps2
+ !ð
+NuÎch
+) {
+
+2192 
+Ӽo
+ = 1;ƒ¼nØ<
+sys_ü
+;ƒrrno++) {
+
+2193 ià(
+ `š¡r
+(
+buf
+,
+sys_”¾i¡
+[
+Ӽo
+]))
+
+2194 
+§y_z”o
+;
+
+2196
+Ӽo
+ = 0;
+
+2197 #iâdeà
+EACCES
+
+
+2198 
+ #EACCES
+
+EPERM
+
+
+ )
+
+2200 ià(
+ `š¡r
+(
+buf
+,"cannot make"))
+
+2201
+Ӽo
+ =
+EEXIST
+;
+
+2202 ià(
+ `š¡r
+(
+buf
+,"existing file"))
+
+2203
+Ӽo
+ =
+EEXIST
+;
+
+2204 ià(
+ `š¡r
+(
+buf
+,"ileƒxists"))
+
+2205
+Ӽo
+ =
+EEXIST
+;
+
+2206 ià(
+ `š¡r
+(
+buf
+,"non-exist"))
+
+2207
+Ӽo
+ =
+ENOENT
+;
+
+2208 ià(
+ `š¡r
+(
+buf
+,"does‚otƒxist"))
+
+2209
+Ӽo
+ =
+ENOENT
+;
+
+2210 ià(
+ `š¡r
+(
+buf
+,"notƒmpty"))
+
+2211
+Ӽo
+ =
+EBUSY
+;
+
+2212 ià(
+ `š¡r
+(
+buf
+,"cannot‡ccess"))
+
+2213
+Ӽo
+ =
+EACCES
+;
+
+2215
+Ӽo
+ =
+EPERM
+;
+
+2216 
+§y_z”o
+;
+
+2219
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2220
+ªum
+ = (
+ `¡©
+(
+tmps
+,&
+¡©buf
+) >= 0);
+
+2221 ià(
+Ýty³
+ =ð
+O_RMDIR
+)
+
+2222
+ªum
+ = !anum;
+
+2223 ià(
+ªum
+)
+
+2224
+Ӽo
+ = 0;
+
+2226
+Ӽo
+ =
+EACCES
+;
+
+2227
+v®ue
+ = ()
+ªum
+;
+
+2229 
+dÚum£t
+;
+
+2232 
+§y_z”o
+;
+
+2234 
+O_RMDIR
+:
+
+2235 ià(
+max¬g
+ < 1)
+
+2236
+tmps
+ =
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+2238
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2239 #ifdeà
+TAINT
+
+
+2240
+ `šrÝ”
+("Insecure dependency in„mdir");
+
+2242 #ifdeà
+HAS_RMDIR
+
+
+2243
+v®ue
+ = ()(
+ `rmdœ
+(
+tmps
+) >= 0);
+
+2244 
+dÚum£t
+;
+
+2246 ()
+ `¡rýy
+(
+buf
+,"rmdir ");
+
+2247 
+Úe_lš”
+;
+
+2249 
+O_GETPPID
+:
+
+2250 #ifdeà
+HAS_GETPPID
+
+
+2251
+v®ue
+ = ()
+ `g‘µid
+();
+
+2252 
+dÚum£t
+;
+
+2254
+ `çl
+("Unsupported function getppid");
+
+2257 
+O_GETPGRP
+:
+
+2258 #ifdeà
+HAS_GETPGRP
+
+
+2259 ià(
+max¬g
+ < 1)
+
+2260
+ªum
+ = 0;
+
+2262
+ªum
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+2263
+v®ue
+ = ()
+ `g‘pg½
+(
+ªum
+);
+
+2264 
+dÚum£t
+;
+
+2266
+ `çl
+("The getpgrp() function is unimplemented onhis machine");
+
+2269 
+O_SETPGRP
+:
+
+2270 #ifdeà
+HAS_SETPGRP
+
+
+2271
+¬gty³
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+2272
+ªum
+ = ()
+ `¡r_gnum
+(
+[2]);
+
+2273 #ifdeà
+TAINT
+
+
+2274
+ `šrÝ”
+("Insecure dependency in setpgrp");
+
+2276
+v®ue
+ = ()(
+ `£g½
+(
+¬gty³
+,
+ªum
+) >= 0);
+
+2277 
+dÚum£t
+;
+
+2279
+ `çl
+("The setpgrp() function is unimplemented onhis machine");
+
+2282 
+O_GETPRIORITY
+:
+
+2283 #ifdeà
+HAS_GETPRIORITY
+
+
+2284
+¬gty³
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+2285
+ªum
+ = ()
+ `¡r_gnum
+(
+[2]);
+
+2286
+v®ue
+ = ()
+ `g‘´iÜ™y
+(
+¬gty³
+,
+ªum
+);
+
+2287 
+dÚum£t
+;
+
+2289
+ `çl
+("The getpriority() function is unimplemented onhis machine");
+
+2292 
+O_SETPRIORITY
+:
+
+2293 #ifdeà
+HAS_SETPRIORITY
+
+
+2294
+¬gty³
+ = ()
+ `¡r_gnum
+(
+[1]);
+
+2295
+ªum
+ = ()
+ `¡r_gnum
+(
+[2]);
+
+2296
+Ýty³
+ = ()
+ `¡r_gnum
+(
+[3]);
+
+2297 #ifdeà
+TAINT
+
+
+2298
+ `šrÝ”
+("Insecure dependency in setpriority");
+
+2300
+v®ue
+ = ()(
+ `£riÜ™y
+(
+¬gty³
+,
+ªum
+,
+Ýty³
+) >= 0);
+
+2301 
+dÚum£t
+;
+
+2303
+ `çl
+("The setpriority() function is unimplemented onhis machine");
+
+2306 
+O_CHROOT
+:
+
+2307 #ifdeà
+HAS_CHROOT
+
+
+2308 ià(
+max¬g
+ < 1)
+
+2309
+tmps
+ =
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+2311
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2312 #ifdeà
+TAINT
+
+
+2313
+ `šrÝ”
+("Insecure dependency in chroot");
+
+2315
+v®ue
+ = ()(
+ `chroÙ
+(
+tmps
+) >= 0);
+
+2316 
+dÚum£t
+;
+
+2318
+ `çl
+("Unsupported function chroot");
+
+2321 
+O_FCNTL
+:
+
+2322 
+O_IOCTL
+:
+
+2323 ià(
+max¬g
+ <= 0)
+
+2324
+¡ab
+ =
+Ï¡_š_¡ab
+;
+
+2325 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2326
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2328
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2329
+¬gty³
+ =
+ `U_I
+(
+ `¡r_gnum
+(
+[2]));
+
+2330 #ifdeà
+TAINT
+
+
+2331
+ `šrÝ”
+("Insecure dependency in ioctl");
+
+2333
+ªum
+ =
+ `do_ùl
+(
+Ýty³
+,
+¡ab
+,
+¬gty³
+,
+[3]);
+
+2334 ià(
+ªum
+ == -1)
+
+2335 
+§y_undef
+;
+
+2336 ià(
+ªum
+ != 0) {
+
+2337
+v®ue
+ = ()
+ªum
+;
+
+2338 
+dÚum£t
+;
+
+2340
+ `¡r_£t
+(
+¡r
+,"0 butrue");
+
+2341
+ `STABSET
+(
+¡r
+);
+
+2343 
+O_FLOCK
+:
+
+2344 #ifdeà
+HAS_FLOCK
+
+
+2345 ià(
+max¬g
+ <= 0)
+
+2346
+¡ab
+ =
+Ï¡_š_¡ab
+;
+
+2347 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2348
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2350
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2351 ià(
+¡ab
+ &&
+ `¡ab_io
+(stab))
+
+2352
+ =
+ `¡ab_io
+(
+¡ab
+)->
+iå
+;
+
+2354
+ =
+NuÎå
+;
+
+2355 ià(
+) {
+
+2356
+¬gty³
+ = ()
+ `¡r_gnum
+(
+[2]);
+
+2357
+v®ue
+ = ()(
+ `æock
+(
+ `fž’o
+(
+),
+¬gty³
+) >= 0);
+
+2360
+v®ue
+ = 0;
+
+2361 
+dÚum£t
+;
+
+2363
+ `çl
+("The flock() function is unimplemented onhis machine");
+
+2366 
+O_UNSHIFT
+:
+
+2367
+¬y
+ =
+ `¡ab_¬¿y
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+2368 ià(
+¬gÏ¡
+[2] -‡rglast[1] != 1)
+
+2369
+ `do_unshiá
+(
+¬y
+,
+¬gÏ¡
+);
+
+2371
+STR
+ *
+tmp¡r
+ =
+ `SŒ_Ãw
+(52,0);
+
+2372
+ `¡r_s£t
+(
+tmp¡r
+,
+[2]);
+
+2373
+ `aunshiá
+(
+¬y
+,1);
+
+2374 ()
+ `a¡Üe
+(
+¬y
+,0,
+tmp¡r
+);
+
+2376
+v®ue
+ = ()(
+¬y
+->
+¬y_fžl
+ + 1);
+
+2377 
+dÚum£t
+;
+
+2379 
+O_REQUIRE
+:
+
+2380 
+O_DOFILE
+:
+
+2381 
+O_EVAL
+:
+
+2382 ià(
+max¬g
+ < 1)
+
+2383
+tmp¡r
+ =
+ `¡ab_v®
+(
+def¡ab
+);
+
+2385
+tmp¡r
+ =
+
+2386 (
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è!ð
+A_NULL
+ ?
+[1] :
+ `¡ab_v®
+(
+def¡ab
+);
+
+2387 #ifdeà
+TAINT
+
+
+2388
+š‹d
+ |ð
+tmp¡r
+->
+¡r_š‹d
+;
+
+2389
+ `šrÝ”
+("Insecure dependency inƒval");
+
+2391
+ =
+ `do_ev®
+(
+tmp¡r
+,
+Ýty³
+,
+curcmd
+->
+c_¡ash
+,
+
+2392
+gimme
+,
+¬gÏ¡
+);
+
+2393 
+¬¿y_»tuº
+;
+
+2395 
+O_FTRREAD
+:
+
+2396
+¬gty³
+ = 0;
+
+2397
+ªum
+ =
+S_IRUSR
+;
+
+2398 
+check_³rm
+;
+
+2399 
+O_FTRWRITE
+:
+
+2400
+¬gty³
+ = 0;
+
+2401
+ªum
+ =
+S_IWUSR
+;
+
+2402 
+check_³rm
+;
+
+2403 
+O_FTREXEC
+:
+
+2404
+¬gty³
+ = 0;
+
+2405
+ªum
+ =
+S_IXUSR
+;
+
+2406 
+check_³rm
+;
+
+2407 
+O_FTEREAD
+:
+
+2408
+¬gty³
+ = 1;
+
+2409
+ªum
+ =
+S_IRUSR
+;
+
+2410 
+check_³rm
+;
+
+2411 
+O_FTEWRITE
+:
+
+2412
+¬gty³
+ = 1;
+
+2413
+ªum
+ =
+S_IWUSR
+;
+
+2414 
+check_³rm
+;
+
+2415 
+O_FTEEXEC
+:
+
+2416
+¬gty³
+ = 1;
+
+2417
+ªum
+ =
+S_IXUSR
+;
+
+2418
+check_³rm
+:
+
+2419 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2420 
+§y_undef
+;
+
+2421 ià(
+ `ÿndo
+(
+ªum
+,
+¬gty³
+,&
+¡©ÿche
+))
+
+2422 
+§y_yes
+;
+
+2423 
+§y_no
+;
+
+2425 
+O_FTIS
+:
+
+2426 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2427 
+§y_undef
+;
+
+2428 
+§y_yes
+;
+
+2429 
+O_FTEOWNED
+:
+
+2430 
+O_FTROWNED
+:
+
+2431 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2432 
+§y_undef
+;
+
+2433 ià(
+¡©ÿche
+.
+¡_uid
+ =ð(
+Ýty³
+ =ð
+O_FTEOWNED
+ ?
+euid
+ :
+uid
+) )
+
+2434 
+§y_yes
+;
+
+2435 
+§y_no
+;
+
+2436 
+O_FTZERO
+:
+
+2437 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2438 
+§y_undef
+;
+
+2439 ià(!
+¡©ÿche
+.
+¡_size
+)
+
+2440 
+§y_yes
+;
+
+2441 
+§y_no
+;
+
+2442 
+O_FTSIZE
+:
+
+2443 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2444 
+§y_undef
+;
+
+2445
+v®ue
+ = ()
+¡©ÿche
+.
+¡_size
+;
+
+2446 
+dÚum£t
+;
+
+2448 
+O_FTMTIME
+:
+
+2449 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2450 
+§y_undef
+;
+
+2451
+v®ue
+ = ()(
+ba£time
+ -
+¡©ÿche
+.
+¡_mtime
+) / 86400.0;
+
+2452 
+dÚum£t
+;
+
+2453 
+O_FTATIME
+:
+
+2454 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2455 
+§y_undef
+;
+
+2456
+v®ue
+ = ()(
+ba£time
+ -
+¡©ÿche
+.
+¡_©ime
+) / 86400.0;
+
+2457 
+dÚum£t
+;
+
+2458 
+O_FTCTIME
+:
+
+2459 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2460 
+§y_undef
+;
+
+2461
+v®ue
+ = ()(
+ba£time
+ -
+¡©ÿche
+.
+¡_ùime
+) / 86400.0;
+
+2462 
+dÚum£t
+;
+
+2464 
+O_FTSOCK
+:
+
+2465 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2466 
+§y_undef
+;
+
+2467 ià(
+ `S_ISSOCK
+(
+¡©ÿche
+.
+¡_mode
+))
+
+2468 
+§y_yes
+;
+
+2469 
+§y_no
+;
+
+2470 
+O_FTCHR
+:
+
+2471 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2472 
+§y_undef
+;
+
+2473 ià(
+ `S_ISCHR
+(
+¡©ÿche
+.
+¡_mode
+))
+
+2474 
+§y_yes
+;
+
+2475 
+§y_no
+;
+
+2476 
+O_FTBLK
+:
+
+2477 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2478 
+§y_undef
+;
+
+2479 ià(
+ `S_ISBLK
+(
+¡©ÿche
+.
+¡_mode
+))
+
+2480 
+§y_yes
+;
+
+2481 
+§y_no
+;
+
+2482 
+O_FTFILE
+:
+
+2483 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2484 
+§y_undef
+;
+
+2485 ià(
+ `S_ISREG
+(
+¡©ÿche
+.
+¡_mode
+))
+
+2486 
+§y_yes
+;
+
+2487 
+§y_no
+;
+
+2488 
+O_FTDIR
+:
+
+2489 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2490 
+§y_undef
+;
+
+2491 ià(
+ `S_ISDIR
+(
+¡©ÿche
+.
+¡_mode
+))
+
+2492 
+§y_yes
+;
+
+2493 
+§y_no
+;
+
+2494 
+O_FTPIPE
+:
+
+2495 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2496 
+§y_undef
+;
+
+2497 ià(
+ `S_ISFIFO
+(
+¡©ÿche
+.
+¡_mode
+))
+
+2498 
+§y_yes
+;
+
+2499 
+§y_no
+;
+
+2500 
+O_FTLINK
+:
+
+2501 ià(
+ `myl¡©
+(
+¬g
+,
+[1]) < 0)
+
+2502 
+§y_undef
+;
+
+2503 ià(
+ `S_ISLNK
+(
+¡©ÿche
+.
+¡_mode
+))
+
+2504 
+§y_yes
+;
+
+2505 
+§y_no
+;
+
+2506 
+O_SYMLINK
+:
+
+2507 #ifdeà
+HAS_SYMLINK
+
+
+2508
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2509
+tmps2
+ =
+ `¡r_g‘
+(
+[2]);
+
+2510 #ifdeà
+TAINT
+
+
+2511
+ `šrÝ”
+("Insecure dependency in symlink");
+
+2513
+v®ue
+ = ()(
+ `symlšk
+(
+tmps
+,
+tmps2
+) >= 0);
+
+2514 
+dÚum£t
+;
+
+2516
+ `çl
+("Unsupported function symlink");
+
+2518 
+O_READLINK
+:
+
+2519 #ifdeà
+HAS_SYMLINK
+
+
+2520 ià(
+max¬g
+ < 1)
+
+2521
+tmps
+ =
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+def¡ab
+));
+
+2523
+tmps
+ =
+ `¡r_g‘
+(
+[1]);
+
+2524
+ªum
+ =
+ `»adlšk
+(
+tmps
+,
+buf
+, buf);
+
+2525 ià(
+ªum
+ < 0)
+
+2526 
+§y_undef
+;
+
+2527
+ `¡r_n£t
+(
+¡r
+,
+buf
+,
+ªum
+);
+
+2530 
+§y_undef
+;
+
+2532 
+O_FTSUID
+:
+
+2533 #ifdeà
+S_ISUID
+
+
+2534
+ªum
+ =
+S_ISUID
+;
+
+2535 
+check_xid
+;
+
+2537 
+§y_no
+;
+
+2539 
+O_FTSGID
+:
+
+2540 #ifdeà
+S_ISGID
+
+
+2541
+ªum
+ =
+S_ISGID
+;
+
+2542 
+check_xid
+;
+
+2544 
+§y_no
+;
+
+2546 
+O_FTSVTX
+:
+
+2547 #ifdeà
+S_ISVTX
+
+
+2548
+ªum
+ =
+S_ISVTX
+;
+
+2550 
+§y_no
+;
+
+2552
+check_xid
+:
+
+2553 ià(
+ `my¡©
+(
+¬g
+,
+[1]) < 0)
+
+2554 
+§y_undef
+;
+
+2555 ià(
+¡©ÿche
+.
+¡_mode
+ &
+ªum
+)
+
+2556 
+§y_yes
+;
+
+2557 
+§y_no
+;
+
+2558 
+O_FTTTY
+:
+
+2559 ià(
+¬g
+[1].
+¬g_ty³
+ &
+A_DONT
+) {
+
+2560
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2561
+tmps
+ = "";
+
+2564
+¡ab
+ =
+ `¡ab’t
+(
+tmps
+ =
+ `¡r_g‘
+(
+[1]),
+FALSE
+);
+
+2565 ià(
+¡ab
+ &&
+ `¡ab_io
+(¡abè&& sb_io(¡ab)->
+iå
+)
+
+2566
+ªum
+ =
+ `fž’o
+(
+ `¡ab_io
+(
+¡ab
+)->
+iå
+);
+
+2567 ià(
+ `isdig™
+(*
+tmps
+))
+
+2568
+ªum
+ =
+ `©oi
+(
+tmps
+);
+
+2570 
+§y_undef
+;
+
+2571 ià(
+ `i§‰y
+(
+ªum
+))
+
+2572 
+§y_yes
+;
+
+2573 
+§y_no
+;
+
+2574 
+O_FTTEXT
+:
+
+2575 
+O_FTBINARY
+:
+
+2576
+¡r
+ =
+ `do_á‹xt
+(
+¬g
+,
+[1]);
+
+2578 #ifdeà
+HAS_SOCKET
+
+
+2579 
+O_SOCKET
+:
+
+2580 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2581
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2583
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2584 #iâdeà
+lšt
+
+
+2585
+v®ue
+ = ()
+ `do_sock‘
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2587 ()
+ `do_sock‘
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2589 
+dÚum£t
+;
+
+2590 
+O_BIND
+:
+
+2591 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2592
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2594
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2595 #iâdeà
+lšt
+
+
+2596
+v®ue
+ = ()
+ `do_bšd
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2598 ()
+ `do_bšd
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2600 
+dÚum£t
+;
+
+2601 
+O_CONNECT
+:
+
+2602 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2603
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2605
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2606 #iâdeà
+lšt
+
+
+2607
+v®ue
+ = ()
+ `do_cÚÃù
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2609 ()
+ `do_cÚÃù
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2611 
+dÚum£t
+;
+
+2612 
+O_LISTEN
+:
+
+2613 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2614
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2616
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2617 #iâdeà
+lšt
+
+
+2618
+v®ue
+ = ()
+ `do_li¡’
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2620 ()
+ `do_li¡’
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2622 
+dÚum£t
+;
+
+2623 
+O_ACCEPT
+:
+
+2624 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2625
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2627
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2628 ià((
+¬g
+[2].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2629
+¡ab2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2631
+¡ab2
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[2]),
+TRUE
+);
+
+2632
+ `do_acû±
+(
+¡r
+,
+¡ab
+,
+¡ab2
+);
+
+2633
+ `STABSET
+(
+¡r
+);
+
+2635 
+O_GHBYNAME
+:
+
+2636 ià(
+max¬g
+ < 1)
+
+2637 
+§y_undef
+;
+
+2638 
+O_GHBYADDR
+:
+
+2639 
+O_GHOSTENT
+:
+
+2640
+ =
+ `do_gh’t
+(
+Ýty³
+,
+
+2641
+gimme
+,
+¬gÏ¡
+);
+
+2642 
+¬¿y_»tuº
+;
+
+2643 
+O_GNBYNAME
+:
+
+2644 ià(
+max¬g
+ < 1)
+
+2645 
+§y_undef
+;
+
+2646 
+O_GNBYADDR
+:
+
+2647 
+O_GNETENT
+:
+
+2648
+ =
+ `do_gÃÁ
+(
+Ýty³
+,
+
+2649
+gimme
+,
+¬gÏ¡
+);
+
+2650 
+¬¿y_»tuº
+;
+
+2651 
+O_GPBYNAME
+:
+
+2652 ià(
+max¬g
+ < 1)
+
+2653 
+§y_undef
+;
+
+2654 
+O_GPBYNUMBER
+:
+
+2655 
+O_GPROTOENT
+:
+
+2656
+ =
+ `do_g³Á
+(
+Ýty³
+,
+
+2657
+gimme
+,
+¬gÏ¡
+);
+
+2658 
+¬¿y_»tuº
+;
+
+2659 
+O_GSBYNAME
+:
+
+2660 ià(
+max¬g
+ < 1)
+
+2661 
+§y_undef
+;
+
+2662 
+O_GSBYPORT
+:
+
+2663 
+O_GSERVENT
+:
+
+2664
+ =
+ `do_g£Á
+(
+Ýty³
+,
+
+2665
+gimme
+,
+¬gÏ¡
+);
+
+2666 
+¬¿y_»tuº
+;
+
+2667 
+O_SHOSTENT
+:
+
+2668
+v®ue
+ = (è
+ `£tho¡’t
+(()
+ `¡r_gnum
+(
+[1]));
+
+2669 
+dÚum£t
+;
+
+2670 
+O_SNETENT
+:
+
+2671
+v®ue
+ = (è
+ `£Š‘’t
+(()
+ `¡r_gnum
+(
+[1]));
+
+2672 
+dÚum£t
+;
+
+2673 
+O_SPROTOENT
+:
+
+2674
+v®ue
+ = (è
+ `£rÙÛÁ
+(()
+ `¡r_gnum
+(
+[1]));
+
+2675 
+dÚum£t
+;
+
+2676 
+O_SSERVENT
+:
+
+2677
+v®ue
+ = (è
+ `£t£rv’t
+(()
+ `¡r_gnum
+(
+[1]));
+
+2678 
+dÚum£t
+;
+
+2679 
+O_EHOSTENT
+:
+
+2680
+v®ue
+ = (è
+ `’dho¡’t
+();
+
+2681 
+dÚum£t
+;
+
+2682 
+O_ENETENT
+:
+
+2683
+v®ue
+ = (è
+ `’dËÁ
+();
+
+2684 
+dÚum£t
+;
+
+2685 
+O_EPROTOENT
+:
+
+2686
+v®ue
+ = (è
+ `’d´ÙÛÁ
+();
+
+2687 
+dÚum£t
+;
+
+2688 
+O_ESERVENT
+:
+
+2689
+v®ue
+ = (è
+ `’d£rv’t
+();
+
+2690 
+dÚum£t
+;
+
+2691 
+O_SOCKPAIR
+:
+
+2692 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2693
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2695
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2696 ià((
+¬g
+[2].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2697
+¡ab2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2699
+¡ab2
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[2]),
+TRUE
+);
+
+2700 #iâdeà
+lšt
+
+
+2701
+v®ue
+ = ()
+ `do_¥aœ
+(
+¡ab
+,
+¡ab2
+,
+¬gÏ¡
+);
+
+2703 ()
+ `do_¥aœ
+(
+¡ab
+,
+¡ab2
+,
+¬gÏ¡
+);
+
+2705 
+dÚum£t
+;
+
+2706 
+O_SHUTDOWN
+:
+
+2707 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2708
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2710
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2711 #iâdeà
+lšt
+
+
+2712
+v®ue
+ = ()
+ `do_shutdown
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2714 ()
+ `do_shutdown
+(
+¡ab
+,
+¬gÏ¡
+);
+
+2716 
+dÚum£t
+;
+
+2717 
+O_GSOCKOPT
+:
+
+2718 
+O_SSOCKOPT
+:
+
+2719 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2720
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2722
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2723
+ =
+ `do_sÝt
+(
+Ýty³
+,
+¡ab
+,
+¬gÏ¡
+);
+
+2724 
+¬¿y_»tuº
+;
+
+2725 
+O_GETSOCKNAME
+:
+
+2726 
+O_GETPEERNAME
+:
+
+2727 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2728
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2730
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2731 ià(!
+¡ab
+)
+
+2732 
+§y_undef
+;
+
+2733
+ =
+ `do_g‘sockÇme
+(
+Ýty³
+,
+¡ab
+,
+¬gÏ¡
+);
+
+2734 
+¬¿y_»tuº
+;
+
+2737 
+O_SOCKET
+:
+
+2738 
+O_BIND
+:
+
+2739 
+O_CONNECT
+:
+
+2740 
+O_LISTEN
+:
+
+2741 
+O_ACCEPT
+:
+
+2742 
+O_SOCKPAIR
+:
+
+2743 
+O_GHBYNAME
+:
+
+2744 
+O_GHBYADDR
+:
+
+2745 
+O_GHOSTENT
+:
+
+2746 
+O_GNBYNAME
+:
+
+2747 
+O_GNBYADDR
+:
+
+2748 
+O_GNETENT
+:
+
+2749 
+O_GPBYNAME
+:
+
+2750 
+O_GPBYNUMBER
+:
+
+2751 
+O_GPROTOENT
+:
+
+2752 
+O_GSBYNAME
+:
+
+2753 
+O_GSBYPORT
+:
+
+2754 
+O_GSERVENT
+:
+
+2755 
+O_SHOSTENT
+:
+
+2756 
+O_SNETENT
+:
+
+2757 
+O_SPROTOENT
+:
+
+2758 
+O_SSERVENT
+:
+
+2759 
+O_EHOSTENT
+:
+
+2760 
+O_ENETENT
+:
+
+2761 
+O_EPROTOENT
+:
+
+2762 
+O_ESERVENT
+:
+
+2763 
+O_SHUTDOWN
+:
+
+2764 
+O_GSOCKOPT
+:
+
+2765 
+O_SSOCKOPT
+:
+
+2766 
+O_GETSOCKNAME
+:
+
+2767 
+O_GETPEERNAME
+:
+
+2768
+badsock
+:
+
+2769
+ `çl
+("Unsupported socket function");
+
+2771 
+O_SSELECT
+:
+
+2772 #ifdeà
+HAS_SELECT
+
+
+2773
+ =
+ `do_£Ëù
+(
+gimme
+,
+¬gÏ¡
+);
+
+2774 
+¬¿y_»tuº
+;
+
+2776
+ `çl
+("select‚ot implemented");
+
+2778 
+O_FILENO
+:
+
+2779 ià(
+max¬g
+ < 1)
+
+2780 
+§y_undef
+;
+
+2781 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2782
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2784
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2785 ià(!
+¡ab
+ || !(
+¡io
+ =
+ `¡ab_io
+(¡ab)è|| !(
+ = stio->
+iå
+))
+
+2786 
+§y_undef
+;
+
+2787
+v®ue
+ =
+ `fž’o
+(
+);
+
+2788 
+dÚum£t
+;
+
+2789 
+O_BINMODE
+:
+
+2790 ià(
+max¬g
+ < 1)
+
+2791 
+§y_undef
+;
+
+2792 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2793
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2795
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2796 ià(!
+¡ab
+ || !(
+¡io
+ =
+ `¡ab_io
+(¡ab)è|| !(
+ = stio->
+iå
+))
+
+2797 
+§y_undef
+;
+
+2798 #ifdeà
+MSDOS
+
+
+2799
+ `¡r_£t
+(
+¡r
+, (
+ `£tmode
+(
+ `fž’o
+(
+),
+O_BINARY
+è!ð-1è?
+Yes
+ :
+No
+);
+
+2801
+ `¡r_£t
+(
+¡r
+,
+Yes
+);
+
+2803
+ `STABSET
+(
+¡r
+);
+
+2805 
+O_VEC
+:
+
+2806
+ =
+ `do_vec
+(
+¡r
+ =ð
+[1],
+¬g
+->
+¬g_±r
+.
+¬g_¡r
+,
+¬gÏ¡
+);
+
+2807 
+¬¿y_»tuº
+;
+
+2808 
+O_GPWNAM
+:
+
+2809 
+O_GPWUID
+:
+
+2810 
+O_GPWENT
+:
+
+2811 #ifdeà
+HAS_PASSWD
+
+
+2812
+ =
+ `do_gpw’t
+(
+Ýty³
+,
+
+2813
+gimme
+,
+¬gÏ¡
+);
+
+2814 
+¬¿y_»tuº
+;
+
+2815 
+O_SPWENT
+:
+
+2816
+v®ue
+ = (è
+ `£w’t
+();
+
+2817 
+dÚum£t
+;
+
+2818 
+O_EPWENT
+:
+
+2819
+v®ue
+ = (è
+ `’dpw’t
+();
+
+2820 
+dÚum£t
+;
+
+2822 
+O_EPWENT
+:
+
+2823 
+O_SPWENT
+:
+
+2824
+ `çl
+("Unsupported…assword function");
+
+2827 
+O_GGRNAM
+:
+
+2828 
+O_GGRGID
+:
+
+2829 
+O_GGRENT
+:
+
+2830 #ifdeà
+HAS_GROUP
+
+
+2831
+ =
+ `do_gg»Á
+(
+Ýty³
+,
+
+2832
+gimme
+,
+¬gÏ¡
+);
+
+2833 
+¬¿y_»tuº
+;
+
+2834 
+O_SGRENT
+:
+
+2835
+v®ue
+ = (è
+ `£tg»Á
+();
+
+2836 
+dÚum£t
+;
+
+2837 
+O_EGRENT
+:
+
+2838
+v®ue
+ = (è
+ `’dg»Á
+();
+
+2839 
+dÚum£t
+;
+
+2841 
+O_EGRENT
+:
+
+2842 
+O_SGRENT
+:
+
+2843
+ `çl
+("Unsupported group function");
+
+2846 
+O_GETLOGIN
+:
+
+2847 #ifdeà
+HAS_GETLOGIN
+
+
+2848 ià(!(
+tmps
+ =
+ `g‘logš
+()))
+
+2849 
+§y_undef
+;
+
+2850
+ `¡r_£t
+(
+¡r
+,
+tmps
+);
+
+2852
+ `çl
+("Unsupported function getlogin");
+
+2855 
+O_OPENDIR
+:
+
+2856 
+O_READDIR
+:
+
+2857 
+O_TELLDIR
+:
+
+2858 
+O_SEEKDIR
+:
+
+2859 
+O_REWINDDIR
+:
+
+2860 
+O_CLOSEDIR
+:
+
+2861 ià(
+max¬g
+ < 1)
+
+2862 
+§y_undef
+;
+
+2863 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2864
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2866
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2867 ià(!
+¡ab
+)
+
+2868 
+§y_undef
+;
+
+2869
+ =
+ `do_dœÝ
+(
+Ýty³
+,
+¡ab
+,
+gimme
+,
+¬gÏ¡
+);
+
+2870 
+¬¿y_»tuº
+;
+
+2871 
+O_SYSCALL
+:
+
+2872
+v®ue
+ = ()
+ `do_sysÿÎ
+(
+¬gÏ¡
+);
+
+2873 
+dÚum£t
+;
+
+2874 
+O_PIPE
+:
+
+2875 #ifdeà
+HAS_PIPE
+
+
+2876 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2877
+¡ab
+ =
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2879
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[1]),
+TRUE
+);
+
+2880 ià((
+¬g
+[2].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_WORD
+)
+
+2881
+¡ab2
+ =
+¬g
+[2].
+¬g_±r
+.
+¬g_¡ab
+;
+
+2883
+¡ab2
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+[2]),
+TRUE
+);
+
+2884
+ `do_pe
+(
+¡r
+,
+¡ab
+,
+¡ab2
+);
+
+2885
+ `STABSET
+(
+¡r
+);
+
+2887
+ `çl
+("Unsupported function…ipe");
+
+2892
+nÜm®_»tuº
+:
+
+2893
+[1] =
+¡r
+;
+
+2894 #ifdeà
+DEBUGGING
+
+
+2895 ià(
+debug
+) {
+
+2896
+dËv–
+--;
+
+2897 ià(
+debug
+ & 8)
+
+2898
+ `deb
+("% RETURNS \"%s\"\n",
+ÝÇme
+[
+Ýty³
+],
+ `¡r_g‘
+(
+¡r
+));
+
+2901 
+¬gÏ¡
+[0] + 1;
+
+2902
+ }
+}
+
+ @form.c
+
+14 
+ ~"EXTERN.h
+"
+
+15 
+ ~"³¾.h
+"
+
+20
+ $fÜm_·r£¬gs
+(
+fcmd
+)
+
+21 
+FCMD
+ *
+fcmd
+;
+
+23 
+i
+;
+
+24 
+ARG
+ *
+¬g
+;
+
+25 
+™ems
+;
+
+26
+STR
+ *
+¡r
+;
+
+27
+ARG
+ *
+ `·r£li¡
+();
+
+28
+lše_t
+
+Þdlše
+ =
+curcmd
+->
+c_lše
+;
+
+29 
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+31
+¡r
+ =
+fcmd
+->
+f_uŬ£d
+;
+
+32
+curcmd
+->
+c_lše
+ =
+fcmd
+->
+f_lše
+;
+
+33
+fcmd
+->
+f_uŬ£d
+ =
+NuΡr
+;
+
+34 ()
+ `§veh±r
+(&
+cur¡ash
+);
+
+35
+cur¡ash
+ =
+¡r
+->
+¡r_u
+.
+¡r_hash
+;
+
+36
+¬g
+ =
+ `·r£li¡
+(
+¡r
+);
+
+37
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+39
+™ems
+ =
+¬g
+->
+¬g_Ën
+ - 1;
+
+40 
+i
+ = 1; i <ð
+™ems
+; i++) {
+
+41 ià(!
+fcmd
+ || fcmd->
+f_ty³
+ =ð
+F_NULL
+)
+
+42
+ `çl
+("Too many field values");
+
+43
+ `dehoi¡
+(
+¬g
+,
+i
+);
+
+44
+fcmd
+->
+f_ex´
+ =
+ `make_Ý
+(
+O_ITEM
+,1,
+
+45
+¬g
+[
+i
+].
+¬g_±r
+.
+¬g_¬g
+,
+Nuάg
+,Nullarg);
+
+46 ià(
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+) {
+
+47 ià((
+fcmd
+->
+f_ex´
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_STAB
+)
+
+48
+fcmd
+->
+f_ex´
+[1].
+¬g_ty³
+ =
+A_LVAL
+;
+
+49 ià((
+fcmd
+->
+f_ex´
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_EXPR
+)
+
+50
+fcmd
+->
+f_ex´
+[1].
+¬g_ty³
+ =
+A_LEXPR
+;
+
+52
+ `çl
+("^ field„equires scalar†value");
+
+54
+fcmd
+ = fcmd->
+f_Ãxt
+;
+
+56 ià(
+fcmd
+ && fcmd->
+f_ty³
+)
+
+57
+ `çl
+("Notƒnough field values");
+
+58
+curcmd
+->
+c_lše
+ =
+Þdlše
+;
+
+59
+ `Saãä“
+(
+¬g
+);
+
+60
+ `¡r_ä“
+(
+¡r
+);
+
+61
+ }
+}
+
+63 
+ gÃwsize
+;
+
+65 
+ #CHKLEN
+(
+®low
+) \
+
+66
+Ãwsize
+ = (
+d
+ -
+Üec
+->
+o_¡r
+è+ (
+®low
+); \
+
+67 ià(
+Ãwsize
+ >ð
+cu¾’
+) { \
+
+68
+cu¾’
+ =
+d
+ -
+Üec
+->
+o_¡r
+; \
+
+69
+ `GROWSTR
+(&
+Üec
+->
+o_¡r
+,&Üec->
+o_Ën
+,Üec->o_ËÀ+ (
+®low
+)); \
+
+70
+d
+ =
+Üec
+->
+o_¡r
+ +
+cu¾’
+; \
+
+71
+cu¾’
+ =
+Üec
+->
+o_Ën
+ - 2; \
+
+72 }
+
+ )
+
+74
+ $fÜm©
+(
+Üec
+,
+fcmd
+,
+)
+
+75 
+ouŒec
+ *
+Üec
+;
+
+76 
+FCMD
+ *
+fcmd
+;
+
+77 
+;
+
+79 *
+d
+ =
+Üec
+->
+o_¡r
+;
+
+80 *
+s
+;
+
+81 
+cu¾’
+ =
+Üec
+->
+o_Ën
+ - 2;
+
+82 
+size
+;
+
+83
+FCMD
+ *
+Ãxtfcmd
+;
+
+84
+FCMD
+ *
+lšebeg
+ =
+fcmd
+;
+
+85 
+tmpch¬
+;
+
+86 *
+t
+;
+
+87
+CMD
+
+mycmd
+;
+
+88
+STR
+ *
+¡r
+;
+
+89 *
+chÝh”e
+;
+
+91
+mycmd
+.
+c_ty³
+ =
+C_NULL
+;
+
+92
+Üec
+->
+o_lšes
+ = 0;
+
+93 ;
+fcmd
+; fcmd =
+Ãxtfcmd
+) {
+
+94
+Ãxtfcmd
+ =
+fcmd
+->
+f_Ãxt
+;
+
+95
+ `CHKLEN
+(
+fcmd
+->
+f_´esize
+);
+
+96 ià(
+s
+ =
+fcmd
+->
+f_´e
+) {
+
+97 *
+s
+) {
+
+98 ià(*
+s
+ == '\n') {
+
+99 
+d
+ >
+Üec
+->
+o_¡r
+ && (d[-1] == ' ' || d[-1] == '\t'))
+
+100
+d
+--;
+
+101 ià(
+fcmd
+->
+f_æags
+ &
+FC_NOBLANK
+) {
+
+102 ià(
+d
+ =ð
+Üec
+->
+o_¡r
+ || d[-1] == '\n') {
+
+103
+Üec
+->
+o_lšes
+--;
+
+104
+lšebeg
+ =
+fcmd
+->
+f_Ãxt
+;
+
+107 ià(
+fcmd
+->
+f_æags
+ &
+FC_REPEAT
+)
+
+108
+Ãxtfcmd
+ =
+lšebeg
+;
+
+110
+lšebeg
+ =
+fcmd
+->
+f_Ãxt
+;
+
+113
+lšebeg
+ =
+fcmd
+->
+f_Ãxt
+;
+
+115 *
+d
+++ = *
+s
+++;
+
+118 ià(
+fcmd
+->
+f_uŬ£d
+)
+
+119
+ `fÜm_·r£¬gs
+(
+fcmd
+);
+
+120 
+fcmd
+->
+f_ty³
+) {
+
+121 
+F_NULL
+:
+
+122
+Üec
+->
+o_lšes
+++;
+
+124 
+F_LEFT
+:
+
+125 ()
+ `ev®
+(
+fcmd
+->
+f_ex´
+,
+G_SCALAR
+,
+);
+
+126
+¡r
+ =
+¡ack
+->
+¬y_¬¿y
+[
++1];
+
+127
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+128
+size
+ =
+fcmd
+->
+f_size
+;
+
+129
+ `CHKLEN
+(
+size
+);
+
+130
+chÝh”e
+ =
+NuÎch
+;
+
+131 
+size
+ && *
+s
+ && *s != '\n') {
+
+132 ià(*
+s
+ == '\t')
+
+133 *
+s
+ = ' ';
+
+134
+size
+--;
+
+135 ià(*
+s
+ &&
+ `šdex
+(
+chݣt
+,(*
+d
+++ = *s++)))
+
+136
+chÝh”e
+ =
+s
+;
+
+137 ià(*
+s
+ =ð'\n' && (
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+))
+
+138 *
+s
+ = ' ';
+
+140 ià(
+size
+)
+
+141
+chÝh”e
+ =
+s
+;
+
+142 ià(
+chÝh”e
+ && chÝh”<
+s
+ && * &&
+ `šdex
+(
+chݣt
+,*s))
+
+143
+chÝh”e
+ =
+s
+;
+
+144 ià(
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+) {
+
+145 ià(!
+chÝh”e
+)
+
+146
+chÝh”e
+ =
+s
+;
+
+147
+size
+ +ð(
+s
+ -
+chÝh”e
+);
+
+148
+d
+ -ð(
+s
+ -
+chÝh”e
+);
+
+149 ià(
+fcmd
+->
+f_æags
+ &
+FC_MORE
+ &&
+
+150 *
+chÝh”e
+ &&
+ `¡rNE
+(chophere,"\n")) {
+
+151 
+size
+ < 3) {
+
+152
+d
+--;
+
+153
+size
+++;
+
+155 
+d
+[-1] =ð' ' &&
+size
+ <
+fcmd
+->
+f_size
+) {
+
+156
+d
+--;
+
+157
+size
+++;
+
+159 *
+d
+++ = '.';
+
+160 *
+d
+++ = '.';
+
+161 *
+d
+++ = '.';
+
+162
+size
+ -= 3;
+
+164 *
+chÝh”e
+ &&
+ `šdex
+(
+chݣt
+,*chophere))
+
+165
+chÝh”e
+++;
+
+166
+ `¡r_chÝ
+(
+¡r
+,
+chÝh”e
+);
+
+168 ià(
+fcmd
+->
+f_Ãxt
+ && fcmd->f_Ãxt->
+f_´e
+[0] == '\n')
+
+169
+size
+ = 0;
+
+170 
+size
+) {
+
+171
+size
+--;
+
+172 *
+d
+++ = ' ';
+
+175 
+F_RIGHT
+:
+
+176 ()
+ `ev®
+(
+fcmd
+->
+f_ex´
+,
+G_SCALAR
+,
+);
+
+177
+¡r
+ =
+¡ack
+->
+¬y_¬¿y
+[
++1];
+
+178
+t
+ =
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+179
+size
+ =
+fcmd
+->
+f_size
+;
+
+180
+ `CHKLEN
+(
+size
+);
+
+181
+chÝh”e
+ =
+NuÎch
+;
+
+182 
+size
+ && *
+s
+ && *s != '\n') {
+
+183 ià(*
+s
+ == '\t')
+
+184 *
+s
+ = ' ';
+
+185
+size
+--;
+
+186 ià(*
+s
+ &&
+ `šdex
+(
+chݣt
+,*s++))
+
+187
+chÝh”e
+ =
+s
+;
+
+188 ià(*
+s
+ =ð'\n' && (
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+))
+
+189 *
+s
+ = ' ';
+
+191 ià(
+size
+)
+
+192
+chÝh”e
+ =
+s
+;
+
+193 ià(
+chÝh”e
+ && chÝh”<
+s
+ && * &&
+ `šdex
+(
+chݣt
+,*s))
+
+194
+chÝh”e
+ =
+s
+;
+
+195 ià(
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+) {
+
+196 ià(!
+chÝh”e
+)
+
+197
+chÝh”e
+ =
+s
+;
+
+198
+size
+ +ð(
+s
+ -
+chÝh”e
+);
+
+199
+s
+ =
+chÝh”e
+;
+
+200 *
+chÝh”e
+ &&
+ `šdex
+(
+chݣt
+,*chophere))
+
+201
+chÝh”e
+++;
+
+203
+tmpch¬
+ = *
+s
+;
+
+204 *
+s
+ = '\0';
+
+205 
+size
+) {
+
+206
+size
+--;
+
+207 *
+d
+++ = ' ';
+
+209
+size
+ =
+s
+ -
+t
+;
+
+210 ()
+ `bcÝy
+(
+t
+,
+d
+,
+size
+);
+
+211
+d
+ +ð
+size
+;
+
+212 *
+s
+ =
+tmpch¬
+;
+
+213 ià(
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+)
+
+214
+ `¡r_chÝ
+(
+¡r
+,
+chÝh”e
+);
+
+216 
+F_CENTER
+: {
+
+217 
+h®fsize
+;
+
+219 ()
+ `ev®
+(
+fcmd
+->
+f_ex´
+,
+G_SCALAR
+,
+);
+
+220
+¡r
+ =
+¡ack
+->
+¬y_¬¿y
+[
++1];
+
+221
+t
+ =
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+222
+size
+ =
+fcmd
+->
+f_size
+;
+
+223
+ `CHKLEN
+(
+size
+);
+
+224
+chÝh”e
+ =
+NuÎch
+;
+
+225 
+size
+ && *
+s
+ && *s != '\n') {
+
+226 ià(*
+s
+ == '\t')
+
+227 *
+s
+ = ' ';
+
+228
+size
+--;
+
+229 ià(*
+s
+ &&
+ `šdex
+(
+chݣt
+,*s++))
+
+230
+chÝh”e
+ =
+s
+;
+
+231 ià(*
+s
+ =ð'\n' && (
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+))
+
+232 *
+s
+ = ' ';
+
+234 ià(
+size
+)
+
+235
+chÝh”e
+ =
+s
+;
+
+236 ià(
+chÝh”e
+ && chÝh”<
+s
+ && * &&
+ `šdex
+(
+chݣt
+,*s))
+
+237
+chÝh”e
+ =
+s
+;
+
+238 ià(
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+) {
+
+239 ià(!
+chÝh”e
+)
+
+240
+chÝh”e
+ =
+s
+;
+
+241
+size
+ +ð(
+s
+ -
+chÝh”e
+);
+
+242
+s
+ =
+chÝh”e
+;
+
+243 *
+chÝh”e
+ &&
+ `šdex
+(
+chݣt
+,*chophere))
+
+244
+chÝh”e
+++;
+
+246
+tmpch¬
+ = *
+s
+;
+
+247 *
+s
+ = '\0';
+
+248
+h®fsize
+ =
+size
+ / 2;
+
+249 
+size
+ >
+h®fsize
+) {
+
+250
+size
+--;
+
+251 *
+d
+++ = ' ';
+
+253
+size
+ =
+s
+ -
+t
+;
+
+254 ()
+ `bcÝy
+(
+t
+,
+d
+,
+size
+);
+
+255
+d
+ +ð
+size
+;
+
+256 *
+s
+ =
+tmpch¬
+;
+
+257 ià(
+fcmd
+->
+f_Ãxt
+ && fcmd->f_Ãxt->
+f_´e
+[0] == '\n')
+
+258
+size
+ = 0;
+
+260
+size
+ =
+h®fsize
+;
+
+261 
+size
+) {
+
+262
+size
+--;
+
+263 *
+d
+++ = ' ';
+
+265 ià(
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+)
+
+266
+ `¡r_chÝ
+(
+¡r
+,
+chÝh”e
+);
+
+269 
+F_LINES
+:
+
+270 ()
+ `ev®
+(
+fcmd
+->
+f_ex´
+,
+G_SCALAR
+,
+);
+
+271
+¡r
+ =
+¡ack
+->
+¬y_¬¿y
+[
++1];
+
+272
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+273
+size
+ =
+ `¡r_Ën
+(
+¡r
+);
+
+274
+ `CHKLEN
+(
+size
++1);
+
+275
+Üec
+->
+o_lšes
+ +ð
+ `couÁlšes
+(
+s
+,
+size
+) - 1;
+
+276 ()
+ `bcÝy
+(
+s
+,
+d
+,
+size
+);
+
+277
+d
+ +ð
+size
+;
+
+278 ià(
+size
+ &&
+s
+[size-1] != '\n') {
+
+279 *
+d
+++ = '\n';
+
+280
+Üec
+->
+o_lšes
+++;
+
+282
+lšebeg
+ =
+fcmd
+->
+f_Ãxt
+;
+
+284 
+F_DECIMAL
+: {
+
+285 
+v®ue
+;
+
+287 ()
+ `ev®
+(
+fcmd
+->
+f_ex´
+,
+G_SCALAR
+,
+);
+
+288
+¡r
+ =
+¡ack
+->
+¬y_¬¿y
+[
++1];
+
+289
+size
+ =
+fcmd
+->
+f_size
+;
+
+290
+ `CHKLEN
+(
+size
+);
+
+293 ià((
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+è&& !
+¡r
+->
+¡r_pok
+ && !¡r->
+¡r_nok
+) {
+
+294 
+size
+) {
+
+295
+size
+--;
+
+296 *
+d
+++ = ' ';
+
+300
+v®ue
+ =
+ `¡r_gnum
+(
+¡r
+);
+
+301 ià(
+fcmd
+->
+f_æags
+ &
+FC_DP
+) {
+
+302
+ `¥rštf
+(
+d
+, "%#*.*f",
+size
+,
+fcmd
+->
+f_decim®s
+,
+v®ue
+);
+
+304
+ `¥rštf
+(
+d
+, "%*.0f",
+size
+,
+v®ue
+);
+
+306
+d
+ +ð
+size
+;
+
+311
+ `CHKLEN
+(1);
+
+312 *
+d
+++ = '\0';
+
+313
+ }
+}
+
+315
+ $couÁlšes
+(
+s
+,
+size
+)
+
+316 *
+s
+;
+
+317 
+size
+;
+
+319 
+couÁ
+ = 0;
+
+321 
+size
+--) {
+
+322 ià(*
+s
+++ == '\n')
+
+323
+couÁ
+++;
+
+325 
+couÁ
+;
+
+326
+ }
+}
+
+328
+ $do_wr™e
+(
+Üec
+,
+¡io
+,
+)
+
+329 
+ouŒec
+ *
+Üec
+;
+
+330 
+STIO
+ *
+¡io
+;
+
+331 
+;
+
+333
+FILE
+ *
+oå
+ =
+¡io
+->ofp;
+
+335 #ifdeà
+DEBUGGING
+
+
+336 ià(
+debug
+ & 256)
+
+337
+ `årštf
+(
+¡d”r
+,"left=%ld,odo=%ld\n",
+
+338 ()
+¡io
+->
+lšes_Ëá
+, ()
+Üec
+->
+o_lšes
+);
+
+340 ià(
+¡io
+->
+lšes_Ëá
+ <
+Üec
+->
+o_lšes
+) {
+
+341 ià(!
+¡io
+->
+tÝ_¡ab
+) {
+
+342
+STAB
+ *
+tݡab
+;
+
+344 ià(!
+¡io
+->
+tÝ_Çme
+)
+
+345
+¡io
+->
+tÝ_Çme
+ =
+ `§ve¡r
+("top");
+
+346
+tݡab
+ =
+ `¡ab’t
+(
+¡io
+->
+tÝ_Çme
+,
+FALSE
+);
+
+347 ià(!
+tݡab
+ || !
+ `¡ab_fÜm
+(topstab)) {
+
+348
+¡io
+->
+lšes_Ëá
+ = 100000000;
+
+349 
+fÜg‘_tÝ
+;
+
+351
+¡io
+->
+tÝ_¡ab
+ =
+tݡab
+;
+
+353 ià(
+¡io
+->
+lšes_Ëá
+ >ð0 && stio->
+·ge
+ > 0)
+
+354 ()
+ `putc
+('\f',
+oå
+);
+
+355
+¡io
+->
+lšes_Ëá
+ = stio->
+·ge_Ën
+;
+
+356
+¡io
+->
+·ge
+++;
+
+357
+ `fÜm©
+(&
+tݻc
+,
+ `¡ab_fÜm
+(
+¡io
+->
+tÝ_¡ab
+),
+);
+
+358
+ `åuts
+(
+tݻc
+.
+o_¡r
+,
+oå
+);
+
+359
+¡io
+->
+lšes_Ëá
+ -ð
+tݻc
+.
+o_lšes
+;
+
+361
+fÜg‘_tÝ
+:
+
+362
+ `åuts
+(
+Üec
+->
+o_¡r
+,
+oå
+);
+
+363
+¡io
+->
+lšes_Ëá
+ -ð
+Üec
+->
+o_lšes
+;
+
+364
+ }
+}
+
+ @form.h
+
+14 
+ #F_NULL
+ 0
+
+ )
+
+15 
+ #F_LEFT
+ 1
+
+ )
+
+16 
+ #F_RIGHT
+ 2
+
+ )
+
+17 
+ #F_CENTER
+ 3
+
+ )
+
+18 
+ #F_LINES
+ 4
+
+ )
+
+19 
+ #F_DECIMAL
+ 5
+
+ )
+
+21 
+ sfÜmcmd
+ {
+
+22 
+fÜmcmd
+ *
+ mf_Ãxt
+;
+
+23
+ARG
+ *
+ mf_ex´
+;
+
+24
+STR
+ *
+ mf_uŬ£d
+;
+
+25
+lše_t
+
+ mf_lše
+;
+
+26 *
+ mf_´e
+;
+
+27 
+ mf_´esize
+;
+
+28 
+ mf_size
+;
+
+29 
+ mf_decim®s
+;
+
+30 
+ mf_ty³
+;
+
+31 
+ mf_æags
+;
+
+34 
+ #FC_CHOP
+ 1
+
+ )
+
+35 
+ #FC_NOBLANK
+ 2
+
+ )
+
+36 
+ #FC_MORE
+ 4
+
+ )
+
+37 
+ #FC_REPEAT
+ 8
+
+ )
+
+38 
+ #FC_DP
+ 16
+
+ )
+
+40 
+ #NuÎfcmd
+
+ `NuÎ
+(
+FCMD
+*)
+
+ )
+
+42
+EXT
+ *
+chݣt
+
+INIT
+(" \n-");
+
+ @handy.h
+
+14 #ifdeà
+NULL
+
+
+15 #undeà
+NULL
+
+
+17 #iâdeà
+I286
+
+
+18 
+ #NULL
+ 0
+
+ )
+
+20 
+ #NULL
+ 0L
+
+ )
+
+22 
+ #NuÎ
+(
+ty³
+è(Ñy³)
+NULL
+)
+
+ )
+
+23 
+ #NuÎch
+
+ `NuÎ
+(*)
+
+ )
+
+24 
+ #NuÎå
+
+ `NuÎ
+(
+FILE
+*)
+
+ )
+
+26 #ifdeà
+UTS
+
+
+27 
+ #boÞ
+ 
+
+ )
+
+29 
+ #boÞ
+ 
+
+ )
+
+32 #ifdeà
+TRUE
+
+
+33 #undeà
+TRUE
+
+
+35 #ifdeà
+FALSE
+
+
+36 #undeà
+FALSE
+
+
+38 
+ #TRUE
+ (1)
+
+ )
+
+39 
+ #FALSE
+ (0)
+
+ )
+
+41 
+ #CŽ
+(
+ch
+è(ch & 037)
+
+ )
+
+43 
+ #¡rNE
+(
+s1
+,
+s2
+è(
+ `¡rcmp
+(s1,s2))
+
+ )
+
+44 
+ #¡rEQ
+(
+s1
+,
+s2
+è(!
+ `¡rcmp
+(s1,s2))
+
+ )
+
+45 
+ #¡rLT
+(
+s1
+,
+s2
+è(
+ `¡rcmp
+(s1,s2è< 0)
+
+ )
+
+46 
+ #¡rLE
+(
+s1
+,
+s2
+è(
+ `¡rcmp
+(s1,s2è<ð0)
+
+ )
+
+47 
+ #¡rGT
+(
+s1
+,
+s2
+è(
+ `¡rcmp
+(s1,s2è> 0)
+
+ )
+
+48 
+ #¡rGE
+(
+s1
+,
+s2
+è(
+ `¡rcmp
+(s1,s2è>ð0)
+
+ )
+
+49 
+ #¡ºNE
+(
+s1
+,
+s2
+,
+l
+è(
+ `¡ºcmp
+(s1,s2,l))
+
+ )
+
+50 
+ #¡ºEQ
+(
+s1
+,
+s2
+,
+l
+è(!
+ `¡ºcmp
+(s1,s2,l))
+
+ )
+
+52 
+ #MEM_SIZE
+ 
+
+ )
+
+55 
+ tlše_t
+;
+
+56 #ifdeà
+lšt
+
+
+57 
+ #NOLINE
+ ((
+lše_t
+)0)
+
+ )
+
+59 
+ #NOLINE
+ ((
+lše_t
+è65535)
+
+ )
+
+62 #iâdeà
+lšt
+
+
+63 #iâdeà
+LEAKTEST
+
+
+64 *
+§ãm®loc
+();
+
+65 *
+§ã»®loc
+();
+
+66 
+§ãä“
+();
+
+67 #iâdeà
+MSDOS
+
+
+68 
+ #New
+(
+x
+,
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ãm®loc
+((
+MEM_SIZE
+)(Òè* Ñ))))
+
+ )
+
+69 
+ #Newc
+(
+x
+,
+v
+,
+n
+,
+t
+,
+c
+è(v = (c*)
+ `§ãm®loc
+((
+MEM_SIZE
+)(Òè* Ñ))))
+
+ )
+
+70 
+ #Newz
+(
+x
+,
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ãm®loc
+((
+MEM_SIZE
+)((n) * (t)))), \
+
+71
+ `bz”o
+((*)(
+v
+), (
+n
+è* (
+t
+))
+
+ )
+
+72 
+ #R’ew
+(
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ã»®loc
+((*)(v),(
+MEM_SIZE
+)(Ò)*Ñ))))
+
+ )
+
+73 
+ #R’ewc
+(
+v
+,
+n
+,
+t
+,
+c
+è(v = (c*)
+ `§ã»®loc
+((*)(v),(
+MEM_SIZE
+)(Ò)*Ñ))))
+
+ )
+
+75 
+ #New
+(
+x
+,
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ãm®loc
+((()Òè* Ñ))))
+
+ )
+
+76 
+ #Newc
+(
+x
+,
+v
+,
+n
+,
+t
+,
+c
+è(v = (c*)
+ `§ãm®loc
+((()Òè* Ñ))))
+
+ )
+
+77 
+ #Newz
+(
+x
+,
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ãm®loc
+((()(n) * (t)))), \
+
+78
+ `bz”o
+((*)(
+v
+), (
+n
+è* (
+t
+))
+
+ )
+
+79 
+ #R’ew
+(
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ã»®loc
+((*)(v),(()Ò)*Ñ))))
+
+ )
+
+80 
+ #R’ewc
+(
+v
+,
+n
+,
+t
+,
+c
+è(v = (c*)
+ `§ã»®loc
+((*)(v),(()Ò)*Ñ))))
+
+ )
+
+83 #ifdeà
+IGNOREFREE
+
+
+84 
+ #Saãä“
+(
+d
+è{};
+
+ )
+
+86 
+ #Saãä“
+(
+d
+ `§ãä“
+((*)d)
+
+ )
+
+89 
+ #SŒ_Ãw
+(
+x
+,
+Ën
+ `¡r_Ãw
+Ö’)
+
+ )
+
+91 *
+§ãxm®loc
+();
+
+92 *
+§ãx»®loc
+();
+
+93 
+§ãxä“
+();
+
+94 
+ #New
+(
+x
+,
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ãxm®loc
+(x,(
+MEM_SIZE
+)(Òè* Ñ))))
+
+ )
+
+95 
+ #Newc
+(
+x
+,
+v
+,
+n
+,
+t
+,
+c
+è(v = (c*)
+ `§ãxm®loc
+(x,(
+MEM_SIZE
+)(Òè* Ñ))))
+
+ )
+
+96 
+ #Newz
+(
+x
+,
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ãxm®loc
+(x,(
+MEM_SIZE
+)((n) * (t)))), \
+
+97
+ `bz”o
+((*)(
+v
+), (
+n
+è* (
+t
+))
+
+ )
+
+98 
+ #R’ew
+(
+v
+,
+n
+,
+t
+è(v = (t*)
+ `§ãx»®loc
+((*)(v),(
+MEM_SIZE
+)(Ò)*Ñ))))
+
+ )
+
+99 
+ #R’ewc
+(
+v
+,
+n
+,
+t
+,
+c
+è(v = (c*)
+ `§ãx»®loc
+((*)(v),(
+MEM_SIZE
+)(Ò)*Ñ))))
+
+ )
+
+100 
+ #Saãä“
+(
+d
+ `§ãxä“
+((*)d)
+
+ )
+
+101 
+ #SŒ_Ãw
+(
+x
+,
+Ën
+ `¡r_Ãw
+(x,Ën)
+
+ )
+
+102 
+ #MAXXCOUNT
+ 1200
+
+ )
+
+103 
+ gxcouÁ
+[
+MAXXCOUNT
+];
+
+104 
+ gÏ¡xcouÁ
+[
+MAXXCOUNT
+];
+
+106 
+ #CÝy
+(
+s
+,
+d
+,
+n
+,
+t
+è()
+ `bcÝy
+((*)(s),(*)(d), (nè* Ñ))
+
+ )
+
+107 
+ #Z”o
+(
+d
+,
+n
+,
+t
+è()
+ `bz”o
+((*)(d), (nè* Ñ))
+
+ )
+
+109 
+ #New
+(
+x
+,
+v
+,
+n
+,
+s
+è(v =
+ `NuÎ
+( *))
+
+ )
+
+110 
+ #Newc
+(
+x
+,
+v
+,
+n
+,
+s
+,
+c
+è(v =
+ `NuÎ
+( *))
+
+ )
+
+111 
+ #Newz
+(
+x
+,
+v
+,
+n
+,
+s
+è(v =
+ `NuÎ
+( *))
+
+ )
+
+112 
+ #R’ew
+(
+v
+,
+n
+,
+s
+è(v =
+ `NuÎ
+( *))
+
+ )
+
+113 
+ #CÝy
+(
+s
+,
+d
+,
+n
+,
+t
+)
+
+ )
+
+114 
+ #Z”o
+(
+d
+,
+n
+,
+t
+)
+
+ )
+
+115 
+ #Saãä“
+(
+d
+èd =
+ )
+d
+
+ @hash.c
+
+14 
+ ~"EXTERN.h
+"
+
+15 
+ ~"³¾.h
+"
+
+17 
+ gcÛff
+[] = {
+
+27 
+hä“’Œ›s
+();
+
+29
+STR
+ *
+
+30
+ $hãtch
+(
+tb
+,
+key
+,
+kËn
+,
+lv®
+)
+
+31 
+HASH
+ *
+tb
+;
+
+32 *
+key
+;
+
+33 
+kËn
+;
+
+34 
+lv®
+;
+
+36 *
+s
+;
+
+37 
+i
+;
+
+38 
+hash
+;
+
+39 
+HENT
+ *
+’Œy
+;
+
+40 
+maxi
+;
+
+41
+STR
+ *
+¡r
+;
+
+42 #ifdeà
+SOME_DBM
+
+
+43
+d©um
+
+dkey
+,
+dcÚ‹Á
+;
+
+46 ià(!
+tb
+)
+
+47  &
+¡r_undef
+;
+
+48 ià(!
+tb
+->
+tbl_¬¿y
+) {
+
+49 ià(
+lv®
+)
+
+50
+ `Newz
+(503,
+tb
+->
+tbl_¬¿y
+,b->
+tbl_max
+ + 1,
+HENT
+*);
+
+52  &
+¡r_undef
+;
+
+62 ià(!
+tb
+->
+tbl_cÛffsize
+)
+
+63
+hash
+ = *
+key
+ + 128 * key[1] + 128 * key[
+kËn
+-1];
+
+65 ià(
+kËn
+ <
+tb
+->
+tbl_cÛffsize
+)
+
+66
+maxi
+ =
+kËn
+;
+
+68
+maxi
+ =
+tb
+->
+tbl_cÛffsize
+;
+
+69 
+s
+=
+key
+,
+i
+=0,
+hash
+ = 0;
+
+70
+i
+ <
+maxi
+;
+
+71
+s
+++,
+i
+++,
+hash
+ *= 5) {
+
+72
+hash
+ +ð*
+s
+ *
+cÛff
+[
+i
+];
+
+76
+’Œy
+ =
+tb
+->
+tbl_¬¿y
+[
+hash
+ &b->
+tbl_max
+];
+
+77 ;
+’Œy
+;ƒÁry =ƒÁry->
+h’t_Ãxt
+) {
+
+78 ià(
+’Œy
+->
+h’t_hash
+ !ð
+hash
+)
+
+80 ià(
+’Œy
+->
+h’t_kËn
+ !ð
+kËn
+)
+
+82 ià(
+ `bcmp
+(
+’Œy
+->
+h’t_key
+,
+key
+,
+kËn
+))
+
+84 
+’Œy
+->
+h’t_v®
+;
+
+86 #ifdeà
+SOME_DBM
+
+
+87 ià(
+tb
+->
+tbl_dbm
+) {
+
+88
+dkey
+.
+d±r
+ =
+key
+;
+
+89
+dkey
+.
+dsize
+ =
+kËn
+;
+
+90 #ifdeà
+HAS_GDBM
+
+
+91
+dcÚ‹Á
+ =
+ `gdbm_ãtch
+(
+tb
+->
+tbl_dbm
+,
+dkey
+);
+
+93
+dcÚ‹Á
+ =
+ `dbm_ãtch
+(
+tb
+->
+tbl_dbm
+,
+dkey
+);
+
+95 ià(
+dcÚ‹Á
+.
+d±r
+) {
+
+96
+¡r
+ =
+ `SŒ_Ãw
+(60,
+dcÚ‹Á
+.
+dsize
+);
+
+97
+ `¡r_n£t
+(
+¡r
+,
+dcÚ‹Á
+.
+d±r
+,dcÚ‹Á.
+dsize
+);
+
+98
+ `h¡Üe
+(
+tb
+,
+key
+,
+kËn
+,
+¡r
+,
+hash
+);
+
+99 
+¡r
+;
+
+103 ià(
+lv®
+) {
+
+104
+¡r
+ =
+ `SŒ_Ãw
+(61,0);
+
+105
+ `h¡Üe
+(
+tb
+,
+key
+,
+kËn
+,
+¡r
+,
+hash
+);
+
+106 
+¡r
+;
+
+108  &
+¡r_undef
+;
+
+109
+ }
+}
+
+111
+boÞ
+
+
+112
+ $h¡Üe
+(
+tb
+,
+key
+,
+kËn
+,
+v®
+,
+hash
+)
+
+113 
+HASH
+ *
+tb
+;
+
+114 *
+key
+;
+
+115 
+kËn
+;
+
+116
+STR
+ *
+v®
+;
+
+117 
+hash
+;
+
+119 *
+s
+;
+
+120 
+i
+;
+
+121 
+HENT
+ *
+’Œy
+;
+
+122 
+HENT
+ **
+ÛÁry
+;
+
+123 
+maxi
+;
+
+125 ià(!
+tb
+)
+
+126 
+FALSE
+;
+
+128 ià(
+hash
+)
+
+130 ià(!
+tb
+->
+tbl_cÛffsize
+)
+
+131
+hash
+ = *
+key
+ + 128 * key[1] + 128 * key[
+kËn
+-1];
+
+133 ià(
+kËn
+ <
+tb
+->
+tbl_cÛffsize
+)
+
+134
+maxi
+ =
+kËn
+;
+
+136
+maxi
+ =
+tb
+->
+tbl_cÛffsize
+;
+
+137 
+s
+=
+key
+,
+i
+=0,
+hash
+ = 0;
+
+138
+i
+ <
+maxi
+;
+
+139
+s
+++,
+i
+++,
+hash
+ *= 5) {
+
+140
+hash
+ +ð*
+s
+ *
+cÛff
+[
+i
+];
+
+144 ià(!
+tb
+->
+tbl_¬¿y
+)
+
+145
+ `Newz
+(505,
+tb
+->
+tbl_¬¿y
+,b->
+tbl_max
+ + 1,
+HENT
+*);
+
+147
+ÛÁry
+ = &(
+tb
+->
+tbl_¬¿y
+[
+hash
+ &b->
+tbl_max
+]);
+
+148
+i
+ = 1;
+
+150 
+’Œy
+ = *
+ÛÁry
+;ƒÁry;
+i
+=0,ƒÁry =ƒÁry->
+h’t_Ãxt
+) {
+
+151 ià(
+’Œy
+->
+h’t_hash
+ !ð
+hash
+)
+
+153 ià(
+’Œy
+->
+h’t_kËn
+ !ð
+kËn
+)
+
+155 ià(
+ `bcmp
+(
+’Œy
+->
+h’t_key
+,
+key
+,
+kËn
+))
+
+157
+ `Saãä“
+(
+’Œy
+->
+h’t_v®
+);
+
+158
+’Œy
+->
+h’t_v®
+ =
+v®
+;
+
+159 
+TRUE
+;
+
+161
+ `New
+(501,
+’Œy
+, 1,
+HENT
+);
+
+163
+’Œy
+->
+h’t_kËn
+ =
+kËn
+;
+
+164
+’Œy
+->
+h’t_key
+ =
+ `n§ve¡r
+(
+key
+,
+kËn
+);
+
+165
+’Œy
+->
+h’t_v®
+ =
+v®
+;
+
+166
+’Œy
+->
+h’t_hash
+ =
+hash
+;
+
+167
+’Œy
+->
+h’t_Ãxt
+ = *
+ÛÁry
+;
+
+168 *
+ÛÁry
+ =
+’Œy
+;
+
+172 ià(
+i
+) {
+
+173
+tb
+->
+tbl_fžl
+++;
+
+174 #ifdeà
+SOME_DBM
+
+
+175 ià(
+tb
+->
+tbl_dbm
+ &&b->
+tbl_max
+ >ð
+DBM_CACHE_MAX
+)
+
+176 
+FALSE
+;
+
+178 ià(
+tb
+->
+tbl_fžl
+ >b->
+tbl_do¥l™
+)
+
+179
+ `h¥l™
+(
+tb
+);
+
+181 #ifdeà
+SOME_DBM
+
+
+182 ià(
+tb
+->
+tbl_dbm
+) {
+
+183 
+ `h’td–ayä“
+();
+
+185
+’Œy
+ =
+tb
+->
+tbl_¬¿y
+[
+hash
+ &b->
+tbl_max
+];
+
+186
+ÛÁry
+ = &
+’Œy
+->
+h’t_Ãxt
+;
+
+187
+’Œy
+ = *
+ÛÁry
+;
+
+188 
+’Œy
+) {
+
+189 *
+ÛÁry
+ =
+’Œy
+->
+h’t_Ãxt
+;
+
+190
+ `h’td–ayä“
+(
+’Œy
+);
+
+191
+’Œy
+ = *
+ÛÁry
+;
+
+196 
+FALSE
+;
+
+197
+ }
+}
+
+199
+STR
+ *
+
+200
+ $hd–‘e
+(
+tb
+,
+key
+,
+kËn
+)
+
+201 
+HASH
+ *
+tb
+;
+
+202 *
+key
+;
+
+203 
+kËn
+;
+
+205 *
+s
+;
+
+206 
+i
+;
+
+207 
+hash
+;
+
+208 
+HENT
+ *
+’Œy
+;
+
+209 
+HENT
+ **
+ÛÁry
+;
+
+210
+STR
+ *
+¡r
+;
+
+211 
+maxi
+;
+
+212 #ifdeà
+SOME_DBM
+
+
+213
+d©um
+
+dkey
+;
+
+216 ià(!
+tb
+ || !tb->
+tbl_¬¿y
+)
+
+217 
+NuΡr
+;
+
+218 ià(!
+tb
+->
+tbl_cÛffsize
+)
+
+219
+hash
+ = *
+key
+ + 128 * key[1] + 128 * key[
+kËn
+-1];
+
+221 ià(
+kËn
+ <
+tb
+->
+tbl_cÛffsize
+)
+
+222
+maxi
+ =
+kËn
+;
+
+224
+maxi
+ =
+tb
+->
+tbl_cÛffsize
+;
+
+225 
+s
+=
+key
+,
+i
+=0,
+hash
+ = 0;
+
+226
+i
+ <
+maxi
+;
+
+227
+s
+++,
+i
+++,
+hash
+ *= 5) {
+
+228
+hash
+ +ð*
+s
+ *
+cÛff
+[
+i
+];
+
+232
+ÛÁry
+ = &(
+tb
+->
+tbl_¬¿y
+[
+hash
+ &b->
+tbl_max
+]);
+
+233
+’Œy
+ = *
+ÛÁry
+;
+
+234
+i
+ = 1;
+
+235 ;
+’Œy
+;
+i
+=0,
+ÛÁry
+ = &’Œy->
+h’t_Ãxt
+,ƒntry = *oentry) {
+
+236 ià(
+’Œy
+->
+h’t_hash
+ !ð
+hash
+)
+
+238 ià(
+’Œy
+->
+h’t_kËn
+ !ð
+kËn
+)
+
+240 ià(
+ `bcmp
+(
+’Œy
+->
+h’t_key
+,
+key
+,
+kËn
+))
+
+242 *
+ÛÁry
+ =
+’Œy
+->
+h’t_Ãxt
+;
+
+243
+¡r
+ =
+ `¡r_mÜl
+(
+’Œy
+->
+h’t_v®
+);
+
+244
+ `h’tä“
+(
+’Œy
+);
+
+245 ià(
+i
+)
+
+246
+tb
+->
+tbl_fžl
+--;
+
+247 #ifdeà
+SOME_DBM
+
+
+248
+do_dbm_d–‘e
+:
+
+249 ià(
+tb
+->
+tbl_dbm
+) {
+
+250
+dkey
+.
+d±r
+ =
+key
+;
+
+251
+dkey
+.
+dsize
+ =
+kËn
+;
+
+252 #ifdeà
+HAS_GDBM
+
+
+253
+ `gdbm_d–‘e
+(
+tb
+->
+tbl_dbm
+,
+dkey
+);
+
+255
+ `dbm_d–‘e
+(
+tb
+->
+tbl_dbm
+,
+dkey
+);
+
+259 
+¡r
+;
+
+261 #ifdeà
+SOME_DBM
+
+
+262
+¡r
+ =
+NuΡr
+;
+
+263 
+do_dbm_d–‘e
+;
+
+265 
+NuΡr
+;
+
+267
+ }
+}
+
+269
+ $h¥l™
+(
+tb
+)
+
+270
+HASH
+ *
+tb
+;
+
+272 
+Þdsize
+ =
+tb
+->
+tbl_max
+ + 1;
+
+273 
+Ãwsize
+ =
+Þdsize
+ * 2;
+
+274 
+i
+;
+
+275 
+HENT
+ **
+a
+;
+
+276 
+HENT
+ **
+b
+;
+
+277 
+HENT
+ *
+’Œy
+;
+
+278 
+HENT
+ **
+ÛÁry
+;
+
+280
+a
+ =
+tb
+->
+tbl_¬¿y
+;
+
+281
+ `R’ew
+(
+a
+,
+Ãwsize
+,
+HENT
+*);
+
+282
+ `Z”o
+(&
+a
+[
+Þdsize
+], oldsize,
+HENT
+*);
+
+283
+tb
+->
+tbl_max
+ = --
+Ãwsize
+;
+
+284
+tb
+->
+tbl_do¥l™
+ =b->
+tbl_max
+ *
+FILLPCT
+ / 100;
+
+285
+tb
+->
+tbl_¬¿y
+ =
+a
+;
+
+287 
+i
+=0; i<
+Þdsize
+; i++,
+a
+++) {
+
+288 ià(!*
+a
+)
+
+290
+b
+ =
+a
++
+Þdsize
+;
+
+291 
+ÛÁry
+ =
+a
+,
+’Œy
+ = *a;ƒntry;ƒntry = *oentry) {
+
+292 ià((
+’Œy
+->
+h’t_hash
+ &
+Ãwsize
+è!ð
+i
+) {
+
+293 *
+ÛÁry
+ =
+’Œy
+->
+h’t_Ãxt
+;
+
+294
+’Œy
+->
+h’t_Ãxt
+ = *
+b
+;
+
+295 ià(!*
+b
+)
+
+296
+tb
+->
+tbl_fžl
+++;
+
+297 *
+b
+ =
+’Œy
+;
+
+301
+ÛÁry
+ = &
+’Œy
+->
+h’t_Ãxt
+;
+
+303 ià(!*
+a
+)
+
+304
+tb
+->
+tbl_fžl
+--;
+
+306
+ }
+}
+
+308
+HASH
+ *
+
+309
+ $hÃw
+(
+look©
+)
+
+310 
+look©
+;
+
+312 
+HASH
+ *
+tb
+;
+
+314
+ `Newz
+(502,
+tb
+, 1,
+HASH
+);
+
+315 ià(
+look©
+) {
+
+316
+tb
+->
+tbl_cÛffsize
+ =
+look©
+;
+
+317
+tb
+->
+tbl_max
+ = 7;
+
+318
+tb
+->
+tbl_do¥l™
+ =b->
+tbl_max
+ *
+FILLPCT
+ / 100;
+
+321
+tb
+->
+tbl_max
+ = 127;
+
+322
+tb
+->
+tbl_do¥l™
+ = 128;
+
+324
+tb
+->
+tbl_fžl
+ = 0;
+
+325 #ifdeà
+SOME_DBM
+
+
+326
+tb
+->
+tbl_dbm
+ = 0;
+
+328 ()
+ `h™”š™
+(
+tb
+);
+
+329 
+tb
+;
+
+330
+ }
+}
+
+333
+ $h’tä“
+(
+h’t
+)
+
+334 
+HENT
+ *
+h’t
+;
+
+336 ià(!
+h’t
+)
+
+338
+ `¡r_ä“
+(
+h’t
+->
+h’t_v®
+);
+
+339
+ `Saãä“
+(
+h’t
+->
+h’t_key
+);
+
+340
+ `Saãä“
+(
+h’t
+);
+
+341
+ }
+}
+
+344
+ $h’td–ayä“
+(
+h’t
+)
+
+345 
+HENT
+ *
+h’t
+;
+
+347 ià(!
+h’t
+)
+
+349
+ `¡r_2mÜl
+(
+h’t
+->
+h’t_v®
+);
+
+350
+ `Saãä“
+(
+h’t
+->
+h’t_key
+);
+
+351
+ `Saãä“
+(
+h’t
+);
+
+352
+ }
+}
+
+355
+ $hþ—r
+(
+tb
+,
+dodbm
+)
+
+356 
+HASH
+ *
+tb
+;
+
+357 
+dodbm
+;
+
+359 ià(!
+tb
+)
+
+361
+ `hä“’Œ›s
+(
+tb
+,
+dodbm
+);
+
+362
+tb
+->
+tbl_fžl
+ = 0;
+
+363 #iâdeà
+lšt
+
+
+364 ià(
+tb
+->
+tbl_¬¿y
+)
+
+365 ()
+ `bz”o
+((*)
+tb
+->
+tbl_¬¿y
+, (tb->
+tbl_max
+ + 1è* (
+HENT
+*));
+
+367
+ }
+}
+
+370
+ $hä“’Œ›s
+(
+tb
+,
+dodbm
+)
+
+371 
+HASH
+ *
+tb
+;
+
+372 
+dodbm
+;
+
+374 
+HENT
+ *
+h’t
+;
+
+375 
+HENT
+ *
+oh’t
+ =
+ `NuÎ
+(HENT*);
+
+376 #ifdeà
+SOME_DBM
+
+
+377
+d©um
+
+dkey
+;
+
+378
+d©um
+
+Ãxtdkey
+;
+
+379 #ifdeà
+HAS_GDBM
+
+
+380
+GDBM_FILE
+
+Þd_dbm
+;
+
+382 #ifdeà
+HAS_NDBM
+
+
+383
+DBM
+ *
+Þd_dbm
+;
+
+385 
+Þd_dbm
+;
+
+390 ià(!
+tb
+ || !tb->
+tbl_¬¿y
+)
+
+392 #ifdeà
+SOME_DBM
+
+
+393 ià((
+Þd_dbm
+ =
+tb
+->
+tbl_dbm
+è&&
+dodbm
+) {
+
+394 #ifdeà
+HAS_GDBM
+
+
+395 
+dkey
+ =
+ `gdbm_fœ¡key
+(
+tb
+->
+tbl_dbm
+), dkey.
+d±r
+) {
+
+397 
+dkey
+ =
+ `dbm_fœ¡key
+(
+tb
+->
+tbl_dbm
+), dkey.
+d±r
+) {
+
+400 #ifdeà
+HAS_GDBM
+
+
+401
+Ãxtdkey
+ =
+ `gdbm_Ãxtkey
+(
+tb
+->
+tbl_dbm
+,
+dkey
+);
+
+403 #ifdeà
+HAS_NDBM
+
+
+404 #ifdeà
+_CX_UX
+
+
+405
+Ãxtdkey
+ =
+ `dbm_Ãxtkey
+(
+tb
+->
+tbl_dbm
+,
+dkey
+);
+
+407
+Ãxtdkey
+ =
+ `dbm_Ãxtkey
+(
+tb
+->
+tbl_dbm
+);
+
+410
+Ãxtdkey
+ =
+ `Ãxtkey
+(
+dkey
+);
+
+413 #ifdeà
+HAS_GDBM
+
+
+414
+ `gdbm_d–‘e
+(
+tb
+->
+tbl_dbm
+,
+dkey
+);
+
+416
+ `dbm_d–‘e
+(
+tb
+->
+tbl_dbm
+,
+dkey
+);
+
+418
+dkey
+ =
+Ãxtdkey
+;
+
+419 } 
+dkey
+.
+d±r
+);
+
+422
+tb
+->
+tbl_dbm
+ = 0;
+
+424 ()
+ `h™”š™
+(
+tb
+);
+
+425 
+h’t
+ =
+ `h™”Ãxt
+(
+tb
+)) {
+
+426
+ `h’tä“
+(
+oh’t
+);
+
+427
+oh’t
+ =
+h’t
+;
+
+429
+ `h’tä“
+(
+oh’t
+);
+
+430 #ifdeà
+SOME_DBM
+
+
+431
+tb
+->
+tbl_dbm
+ =
+Þd_dbm
+;
+
+433
+ }
+}
+
+436
+ $hä“
+(
+tb
+,
+dodbm
+)
+
+437 
+HASH
+ *
+tb
+;
+
+438 
+dodbm
+;
+
+440 ià(!
+tb
+)
+
+442
+ `hä“’Œ›s
+(
+tb
+,
+dodbm
+);
+
+443
+ `Saãä“
+(
+tb
+->
+tbl_¬¿y
+);
+
+444
+ `Saãä“
+(
+tb
+);
+
+445
+ }
+}
+
+448
+ $h™”š™
+(
+tb
+)
+
+449 
+HASH
+ *
+tb
+;
+
+451
+tb
+->
+tbl_r™”
+ = -1;
+
+452
+tb
+->
+tbl_e™”
+ =
+ `NuÎ
+(
+HENT
+*);
+
+453 
+tb
+->
+tbl_fžl
+;
+
+454
+ }
+}
+
+456
+HENT
+ *
+
+457
+ $h™”Ãxt
+(
+tb
+)
+
+458 
+HASH
+ *
+tb
+;
+
+460 
+HENT
+ *
+’Œy
+;
+
+461 #ifdeà
+SOME_DBM
+
+
+462
+d©um
+
+key
+;
+
+465
+’Œy
+ =
+tb
+->
+tbl_e™”
+;
+
+466 #ifdeà
+SOME_DBM
+
+
+467 ià(
+tb
+->
+tbl_dbm
+) {
+
+468 ià(
+’Œy
+) {
+
+469 #ifdeà
+HAS_GDBM
+
+
+470
+key
+.
+d±r
+ =
+’Œy
+->
+h’t_key
+;
+
+471
+key
+.
+dsize
+ =
+’Œy
+->
+h’t_kËn
+;
+
+472
+key
+ =
+ `gdbm_Ãxtkey
+(
+tb
+->
+tbl_dbm
+, key);
+
+474 #ifdeà
+HAS_NDBM
+
+
+475 #ifdeà
+_CX_UX
+
+
+476
+key
+.
+d±r
+ =
+’Œy
+->
+h’t_key
+;
+
+477
+key
+.
+dsize
+ =
+’Œy
+->
+h’t_kËn
+;
+
+478
+key
+ =
+ `dbm_Ãxtkey
+(
+tb
+->
+tbl_dbm
+, key);
+
+480
+key
+ =
+ `dbm_Ãxtkey
+(
+tb
+->
+tbl_dbm
+);
+
+483
+key
+.
+d±r
+ =
+’Œy
+->
+h’t_key
+;
+
+484
+key
+.
+dsize
+ =
+’Œy
+->
+h’t_kËn
+;
+
+485
+key
+ =
+ `Ãxtkey
+(key);
+
+490
+ `Newz
+(504,
+’Œy
+, 1,
+HENT
+);
+
+491
+tb
+->
+tbl_e™”
+ =
+’Œy
+;
+
+492 #ifdeà
+HAS_GDBM
+
+
+493
+key
+ =
+ `gdbm_fœ¡key
+(
+tb
+->
+tbl_dbm
+);
+
+495
+key
+ =
+ `dbm_fœ¡key
+(
+tb
+->
+tbl_dbm
+);
+
+498
+’Œy
+->
+h’t_key
+ =
+key
+.
+d±r
+;
+
+499
+’Œy
+->
+h’t_kËn
+ =
+key
+.
+dsize
+;
+
+500 ià(!
+key
+.
+d±r
+) {
+
+501 ià(
+’Œy
+->
+h’t_v®
+)
+
+502
+ `¡r_ä“
+(
+’Œy
+->
+h’t_v®
+);
+
+503
+ `Saãä“
+(
+’Œy
+);
+
+504
+tb
+->
+tbl_e™”
+ =
+ `NuÎ
+(
+HENT
+*);
+
+505 
+ `NuÎ
+(
+HENT
+*);
+
+507 
+’Œy
+;
+
+510 ià(!
+tb
+->
+tbl_¬¿y
+)
+
+511
+ `Newz
+(506,
+tb
+->
+tbl_¬¿y
+,b->
+tbl_max
+ + 1,
+HENT
+*);
+
+513 ià(
+’Œy
+)
+
+514
+’Œy
+ =ƒÁry->
+h’t_Ãxt
+;
+
+515 ià(!
+’Œy
+) {
+
+516
+tb
+->
+tbl_r™”
+++;
+
+517 ià(
+tb
+->
+tbl_r™”
+ >b->
+tbl_max
+) {
+
+518
+tb
+->
+tbl_r™”
+ = -1;
+
+521
+’Œy
+ =
+tb
+->
+tbl_¬¿y
+[tb->
+tbl_r™”
+];
+
+523 } !
+’Œy
+);
+
+525
+tb
+->
+tbl_e™”
+ =
+’Œy
+;
+
+526 
+’Œy
+;
+
+527
+ }
+}
+
+530
+ $h™”key
+(
+’Œy
+,
+»Ž’
+)
+
+531 
+HENT
+ *
+’Œy
+;
+
+532 *
+»Ž’
+;
+
+534 *
+»Ž’
+ =
+’Œy
+->
+h’t_kËn
+;
+
+535 
+’Œy
+->
+h’t_key
+;
+
+536
+ }
+}
+
+538
+STR
+ *
+
+539
+ $h™”v®
+(
+tb
+,
+’Œy
+)
+
+540 
+HASH
+ *
+tb
+;
+
+541 
+HENT
+ *
+’Œy
+;
+
+543 #ifdeà
+SOME_DBM
+
+
+544
+d©um
+
+key
+,
+cÚ‹Á
+;
+
+546 ià(
+tb
+->
+tbl_dbm
+) {
+
+547
+key
+.
+d±r
+ =
+’Œy
+->
+h’t_key
+;
+
+548
+key
+.
+dsize
+ =
+’Œy
+->
+h’t_kËn
+;
+
+549 #ifdeà
+HAS_GDBM
+
+
+550
+cÚ‹Á
+ =
+ `gdbm_ãtch
+(
+tb
+->
+tbl_dbm
+,
+key
+);
+
+552
+cÚ‹Á
+ =
+ `dbm_ãtch
+(
+tb
+->
+tbl_dbm
+,
+key
+);
+
+554 ià(!
+’Œy
+->
+h’t_v®
+)
+
+555
+’Œy
+->
+h’t_v®
+ =
+ `SŒ_Ãw
+(62,0);
+
+556
+ `¡r_n£t
+(
+’Œy
+->
+h’t_v®
+,
+cÚ‹Á
+.
+d±r
+,cÚ‹Á.
+dsize
+);
+
+559 
+’Œy
+->
+h’t_v®
+;
+
+560
+ }
+}
+
+562 #ifdeà
+SOME_DBM
+
+
+564 #iâdeà
+O_CREAT
+
+
+565 #ifdeà
+I_FCNTL
+
+
+566 
+ ~<fúŽ.h
+>
+
+568 #ifdeà
+I_SYS_FILE
+
+
+569 
+ ~<sys/fže.h
+>
+
+573 #iâdeà
+O_RDONLY
+
+
+574 
+ #O_RDONLY
+ 0
+
+ )
+
+576 #iâdeà
+O_RDWR
+
+
+577 
+ #O_RDWR
+ 2
+
+ )
+
+579 #iâdeà
+O_CREAT
+
+
+580 
+ #O_CREAT
+ 01000
+
+ )
+
+583 #ifdeà
+HAS_ODBM
+
+
+584 
+ gdbm»fút
+ = 0;
+
+587
+boÞ
+
+
+588
+ $hdbmÝ’
+(
+tb
+,
+âame
+,
+mode
+)
+
+589 
+HASH
+ *
+tb
+;
+
+590 *
+âame
+;
+
+591 
+mode
+;
+
+593 ià(!
+tb
+)
+
+594 
+FALSE
+;
+
+595 #ifdeà
+HAS_ODBM
+
+
+596 ià(
+tb
+->
+tbl_dbm
+)
+
+597 
+TRUE
+;
+
+599 ià(
+tb
+->
+tbl_dbm
+) {
+
+600
+ `hdbmþo£
+(
+tb
+);
+
+601
+tb
+->
+tbl_dbm
+ = 0;
+
+603
+ `hþ—r
+(
+tb
+,
+FALSE
+);
+
+604 #ifdeà
+HAS_GDBM
+
+
+605 ià(
+mode
+ >= 0)
+
+606
+tb
+->
+tbl_dbm
+ =
+ `gdbm_Ý’
+(
+âame
+, 0,
+GDBM_WRCREAT
+,
+mode
+, (*è
+NULL
+);
+
+607 ià(!
+tb
+->
+tbl_dbm
+)
+
+608
+tb
+->
+tbl_dbm
+ =
+ `gdbm_Ý’
+(
+âame
+, 0,
+GDBM_WRITER
+,
+mode
+, (*è
+NULL
+);
+
+609 ià(!
+tb
+->
+tbl_dbm
+)
+
+610
+tb
+->
+tbl_dbm
+ =
+ `gdbm_Ý’
+(
+âame
+, 0,
+GDBM_READER
+,
+mode
+, (*è
+NULL
+);
+
+612 #ifdeà
+HAS_NDBM
+
+
+613 ià(
+mode
+ >= 0)
+
+614
+tb
+->
+tbl_dbm
+ =
+ `dbm_Ý’
+(
+âame
+,
+O_RDWR
+|
+O_CREAT
+,
+mode
+);
+
+615 ià(!
+tb
+->
+tbl_dbm
+)
+
+616
+tb
+->
+tbl_dbm
+ =
+ `dbm_Ý’
+(
+âame
+,
+O_RDWR
+,
+mode
+);
+
+617 ià(!
+tb
+->
+tbl_dbm
+)
+
+618
+tb
+->
+tbl_dbm
+ =
+ `dbm_Ý’
+(
+âame
+,
+O_RDONLY
+,
+mode
+);
+
+620 ià(
+dbm»fút
+++)
+
+621
+ `çl
+("Old dbm can only open one database");
+
+622
+ `¥rštf
+(
+buf
+,"%s.dœ",
+âame
+);
+
+623 ià(
+ `¡©
+(
+buf
+, &
+¡©buf
+) < 0) {
+
+624 ià(
+mode
+ < 0 ||
+ `þo£
+(
+ `ü—t
+(
+buf
+,mode)) < 0)
+
+625 
+FALSE
+;
+
+626
+ `¥rštf
+(
+buf
+,"%s.·g",
+âame
+);
+
+627 ià(
+ `þo£
+(
+ `ü—t
+(
+buf
+,
+mode
+)) < 0)
+
+628 
+FALSE
+;
+
+630
+tb
+->
+tbl_dbm
+ =
+ `dbmš™
+(
+âame
+) >= 0;
+
+633 ià(!
+tb
+->
+tbl_¬¿y
+ &&b->
+tbl_dbm
+ != 0)
+
+634
+ `Newz
+(507,
+tb
+->
+tbl_¬¿y
+,b->
+tbl_max
+ + 1,
+HENT
+*);
+
+635 
+tb
+->
+tbl_dbm
+ != 0;
+
+636
+ }
+}
+
+639
+ $hdbmþo£
+(
+tb
+)
+
+640 
+HASH
+ *
+tb
+;
+
+642 ià(
+tb
+ &&b->
+tbl_dbm
+) {
+
+643 #ifdeà
+HAS_GDBM
+
+
+644
+ `gdbm_þo£
+(
+tb
+->
+tbl_dbm
+);
+
+645
+tb
+->
+tbl_dbm
+ = 0;
+
+647 #ifdeà
+HAS_NDBM
+
+
+648
+ `dbm_þo£
+(
+tb
+->
+tbl_dbm
+);
+
+649
+tb
+->
+tbl_dbm
+ = 0;
+
+655 ià(
+dow¬n
+)
+
+656
+ `w¬n
+("Close on unopened dbm file");
+
+657
+ }
+}
+
+659
+boÞ
+
+
+660
+ $hdbm¡Üe
+(
+tb
+,
+key
+,
+kËn
+,
+¡r
+)
+
+661 
+HASH
+ *
+tb
+;
+
+662 *
+key
+;
+
+663 
+kËn
+;
+
+664 
+STR
+ *
+¡r
+;
+
+666
+d©um
+
+dkey
+,
+dcÚ‹Á
+;
+
+667 
+”rÜ
+;
+
+669 ià(!
+tb
+ || !tb->
+tbl_dbm
+)
+
+670 
+FALSE
+;
+
+671
+dkey
+.
+d±r
+ =
+key
+;
+
+672
+dkey
+.
+dsize
+ =
+kËn
+;
+
+673
+dcÚ‹Á
+.
+d±r
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+674
+dcÚ‹Á
+.
+dsize
+ =
+¡r
+->
+¡r_cur
+;
+
+675 #ifdeà
+HAS_GDBM
+
+
+676
+”rÜ
+ =
+ `gdbm_¡Üe
+(
+tb
+->
+tbl_dbm
+,
+dkey
+,
+dcÚ‹Á
+,
+GDBM_REPLACE
+);
+
+678
+”rÜ
+ =
+ `dbm_¡Üe
+(
+tb
+->
+tbl_dbm
+,
+dkey
+,
+dcÚ‹Á
+,
+DBM_REPLACE
+);
+
+680 ià(
+”rÜ
+) {
+
+681 ià(
+Ӽo
+ =ð
+EPERM
+)
+
+682
+ `çl
+("No write…ermissiono dbm file");
+
+683
+ `w¬n
+("dbm stÜ»tuºed %d,ƒ¼nØ%d, key \"%s\"",
+”rÜ
+,
+Ӽo
+,
+key
+);
+
+684 #ifdeà
+HAS_NDBM
+
+
+685
+ `dbm_þ—»¼
+(
+tb
+->
+tbl_dbm
+);
+
+688  !
+”rÜ
+;
+
+689
+ }
+}
+
+ @hash.h
+
+14 
+ #FILLPCT
+ 80
+
+ )
+
+15 
+ #DBM_CACHE_MAX
+ 63
+
+ )
+
+18 
+ #COEFFSIZE
+ (16 * 8è
+
+ )
+
+20 
+h’Œy
+
+ tHENT
+;
+
+22 
+ sh’Œy
+ {
+
+23
+HENT
+ *
+ mh’t_Ãxt
+;
+
+24 *
+ mh’t_key
+;
+
+25
+STR
+ *
+ mh’t_v®
+;
+
+26 
+ mh’t_hash
+;
+
+27 
+ mh’t_kËn
+;
+
+30 
+ shtbl
+ {
+
+31
+HENT
+ **
+ mtbl_¬¿y
+;
+
+32 
+ mtbl_max
+;
+
+33 
+ mtbl_do¥l™
+;
+
+34 
+ mtbl_fžl
+;
+
+35 
+ mtbl_r™”
+;
+
+36
+HENT
+ *
+ mtbl_e™”
+;
+
+37
+SPAT
+ *
+ mtbl_¥©roÙ
+;
+
+38 *
+ mtbl_Çme
+;
+
+39 #ifdeà
+SOME_DBM
+
+
+40 #ifdeà
+HAS_GDBM
+
+
+41
+GDBM_FILE
+
+ mtbl_dbm
+;
+
+43 #ifdeà
+HAS_NDBM
+
+
+44
+DBM
+ *
+ mtbl_dbm
+;
+
+46 
+ mtbl_dbm
+;
+
+50 
+ mtbl_cÛffsize
+;
+
+53
+STR
+ *
+hãtch
+();
+
+54
+boÞ
+
+h¡Üe
+();
+
+55
+STR
+ *
+hd–‘e
+();
+
+56
+HASH
+ *
+hÃw
+();
+
+57 
+hþ—r
+();
+
+58 
+h’tä“
+();
+
+59 
+h™”š™
+();
+
+60
+HENT
+ *
+h™”Ãxt
+();
+
+61 *
+h™”key
+();
+
+62
+STR
+ *
+h™”v®
+();
+
+63
+boÞ
+
+hdbmÝ’
+();
+
+64 
+hdbmþo£
+();
+
+65
+boÞ
+
+hdbm¡Üe
+();
+
+ @malloc.c
+
+12 #iâdeà
+lšt
+
+
+13 
+ gsccsid
+[] = "@(#)malloc.c 4.3 (Berkeley) 9/16/83";
+
+15 #ifdeà
+DEBUGGING
+
+
+16 
+ #RCHECK
+
+
+ )
+
+30 
+ ~"EXTERN.h
+"
+
+31 
+ ~"³¾.h
+"
+
+33 
+fšdbuck‘
+(),
+mÜecÜe
+();
+
+37 
+ #u_ch¬
+ 
+
+ )
+
+38 
+ #u_št
+ 
+
+ )
+
+39 
+ #u_shÜt
+ 
+
+ )
+
+50 
+ uov”h—d
+ {
+
+51 
+ov”h—d
+ *
+ mov_Ãxt
+;
+
+52 #ià
+ALIGNBYTES
+ > 4
+
+53 
+ m¡rut
+;
+
+56
+u_ch¬
+
+ movu_magic
+;
+
+57
+u_ch¬
+
+ movu_šdex
+;
+
+58 #ifdeà
+RCHECK
+
+
+59
+u_shÜt
+
+ movu_size
+;
+
+60
+u_št
+
+ movu_rmagic
+;
+
+62 }
+ movu
+;
+
+63 
+ #ov_magic
+
+ovu
+.
+ovu_magic
+
+
+ )
+
+64 
+ #ov_šdex
+
+ovu
+.
+ovu_šdex
+
+
+ )
+
+65 
+ #ov_size
+
+ovu
+.
+ovu_size
+
+
+ )
+
+66 
+ #ov_rmagic
+
+ovu
+.
+ovu_rmagic
+
+
+ )
+
+69 
+ #MAGIC
+ 0xfà
+
+ )
+
+70 
+ #OLDMAGIC
+ 0x7à
+
+ )
+
+71 
+ #RMAGIC
+ 0x55555555
+
+ )
+
+72 #ifdeà
+RCHECK
+
+
+73 
+ #RSLOP
+  (
+u_št
+)
+
+ )
+
+75 
+ #RSLOP
+ 0
+
+ )
+
+83 
+ #NBUCKETS
+ 30
+
+ )
+
+84 
+ov”h—d
+ *
+ gÃxtf
+[
+NBUCKETS
+];
+
+85
+*
+sbrk
+();
+
+87 #ifdeà
+MSTATS
+
+
+92 
+u_št
+
+ gnm®loc
+[
+NBUCKETS
+];
+
+93 
+ ~<¡dio.h
+>
+
+96 #ifdeà
+debug
+
+
+97 
+ #ASSERT
+(
+p
+èià(!Õ)è
+ `bÙch
+("p");
+
+ )
+
+99
+ $bÙch
+(
+s
+)
+
+100 *
+s
+;
+
+103
+ `´štf
+("as£¹iÚ bÙched: %s\n",
+s
+);
+
+104
+ `abÜt
+();
+
+105
+ }
+}
+
+107 
+ #ASSERT
+(
+p
+)
+
+ )
+
+110
+MALLOCPTRTYPE
+ *
+
+111
+ $m®loc
+(
+nby‹s
+)
+
+112 
+nby‹s
+;
+
+114 
+ov”h—d
+ *
+p
+;
+
+115 
+buck‘
+ = 0;
+
+116 
+shiár
+;
+
+124
+nby‹s
+ +ð (
+ov”h—d
+è+
+RSLOP
+;
+
+125
+nby‹s
+ = (nbytes + 3) &~ 3;
+
+126
+shiár
+ = (
+nby‹s
+ - 1) >> 2;
+
+128 
+shiár
+ >>= 1)
+
+129
+buck‘
+++;
+
+134 ià(
+Ãxtf
+[
+buck‘
+] =ð
+NULL
+)
+
+135
+ `mÜecÜe
+(
+buck‘
+);
+
+136 ià((
+p
+ = (
+ov”h—d
+ *)
+Ãxtf
+[
+buck‘
+]è=ð
+NULL
+)
+
+137  (
+NULL
+);
+
+139 #ifdeà
+RCHECK
+
+
+140 ià(*((*)
+p
+è& ((
+ov”h—d
+) - 1))
+
+141 #iâdeà
+I286
+
+
+142
+ `årštf
+(
+¡d”r
+,"CÜru± m®loø±¸0x%x‡ˆ0x%x\n",*((*)
+p
+),p);
+
+144
+ `årštf
+(
+¡d”r
+,"CÜru± m®loø±¸0x%lx‡ˆ0x%lx\n",*((*)
+p
+),p);
+
+147
+Ãxtf
+[
+buck‘
+] =
+p
+->
+ov_Ãxt
+;
+
+148
+p
+->
+ov_magic
+ =
+MAGIC
+;
+
+149
+p
+->
+ov_šdex
+buck‘
+;
+
+150 #ifdeà
+MSTATS
+
+
+151
+nm®loc
+[
+buck‘
+]++;
+
+153 #ifdeà
+RCHECK
+
+
+158 ià(
+nby‹s
+ <= 0x10000)
+
+159
+p
+->
+ov_size
+ =
+nby‹s
+ - 1;
+
+160
+p
+->
+ov_rmagic
+ =
+RMAGIC
+;
+
+161 *((
+u_št
+ *)((
+ÿddr_t
+)
+p
+ +
+nby‹s
+ -
+RSLOP
+)èð
+RMAGIC
+;
+
+163  ((*)(
+p
+ + 1));
+
+164
+ }
+}
+
+170
+ $mÜecÜe
+(
+buck‘
+)
+
+171 
+buck‘
+;
+
+173 
+ov”h—d
+ *
+;
+
+174 
+ºu
+;
+
+175 
+nblks
+;
+
+176 
+siz
+;
+
+178 ià(
+Ãxtf
+[
+buck‘
+])
+
+185
+ = (
+ov”h—d
+ *)
+ `sbrk
+(0);
+
+186 #iâdeà
+I286
+
+
+187 ià(()
+ & 0x3ff)
+
+188 ()
+ `sbrk
+(1024 - (()
+ & 0x3ff));
+
+193 #iâdeà
+I286
+
+
+195
+ºu
+ = (
+buck‘
+ <= 8) ? 11 : bucket + 3;
+
+199
+ºu
+ = (
+buck‘
+ <= 11) ? 14 : bucket + 3;
+
+201
+nblks
+ = 1 << (
+ºu
+ - (
+buck‘
+ + 3));
+
+202 ià(
+ºu
+ <
+buck‘
+)
+
+203
+ºu
+ =
+buck‘
+;
+
+204
+ = (
+ov”h—d
+ *)
+ `sbrk
+(1 <<
+ºu
+);
+
+206 ià(()
+ == -1)
+
+212 #iâdeà
+I286
+
+
+213 ià(()
+ & 7) {
+
+214
+ = (
+ov”h—d
+ *)((()op + 8) &~ 7);
+
+215
+nblks
+--;
+
+224
+Ãxtf
+[
+buck‘
+] =
+;
+
+225
+siz
+ = 1 << (
+buck‘
+ + 3);
+
+226 --
+nblks
+ > 0) {
+
+227
+->
+ov_Ãxt
+ = (
+ov”h—d
+ *)((
+ÿddr_t
+)Ý +
+siz
+);
+
+228
+ = (
+ov”h—d
+ *)((
+ÿddr_t
+)Ý +
+siz
+);
+
+230
+ }
+}
+
+233
+ $ä“
+(
+tý
+)
+
+234 *
+tý
+;
+
+236 *
+ =
+tý
+;
+
+237 
+size
+;
+
+238 
+ov”h—d
+ *
+;
+
+240 #ifdeà
+IGNOREFREE
+
+
+243 ià(
+ =ð
+NULL
+)
+
+245
+ = (
+ov”h—d
+ *)((
+ÿddr_t
+)
+ -  (overhead));
+
+246 #ifdeà
+debug
+
+
+247
+ `ASSERT
+(
+->
+ov_magic
+ =ð
+MAGIC
+);
+
+249 ià(
+->
+ov_magic
+ !ð
+MAGIC
+) {
+
+250
+ `w¬n
+("%s free() ignored",
+
+251
+->
+ov_magic
+ =ð
+OLDMAGIC
+ ? "Duplicate" : "Bad");
+
+254
+->
+ov_magic
+ =
+OLDMAGIC
+;
+
+256 #ifdeà
+RCHECK
+
+
+257
+ `ASSERT
+(
+->
+ov_rmagic
+ =ð
+RMAGIC
+);
+
+258 ià(
+->
+ov_šdex
+ <= 13)
+
+259
+ `ASSERT
+(*(
+u_št
+ *)((
+ÿddr_t
+)
+ + op->
+ov_size
+ + 1 -
+RSLOP
+è=ð
+RMAGIC
+);
+
+261
+ `ASSERT
+(
+->
+ov_šdex
+ <
+NBUCKETS
+);
+
+262
+size
+ =
+->
+ov_šdex
+;
+
+263
+->
+ov_Ãxt
+ =
+Ãxtf
+[
+size
+];
+
+264
+Ãxtf
+[
+size
+] =
+;
+
+265 #ifdeà
+MSTATS
+
+
+266
+nm®loc
+[
+size
+]--;
+
+269
+ }
+}
+
+282 
+ g»®l_¤chËn
+ = 4;
+
+284
+MALLOCPTRTYPE
+ *
+
+285
+ $»®loc
+(
+tý
+,
+nby‹s
+)
+
+286 *
+tý
+;
+
+287 
+nby‹s
+;
+
+289 *
+ =
+tý
+;
+
+290 
+u_št
+
+Úb
+;
+
+291 
+ov”h—d
+ *
+;
+
+292 *
+»s
+;
+
+293 
+i
+;
+
+294 
+was_®loûd
+ = 0;
+
+296 ià(
+ =ð
+NULL
+)
+
+297  (
+ `m®loc
+(
+nby‹s
+));
+
+298
+ = (
+ov”h—d
+ *)((
+ÿddr_t
+)
+ -  (overhead));
+
+299 ià(
+->
+ov_magic
+ =ð
+MAGIC
+) {
+
+300
+was_®loûd
+++;
+
+301
+i
+ =
+->
+ov_šdex
+;
+
+314 ià((
+i
+ =
+ `fšdbuck‘
+(
+, 1)) < 0 &&
+
+315 (
+i
+ =
+ `fšdbuck‘
+(
+,
+»®l_¤chËn
+)) < 0)
+
+316
+i
+ = 0;
+
+318
+Úb
+ = (1 << (
+i
+ + 3)è-  (*
+è-
+RSLOP
+;
+
+320 ià(
+was_®loûd
+ &&
+
+321
+nby‹s
+ <ð
+Úb
+ &&‚by‹ > (Úb >> 1è- (*
+è-
+RSLOP
+) {
+
+322 #ifdeà
+RCHECK
+
+
+327 ià(
+->
+ov_šdex
+ <= 13) {
+
+334
+nby‹s
+ +ð (
+ov”h—d
+è+
+RSLOP
+;
+
+335
+nby‹s
+ = (nbytes + 3) &~ 3;
+
+336
+->
+ov_size
+ =
+nby‹s
+ - 1;
+
+337 *((
+u_št
+ *)((
+ÿddr_t
+)
+ +
+nby‹s
+ -
+RSLOP
+)èð
+RMAGIC
+;
+
+340 (
+);
+
+342 ià((
+»s
+ =
+ `m®loc
+(
+nby‹s
+)è=ð
+NULL
+)
+
+343  (
+NULL
+);
+
+344 ià(
+ !ð
+»s
+)
+
+345 ()
+ `bcÝy
+(
+,
+»s
+, ()((
+nby‹s
+ <
+Úb
+) ?‚bytes : onb));
+
+346 ià(
+was_®loûd
+)
+
+347
+ `ä“
+(
+);
+
+348  (
+»s
+);
+
+349
+ }
+}
+
+357
+ $fšdbuck‘
+(
+ä“p
+,
+¤chËn
+)
+
+358 
+ov”h—d
+ *
+ä“p
+;
+
+359 
+¤chËn
+;
+
+361 
+ov”h—d
+ *
+p
+;
+
+362 
+i
+,
+j
+;
+
+364 
+i
+ = 0; i <
+NBUCKETS
+; i++) {
+
+365
+j
+ = 0;
+
+366 
+p
+ =
+Ãxtf
+[
+i
+];… &&
+j
+ !ð
+¤chËn
+;… =…->
+ov_Ãxt
+) {
+
+367 ià(
+p
+ =ð
+ä“p
+)
+
+368  (
+i
+);
+
+369
+j
+++;
+
+373
+ }
+}
+
+375 #ifdeà
+MSTATS
+
+
+383
+ $m¡©s
+(
+s
+)
+
+384 *
+s
+;
+
+386 
+i
+,
+j
+;
+
+387 
+ov”h—d
+ *
+p
+;
+
+388 
+tÙä“
+ = 0,
+
+389
+tÙu£d
+ = 0;
+
+391
+ `årštf
+(
+¡d”r
+, "MemÜy‡ÎoÿtiÚ sti¡ic %s\nä“:\t",
+s
+);
+
+392 
+i
+ = 0; i <
+NBUCKETS
+; i++) {
+
+393 
+j
+ = 0,
+p
+ =
+Ãxtf
+[
+i
+];…;… =…->
+ov_Ãxt
+, j++)
+
+395
+ `årštf
+(
+¡d”r
+, " %d",
+j
+);
+
+396
+tÙä“
+ +ð
+j
+ * (1 << (
+i
+ + 3));
+
+398
+ `årštf
+(
+¡d”r
+, "\nused:\t");
+
+399 
+i
+ = 0; i <
+NBUCKETS
+; i++) {
+
+400
+ `årštf
+(
+¡d”r
+, " %d",
+nm®loc
+[
+i
+]);
+
+401
+tÙu£d
+ +ð
+nm®loc
+[
+i
+] * (1 << (i + 3));
+
+403
+ `årštf
+(
+¡d”r
+, "\n\tTotal in use: %d,otal free: %d\n",
+
+404
+tÙu£d
+,
+tÙä“
+);
+
+405
+ }
+}
+
+ @patch-malloc.c
+
+1
+*
+m®loc
+();
+
+2
+*
+bZa
+(), *
+bZr
+(), *
+bZc
+();
+
+3
+
+ä“
+();
+
+6
+ $m®loc
+(
+n
+)
+
+7 
+n
+;
+
+9 
+ `bZa
+(
+n
+);
+
+10
+ }
+}
+
+13
+ $ÿÎoc
+(
+n
+)
+
+14 
+n
+;
+
+18
+ }
+}
+
+20
+ $ä“
+(
+p
+)
+
+21 *
+p
+;
+
+23
+ `bZf
+(
+p
+);
+
+24
+ }
+}
+
+27
+ $»®loc
+(
+,
+nby‹s
+)
+
+28 *
+;
+
+29 
+nby‹s
+;
+
+31 
+ `bZr
+(
+,
+nby‹s
+);
+
+32
+ }
+}
+
+ @patchlevel.h
+
+1 
+ #PATCHLEVEL
+ 3
+
+ )
+
+ @perl.c
+
+1 
+ grcsid
+[] = "$RCSfile$$Revision$$Date$\nPatch†evel: ###\n";
+
+17 
+ ~"EXTERN.h
+"
+
+18 
+ ~"³¾.h
+"
+
+19 
+ ~"³¾y.h
+"
+
+20 #ifdeà
+MSDOS
+
+
+21 
+ ~"·tchËv.h
+"
+
+23 
+ ~"·tchËv–.h
+"
+
+26 #ifdeà
+IAMSUID
+
+
+27 #iâdeà
+DOSUID
+
+
+28 
+ #DOSUID
+
+
+ )
+
+32 #ifdeà
+SETUID_SCRIPTS_ARE_SECURE_NOW
+
+
+33 #ifdeà
+DOSUID
+
+
+34 #undeà
+DOSUID
+
+
+38 *
+mÜesw™ches
+();
+
+39 *
+ gcddœ
+;
+
+40 
+boÞ
+
+ gmšus_c
+;
+
+41 
+ g·tchËv–
+[6];
+
+42 *
+ gÄs
+ = "\n";
+
+43 
+ gÄsch¬
+ = '\n';
+
+44 
+ gĦ’
+ = 1;
+
+46
+ $maš
+(
+¬gc
+,
+¬gv
+,
+’v
+)
+
+47 
+¬gc
+;
+
+48 **
+¬gv
+;
+
+49 **
+’v
+;
+
+51 
+STR
+ *
+¡r
+;
+
+52 *
+s
+;
+
+53 *
+ `šdex
+(), *
+ `¡rýy
+(), *
+ `g‘’v
+();
+
+54
+boÞ
+
+do£¬ch
+ =
+FALSE
+;
+
+55 #ifdeà
+DOSUID
+
+
+56 *
+v®id¬g
+ = "";
+
+59 #ifdeà
+SETUID_SCRIPTS_ARE_SECURE_NOW
+
+
+60 #ifdeà
+IAMSUID
+
+
+61 #undeà
+IAMSUID
+
+
+62
+ `çl
+("suidperl is‚o†onger‚eeded sincehe kernel can‚owƒxecute\n\
+…erl scripts securely.\n");
+
+67 #ifdeà
+BWGC
+
+
+69
+ `gc_š™
+();
+
+70
+ `gc_š™
+();
+
+74
+Üig¬gv
+ =
+¬gv
+;
+
+75
+Üig¬gc
+ =
+¬gc
+;
+
+76
+Üig’vœÚ
+ =
+’vœÚ
+;
+
+77
+uid
+ = ()
+ `g‘uid
+();
+
+78
+euid
+ = ()
+ `g‘euid
+();
+
+79
+gid
+ = ()
+ `g‘gid
+();
+
+80
+egid
+ = ()
+ `g‘egid
+();
+
+81
+ `¥rštf
+(
+·tchËv–
+,"%3.3s%2.2d",
+ `šdex
+(
+rcsid
+,'4'),
+PATCHLEVEL
+);
+
+82 #ifdeà
+MSDOS
+
+
+88 ()
+ `fþo£
+(
+¡daux
+);
+
+89 ()
+ `fþo£
+(
+¡d´n
+);
+
+91 ià(
+do_undump
+) {
+
+92
+Üigfž’ame
+ =
+ `§ve¡r
+(
+¬gv
+[0]);
+
+93
+do_undump
+ = 0;
+
+94
+loÝ_±r
+ = -1;
+
+95 
+ju¡_do™
+;
+
+97 ()
+ `¥rštf
+(
+ `šdex
+(
+rcsid
+,'#'), "%d\n",
+PATCHLEVEL
+);
+
+98
+lše¡r
+ =
+ `SŒ_Ãw
+(65,80);
+
+99
+ `¡r_n£t
+(
+lše¡r
+,"",0);
+
+100
+¡r
+ =
+ `¡r_make
+("",0);
+
+101
+cur¡ash
+ =
+def¡ash
+ =
+ `hÃw
+(0);
+
+102
+cur¡Çme
+ =
+ `¡r_make
+("main",4);
+
+103
+ `¡ab_xhash
+(
+ `¡ab’t
+("_maš",
+TRUE
+)èð
+def¡ash
+;
+
+104
+def¡ash
+->
+tbl_Çme
+ = "main";
+
+105
+šc¡ab
+ =
+ `hadd
+(
+ `¯dd
+(
+ `¡ab’t
+("INC",
+TRUE
+)));
+
+106
+šc¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+107 
+¬gc
+--,
+¬gv
+++;‡rgc > 0;‡rgc--,argv++) {
+
+108 ià(
+¬gv
+[0][0] != '-' || !argv[0][1])
+
+110 #ifdeà
+DOSUID
+
+
+111 ià(*
+v®id¬g
+)
+
+112
+v®id¬g
+ = " PHOOEY ";
+
+114
+v®id¬g
+ =
+¬gv
+[0];
+
+116
+s
+ =
+¬gv
+[0]+1;
+
+117
+»sw™ch
+:
+
+118 *
+s
+) {
+
+132 ià(
+s
+ =
+ `mÜesw™ches
+(s))
+
+133 
+»sw™ch
+;
+
+137 #ifdeà
+TAINT
+
+
+138 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+)
+
+139
+ `çl
+("No -e‡llowed in setuid scripts");
+
+141 ià(!
+e_å
+) {
+
+142
+e_tm²ame
+ =
+ `§ve¡r
+(
+TMPPATH
+);
+
+143 ()
+ `mk‹mp
+(
+e_tm²ame
+);
+
+144
+e_å
+ =
+ `fÝ’
+(
+e_tm²ame
+,"w");
+
+145 ià(!
+e_å
+)
+
+146
+ `çl
+("Cannot openemporary file");
+
+148 ià(
+¬gv
+[1]) {
+
+149
+ `åuts
+(
+¬gv
+[1],
+e_å
+);
+
+150
+¬gc
+--,
+¬gv
+++;
+
+152 ()
+ `putc
+('\n',
+e_å
+);
+
+155 #ifdeà
+TAINT
+
+
+156 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+)
+
+157
+ `çl
+("No -I‡llowed in setuid scripts");
+
+159
+ `¡r_ÿt
+(
+¡r
+,"-");
+
+160
+ `¡r_ÿt
+(
+¡r
+,
+s
+);
+
+161
+ `¡r_ÿt
+(
+¡r
+," ");
+
+162 ià(*++
+s
+) {
+
+163 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+šc¡ab
+),
+ `¡r_make
+(
+s
+,0));
+
+165 ià(
+¬gv
+[1]) {
+
+166 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+šc¡ab
+),
+ `¡r_make
+(
+¬gv
+[1],0));
+
+167
+ `¡r_ÿt
+(
+¡r
+,
+¬gv
+[1]);
+
+168
+¬gc
+--,
+¬gv
+++;
+
+169
+ `¡r_ÿt
+(
+¡r
+," ");
+
+173 #ifdeà
+TAINT
+
+
+174 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+)
+
+175
+ `çl
+("No -P‡llowed in setuid scripts");
+
+177
+´•roûss
+ =
+TRUE
+;
+
+178
+s
+++;
+
+179 
+»sw™ch
+;
+
+181 #ifdeà
+TAINT
+
+
+182 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+)
+
+183
+ `çl
+("No -s‡llowed in setuid scripts");
+
+185
+dosw™ches
+ =
+TRUE
+;
+
+186
+s
+++;
+
+187 
+»sw™ch
+;
+
+189
+do£¬ch
+ =
+TRUE
+;
+
+190
+s
+++;
+
+191 
+»sw™ch
+;
+
+193
+dÛxŒaù
+ =
+TRUE
+;
+
+194
+s
+++;
+
+195 ià(*
+s
+)
+
+196
+cddœ
+ =
+ `§ve¡r
+(
+s
+);
+
+199
+¬gc
+--,
+¬gv
+++;
+
+200 
+sw™ch_’d
+;
+
+204
+ `çl
+("UÄecognized sw™ch: -%s",
+s
+);
+
+207
+sw™ch_’d
+:
+
+208 ià(
+e_å
+) {
+
+209 ()
+ `fþo£
+(
+e_å
+);
+
+210
+¬gc
+++,
+¬gv
+--;
+
+211
+¬gv
+[0] =
+e_tm²ame
+;
+
+214 #ifdeà
+MSDOS
+
+
+215 
+ #PERLLIB_SEP
+ ';'
+
+ )
+
+217 
+ #PERLLIB_SEP
+ ':'
+
+ )
+
+219 #iâdeà
+TAINT
+
+
+221 *
+s2
+ =
+ `g‘’v
+("PERLLIB");
+
+223 iàÐ
+s2
+ ) {
+
+225  *
+s2
+ ) {
+
+227  *
+s2
+ =ð
+PERLLIB_SEP
+ ) {
+
+230
+s2
+++;
+
+232 iàÐ(
+s
+ =
+ `šdex
+(
+s2
+,
+PERLLIB_SEP
+)è!ð
+NuÎch
+ ) {
+
+233 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+šc¡ab
+),
+ `¡r_make
+(
+s2
+,()(
+s
+-s2)));
+
+234
+s2
+ =
+s
++1;
+
+236 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+šc¡ab
+),
+ `¡r_make
+(
+s2
+,0));
+
+244 #iâdeà
+PRIVLIB
+
+
+245 
+ #PRIVLIB
+ "/u¤/loÿl/lib/³¾"
+
+ )
+
+247 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+šc¡ab
+),
+ `¡r_make
+(
+PRIVLIB
+,0));
+
+248 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+šc¡ab
+),
+ `¡r_make
+(".",1));
+
+250
+ `¡r_£t
+(&
+¡r_no
+,
+No
+);
+
+251
+ `¡r_£t
+(&
+¡r_yes
+,
+Yes
+);
+
+255 ià(
+¬gv
+[0] =ð
+NuÎch
+)
+
+256 #ifdeà
+MSDOS
+
+
+258 iàÐ
+ `i§‰y
+(
+ `fž’o
+(
+¡dš
+)) )
+
+259
+ `mÜesw™ches
+("v");
+
+260
+¬gv
+[0] = "-";
+
+263
+¬gv
+[0] = "-";
+
+265 ià(
+do£¬ch
+ && !
+ `šdex
+(
+¬gv
+[0], '/'è&& (
+s
+ =
+ `g‘’v
+("PATH"))) {
+
+266 *
+xfound
+ =
+NuÎch
+, *
+xçžed
+ = Nullch;
+
+267 
+Ën
+;
+
+269
+buãnd
+ =
+s
+ +
+ `¡¾’
+(s);
+
+270 *
+s
+) {
+
+271 #iâdeà
+MSDOS
+
+
+272
+s
+ =
+ `ýytžl
+(
+tok’buf
+,s,
+buãnd
+,':',&
+Ën
+);
+
+274 
+Ën
+ = 0; *
+s
+ && * !ð';';
+tok’buf
+[len++] = *s++);
+
+275
+tok’buf
+[
+Ën
+] = '\0';
+
+277 ià(*
+s
+)
+
+278
+s
+++;
+
+279 #iâdeà
+MSDOS
+
+
+280 ià(
+Ën
+ &&
+tok’buf
+[len-1] != '/')
+
+282 ià(
+Ën
+ &&
+tok’buf
+[len-1] != '\\')
+
+284 ()
+ `¡rÿt
+(
+tok’buf
++
+Ën
+,"/");
+
+285 ()
+ `¡rÿt
+(
+tok’buf
++
+Ën
+,
+¬gv
+[0]);
+
+286 #ifdeà
+DEBUGGING
+
+
+287 ià(
+debug
+ & 1)
+
+288
+ `årštf
+(
+¡d”r
+,"Lookšg fÜ %s\n",
+tok’buf
+);
+
+290 ià(
+ `¡©
+(
+tok’buf
+,&
+¡©buf
+) < 0)
+
+292 ià(
+ `S_ISREG
+(
+¡©buf
+.
+¡_mode
+)
+
+293 &&
+ `ÿndo
+(
+S_IRUSR
+,
+TRUE
+,&
+¡©buf
+è&& cªdo(
+S_IXUSR
+,TRUE,&statbuf)) {
+
+294
+xfound
+ =
+tok’buf
+;
+
+297 ià(!
+xçžed
+)
+
+298
+xçžed
+ =
+ `§ve¡r
+(
+tok’buf
+);
+
+300 ià(!
+xfound
+)
+
+301
+ `çl
+("Cª'ˆexecu‹ %s",
+xçžed
+ ? xçžed :
+¬gv
+[0] );
+
+302 ià(
+xçžed
+)
+
+303
+ `Saãä“
+(
+xçžed
+);
+
+304
+¬gv
+[0] =
+ `§ve¡r
+(
+xfound
+);
+
+307
+fdpid
+ =
+ `ªew
+(
+NuΡab
+);
+
+308
+pid¡©us
+ =
+ `hÃw
+(
+COEFFSIZE
+);
+
+310
+Üigfž’ame
+ =
+ `§ve¡r
+(
+¬gv
+[0]);
+
+311
+curcmd
+->
+c_fže¡ab
+ =
+ `f¡ab
+(
+Üigfž’ame
+);
+
+312 ià(
+ `¡rEQ
+(
+Üigfž’ame
+,"-"))
+
+313
+¬gv
+[0] = "";
+
+314 ià(
+´•roûss
+) {
+
+315
+ `¡r_ÿt
+(
+¡r
+,"-I");
+
+316
+ `¡r_ÿt
+(
+¡r
+,
+PRIVLIB
+);
+
+317 ()
+ `¥rštf
+(
+buf
+, "\
+%ssed %s -e '/^[^#]/b' \
+-e '/^#[ ]*include[ ]/b' \
+-e '/^#[ ]*define[ ]/b' \
+-e '/^#[ ]*if[ ]/b' \
+-e '/^#[ ]*ifdef[ ]/b' \
+-e '/^#[ ]*ifndef[ ]/b' \
+-e '/^#[ ]*else/b' \
+-e '/^#[ ]*endif/b' \
+-e 's/^#.*//' \
+%s | %s -C %s %s",
+
+328 #ifdeà
+MSDOS
+
+
+333 (
+dÛxŒaù
+ ? "-e '1,/^#/d\n'" : ""),
+
+334
+¬gv
+[0],
+CPPSTDIN
+,
+ `¡r_g‘
+(
+¡r
+),
+CPPMINUS
+);
+
+335 #ifdeà
+DEBUGGING
+
+
+336 ià(
+debug
+ & 64) {
+
+337
+ `åuts
+(
+buf
+,
+¡d”r
+);
+
+338
+ `åuts
+("\n",
+¡d”r
+);
+
+341
+dÛxŒaù
+ =
+FALSE
+;
+
+342 #ifdeà
+IAMSUID
+
+
+343 ià(
+euid
+ !ð
+uid
+ && !euid)
+
+344 #ifdeà
+HAS_SETEUID
+
+
+345 ()
+ `£‹uid
+(
+uid
+);
+
+347 #ifdeà
+HAS_SETREUID
+
+
+348 ()
+ `£Œeuid
+(-1,
+uid
+);
+
+350
+ `£tuid
+(
+uid
+);
+
+354
+rså
+ =
+ `mypÝ’
+(
+buf
+,"r");
+
+356 ià(!*
+¬gv
+[0])
+
+357
+rså
+ =
+¡dš
+;
+
+359
+rså
+ =
+ `fÝ’
+(
+¬gv
+[0],"r");
+
+360 ià(
+rså
+ =ð
+NuÎå
+) {
+
+361 #ifdeà
+DOSUID
+
+
+362 #iâdeà
+IAMSUID
+
+
+363 ià(
+euid
+ &&
+ `¡©
+(
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+,&
+¡©buf
+) >= 0 &&
+
+364
+¡©buf
+.
+¡_mode
+ & (
+S_ISUID
+|
+S_ISGID
+)) {
+
+365 ()
+ `¥rštf
+(
+buf
+, "%s/¥”l%s",
+BIN
+,
+·tchËv–
+);
+
+366
+ `execv
+(
+buf
+,
+Üig¬gv
+);
+
+367
+ `çl
+("Can't do setuid\n");
+
+371
+ `çl
+("Can't open…erl script \"%s\": %s\n",
+
+372
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+,
+ `¡»¼Ü
+(
+Ӽo
+));
+
+374
+ `¡r_ä“
+(
+¡r
+);
+
+375
+¡r
+ =
+NuΡr
+;
+
+404 #ifdeà
+DOSUID
+
+
+405 ià(
+ `f¡©
+(
+ `fž’o
+(
+rså
+),&
+¡©buf
+) < 0)
+
+406
+ `çl
+("Cª'ˆ¡© süˆ\"%s\"",
+Üigfž’ame
+);
+
+407 ià(
+¡©buf
+.
+¡_mode
+ & (
+S_ISUID
+|
+S_ISGID
+)) {
+
+408 
+Ën
+;
+
+410 #ifdeà
+IAMSUID
+
+
+411 #iâdeà
+HAS_SETREUID
+
+
+420 ià(
+ `acûss
+(
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+,1))
+
+421
+ `çl
+("Permission denied");
+
+429 
+¡©
+
+tmp¡©buf
+;
+
+431 ià(
+ `£Œeuid
+(
+euid
+,
+uid
+è< 0 ||
+ `g‘uid
+(è!ðeuid ||
+ `g‘euid
+() != uid)
+
+432
+ `çl
+("Can't swap uid‡ndƒuid");
+
+433 ià(
+ `¡©
+(
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+,&
+tmp¡©buf
+) < 0)
+
+434
+ `çl
+("Permission denied");
+
+435 ià(
+tmp¡©buf
+.
+¡_dev
+ !ð
+¡©buf
+.st_dev ||
+
+436
+tmp¡©buf
+.
+¡_šo
+ !ð
+¡©buf
+.st_ino) {
+
+437 ()
+ `fþo£
+(
+rså
+);
+
+438 ià(
+rså
+ =
+ `mypÝ’
+("/bin/mail„oot","w")) {
+
+439
+ `årštf
+(
+rså
+,
+
+442
+uid
+,
+tmp¡©buf
+.
+¡_dev
+,mp¡©buf.
+¡_šo
+,
+
+443
+¡©buf
+.
+¡_dev
+, stbuf.
+¡_šo
+,
+
+444
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+,
+
+445
+¡©buf
+.
+¡_uid
+, stbuf.
+¡_gid
+);
+
+446 ()
+ `mypþo£
+(
+rså
+);
+
+448
+ `çl
+("Permission denied\n");
+
+450 ià(
+ `£Œeuid
+(
+uid
+,
+euid
+è< 0 ||
+ `g‘uid
+(è!ðuid ||
+ `g‘euid
+() !=ƒuid)
+
+451
+ `çl
+("Can't„eswap uid‡ndƒuid");
+
+452 ià(!
+ `ÿndo
+(
+S_IXUSR
+,
+FALSE
+,&
+¡©buf
+))
+
+453
+ `çl
+("Permission denied\n");
+
+458 ià(!
+ `S_ISREG
+(
+¡©buf
+.
+¡_mode
+))
+
+459
+ `çl
+("Permission denied");
+
+460 ià(
+¡©buf
+.
+¡_mode
+ &
+S_IWOTH
+)
+
+461
+ `çl
+("Setuid/gid script is writable by world");
+
+462
+dosw™ches
+ =
+FALSE
+;
+
+463
+curcmd
+->
+c_lše
+++;
+
+464 ià(
+ `fg‘s
+(
+tok’buf
+,ok’buf,
+rså
+è=ð
+NuÎch
+ ||
+
+465
+ `¡ºNE
+(
+tok’buf
+,"#!",2) )
+
+466
+ `çl
+("No #!†ine");
+
+467
+s
+ =
+tok’buf
++2;
+
+468 ià(*
+s
+ == ' ') s++;
+
+469 !
+ `is¥aû
+(*
+s
+)) s++;
+
+470 ià(
+ `¡ºNE
+(
+s
+-4,"perl",4) && strnNE(s-9,"perl",4))
+
+471
+ `çl
+("Not‡…erl script");
+
+472 *
+s
+ == ' ' || *s == '\t') s++;
+
+478
+Ën
+ =
+ `¡¾’
+(
+v®id¬g
+);
+
+479 ià(
+ `¡rEQ
+(
+v®id¬g
+," PHOOEY ") ||
+
+480
+ `¡ºNE
+(
+s
+,
+v®id¬g
+,
+Ën
+è|| !
+ `is¥aû
+(s[len]))
+
+481
+ `çl
+("Args must match #!†ine");
+
+483 #iâdeà
+IAMSUID
+
+
+484 ià(
+euid
+ !ð
+uid
+ && (
+¡©buf
+.
+¡_mode
+ &
+S_ISUID
+) &&
+
+485
+euid
+ =ð
+¡©buf
+.
+¡_uid
+)
+
+486 ià(!
+do_undump
+)
+
+487
+ `çl
+("YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
+ YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
+
+491 ià(
+euid
+) {
+
+492 ()
+ `fþo£
+(
+rså
+);
+
+493 #iâdeà
+IAMSUID
+
+
+494 ()
+ `¥rštf
+(
+buf
+, "%s/¥”l%s",
+BIN
+,
+·tchËv–
+);
+
+495
+ `execv
+(
+buf
+,
+Üig¬gv
+);
+
+497
+ `çl
+("Can't do setuid\n");
+
+500 ià(
+¡©buf
+.
+¡_mode
+ &
+S_ISGID
+ && stbuf.
+¡_gid
+ !ð
+egid
+)
+
+501 #ifdeà
+HAS_SETEGID
+
+
+502 ()
+ `£‹gid
+(
+¡©buf
+.
+¡_gid
+);
+
+504 #ifdeà
+HAS_SETREGID
+
+
+505 ()
+ `£Œegid
+((
+GIDTYPE
+)-1,
+¡©buf
+.
+¡_gid
+);
+
+507
+ `£tgid
+(
+¡©buf
+.
+¡_gid
+);
+
+510 ià(
+¡©buf
+.
+¡_mode
+ &
+S_ISUID
+) {
+
+511 ià(
+¡©buf
+.
+¡_uid
+ !ð
+euid
+)
+
+512 #ifdeà
+HAS_SETEUID
+
+
+513 ()
+ `£‹uid
+(
+¡©buf
+.
+¡_uid
+);
+
+515 #ifdeà
+HAS_SETREUID
+
+
+516 ()
+ `£Œeuid
+((
+UIDTYPE
+)-1,
+¡©buf
+.
+¡_uid
+);
+
+518
+ `£tuid
+(
+¡©buf
+.
+¡_uid
+);
+
+522 ià(
+uid
+)
+
+523 #ifdeà
+HAS_SETEUID
+
+
+524 ()
+ `£‹uid
+((
+UIDTYPE
+)
+uid
+);
+
+526 #ifdeà
+HAS_SETREUID
+
+
+527 ()
+ `£Œeuid
+((
+UIDTYPE
+)-1,(UIDTYPE)
+uid
+);
+
+529
+ `£tuid
+((
+UIDTYPE
+)
+uid
+);
+
+532
+uid
+ = ()
+ `g‘uid
+();
+
+533
+euid
+ = ()
+ `g‘euid
+();
+
+534
+gid
+ = ()
+ `g‘gid
+();
+
+535
+egid
+ = ()
+ `g‘egid
+();
+
+536 ià(!
+ `ÿndo
+(
+S_IXUSR
+,
+TRUE
+,&
+¡©buf
+))
+
+537
+ `çl
+("Permission denied\n");
+
+539 #ifdeà
+IAMSUID
+
+
+540 ià(
+´•roûss
+)
+
+541
+ `çl
+("-P‚ot‡llowed for setuid/setgid script\n");
+
+543
+ `çl
+("Script is‚ot setuid/setgid in suidperl\n");
+
+545 #iâdeà
+TAINT
+
+
+547 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+) {
+
+548 ()
+ `fþo£
+(
+rså
+);
+
+549 ()
+ `¥rštf
+(
+buf
+, "%s/”l%s",
+BIN
+,
+·tchËv–
+);
+
+550
+ `execv
+(
+buf
+,
+Üig¬gv
+);
+
+551
+ `çl
+("Can't„un setuid script withaint checks");
+
+556 #iâdeà
+TAINT
+
+
+557 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+) {
+
+558 #iâdeà
+SETUID_SCRIPTS_ARE_SECURE_NOW
+
+
+559
+ `f¡©
+(
+ `fž’o
+(
+rså
+),&
+¡©buf
+);
+
+560 ià((
+euid
+ !ð
+uid
+ &&ƒuid =ð
+¡©buf
+.
+¡_uid
+ && stbuf.
+¡_mode
+ &
+S_ISUID
+)
+
+562 (
+egid
+ !ð
+gid
+ &&ƒgid =ð
+¡©buf
+.
+¡_gid
+ && stbuf.
+¡_mode
+ &
+S_ISGID
+)
+
+564 ià(!
+do_undump
+)
+
+565
+ `çl
+("YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
+ YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
+
+569 ()
+ `fþo£
+(
+rså
+);
+
+570 ()
+ `¥rštf
+(
+buf
+, "%s/”l%s",
+BIN
+,
+·tchËv–
+);
+
+571
+ `execv
+(
+buf
+,
+Üig¬gv
+);
+
+572
+ `çl
+("Can't„un setuid script withaint checks");
+
+577 #ià!
+ `defšed
+(
+IAMSUID
+è&& !defšed(
+TAINT
+)
+
+581 
+dÛxŒaù
+) {
+
+582 ià((
+s
+ =
+ `¡r_g‘s
+(
+lše¡r
+,
+rså
+, 0)è=ð
+NuÎch
+)
+
+583
+ `çl
+("No Perl script found in input\n");
+
+584 ià(*
+s
+ =ð'#' && s[1] =ð'!' &&
+ `š¡r
+(s,"perl")) {
+
+585
+ `ung‘c
+('\n',
+rså
+);
+
+586
+dÛxŒaù
+ =
+FALSE
+;
+
+587 ià(
+s
+ =
+ `š¡r
+(s,"perl -")) {
+
+588
+s
+ += 6;
+
+589 
+s
+ =
+ `mÜesw™ches
+(s)) ;
+
+591 ià(
+cddœ
+ &&
+ `chdœ
+(cddir) < 0)
+
+592
+ `çl
+("Cª'ˆchdœØ%s",
+cddœ
+);
+
+597
+def¡ab
+ =
+ `¡ab’t
+("_",
+TRUE
+);
+
+599 ià(
+³¾db
+) {
+
+600
+deb¡ash
+ =
+ `hÃw
+(0);
+
+601
+ `¡ab_xhash
+(
+ `¡ab’t
+("_DB",
+TRUE
+)èð
+deb¡ash
+;
+
+602
+cur¡ash
+ =
+deb¡ash
+;
+
+603
+db¬gs
+ =
+ `¡ab_x¬¿y
+(
+ `¯dd
+((
+tmp¡ab
+ =
+ `¡ab’t
+("¬gs",
+TRUE
+))));
+
+604
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+605
+db¬gs
+->
+¬y_æags
+ = 0;
+
+606
+subÇme
+ =
+ `¡r_make
+("main",4);
+
+607
+DB¡ab
+ =
+ `¡ab’t
+("DB",
+TRUE
+);
+
+608
+DB¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+609
+DBlše
+ =
+ `¡ab’t
+("dblše",
+TRUE
+);
+
+610
+DBlše
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+611
+DBsub
+ =
+ `hadd
+(
+tmp¡ab
+ =
+ `¡ab’t
+("sub",
+TRUE
+));
+
+612
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+613
+DBsšgË
+ =
+ `¡ab_v®
+((
+tmp¡ab
+ =
+ `¡ab’t
+("sšgË",
+TRUE
+)));
+
+614
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+615
+DBŒaû
+ =
+ `¡ab_v®
+((
+tmp¡ab
+ =
+ `¡ab’t
+("Œaû",
+TRUE
+)));
+
+616
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+617
+DBsigÇl
+ =
+ `¡ab_v®
+((
+tmp¡ab
+ =
+ `¡ab’t
+("sigÇl",
+TRUE
+)));
+
+618
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+619
+cur¡ash
+ =
+def¡ash
+;
+
+624
+buãnd
+ =
+buåŒ
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+626
+§ve¡ack
+ =
+ `ªew
+(
+NuΡab
+);
+
+627
+¡ack
+ =
+ `ªew
+(
+NuΡab
+);
+
+628
+¡ack
+->
+¬y_æags
+ = 0;
+
+629
+ `afžl
+(
+¡ack
+,63);‡fill(stack,-1);
+
+630
+ `afžl
+(
+§ve¡ack
+,63);‡fill(savestack,-1);
+
+634
+”rÜ_couÁ
+ = 0;
+
+635 ià(
+ `yy·r£
+(è||
+”rÜ_couÁ
+) {
+
+636 ià(
+mšus_c
+)
+
+637
+ `çl
+("% had compž©iÚƒ¼Üs.\n",
+Üigfž’ame
+);
+
+639
+ `çl
+("Execution of %s‡borted dueo compilationƒrrors.\n",
+
+640
+Üigfž’ame
+);
+
+644
+ `New
+(50,
+loÝ_¡ack
+,128,
+loÝ
+);
+
+645 #ifdeà
+DEBUGGING
+
+
+646 ià(
+debug
+) {
+
+647
+ `New
+(51,
+debÇme
+,128,);
+
+648
+ `New
+(52,
+debd–im
+,128,);
+
+651
+cur¡ash
+ =
+def¡ash
+;
+
+653
+´•roûss
+ =
+FALSE
+;
+
+654 ià(
+e_å
+) {
+
+655
+e_å
+ =
+NuÎå
+;
+
+656 ()
+ `UNLINK
+(
+e_tm²ame
+);
+
+661 ià(
+sig¡ab
+ =
+ `¡ab’t
+("SIG",
+®l¡abs
+)) {
+
+662
+sig¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+663 ()
+ `hadd
+(
+sig¡ab
+);
+
+666
+ `magiÿlize
+("!#?^~=-%.+&*()<>,\\/[|`':\004\t\024\027");
+
+667
+ `u£rš™
+();
+
+669
+am³r¡ab
+ =
+ `¡ab’t
+("&",
+®l¡abs
+);
+
+670
+Ëá¡ab
+ =
+ `¡ab’t
+("`",
+®l¡abs
+);
+
+671
+right¡ab
+ =
+ `¡ab’t
+("'",
+®l¡abs
+);
+
+672
+§wam³r§nd
+ = (
+am³r¡ab
+ ||
+Ëá¡ab
+ ||
+right¡ab
+);
+
+673 ià(
+tmp¡ab
+ =
+ `¡ab’t
+(":",
+®l¡abs
+))
+
+674
+ `¡r_£t
+(
+ `STAB_STR
+(
+tmp¡ab
+),
+chݣt
+);
+
+675 ià(
+tmp¡ab
+ =
+ `¡ab’t
+("\024",
+®l¡abs
+))
+
+676
+ `time
+(&
+ba£time
+);
+
+679 ià(
+tmp¡ab
+ =
+ `¡ab’t
+(";",
+®l¡abs
+))
+
+680
+ `¡r_£t
+(
+ `STAB_STR
+(
+tmp¡ab
+),"\034");
+
+681 ià(
+tmp¡ab
+ =
+ `¡ab’t
+("]",
+®l¡abs
+)) {
+
+682
+¡r
+ =
+ `STAB_STR
+(
+tmp¡ab
+);
+
+683
+ `¡r_£t
+(
+¡r
+,
+rcsid
+);
+
+684
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ =
+ `©of
+(
+·tchËv–
+);
+
+685
+¡r
+->
+¡r_nok
+ = 1;
+
+687
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+ `¡ab’t
+("\"",
+TRUE
+)), " ", 1);
+
+689
+¡dš¡ab
+ =
+ `¡ab’t
+("STDIN",
+TRUE
+);
+
+690
+¡dš¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+691
+ `¡ab_io
+(
+¡dš¡ab
+èð
+ `¡io_Ãw
+();
+
+692
+ `¡ab_io
+(
+¡dš¡ab
+)->
+iå
+ =
+¡dš
+;
+
+693
+tmp¡ab
+ =
+ `¡ab’t
+("¡dš",
+TRUE
+);
+
+694
+ `¡ab_io
+(
+tmp¡ab
+èð¡ab_io(
+¡dš¡ab
+);
+
+695
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+697
+tmp¡ab
+ =
+ `¡ab’t
+("STDOUT",
+TRUE
+);
+
+698
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+699
+ `¡ab_io
+(
+tmp¡ab
+èð
+ `¡io_Ãw
+();
+
+700
+ `¡ab_io
+(
+tmp¡ab
+)->
+oå
+ = sb_ioÑmp¡ab)->
+iå
+ =
+¡dout
+;
+
+701
+defout¡ab
+ =
+tmp¡ab
+;
+
+702
+tmp¡ab
+ =
+ `¡ab’t
+("¡dout",
+TRUE
+);
+
+703
+ `¡ab_io
+(
+tmp¡ab
+èð¡ab_io(
+defout¡ab
+);
+
+704
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+706
+curout¡ab
+ =
+ `¡ab’t
+("STDERR",
+TRUE
+);
+
+707
+curout¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+708
+ `¡ab_io
+(
+curout¡ab
+èð
+ `¡io_Ãw
+();
+
+709
+ `¡ab_io
+(
+curout¡ab
+)->
+oå
+ = sb_io(curout¡ab)->
+iå
+ =
+¡d”r
+;
+
+710
+tmp¡ab
+ =
+ `¡ab’t
+("¡d”r",
+TRUE
+);
+
+711
+ `¡ab_io
+(
+tmp¡ab
+èð¡ab_io(
+curout¡ab
+);
+
+712
+tmp¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+713
+curout¡ab
+ =
+defout¡ab
+;
+
+715
+¡©Çme
+ =
+ `SŒ_Ãw
+(66,0);
+
+719
+rs
+ =
+Äs
+;
+
+720
+r¦’
+ =
+Ħ’
+;
+
+721
+rsch¬
+ =
+Äsch¬
+;
+
+722
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+ `¡ab’t
+("/",
+TRUE
+)),
+rs
+,
+r¦’
+);
+
+724 ià(
+do_undump
+)
+
+725
+ `my_uÃxec
+();
+
+727
+ju¡_do™
+:
+
+728
+¬gc
+--,
+¬gv
+++;
+
+729 ià(
+dosw™ches
+) {
+
+730 ;
+¬gc
+ > 0 && **
+¬gv
+ == '-';‡rgc--,argv++) {
+
+731 ià(
+¬gv
+[0][1] == '-') {
+
+732
+¬gc
+--,
+¬gv
+++;
+
+735 ià(
+s
+ =
+ `šdex
+(
+¬gv
+[0], '=')) {
+
+736 *
+s
+++ = '\0';
+
+737
+ `¡r_£t
+(
+ `¡ab_v®
+(
+ `¡ab’t
+(
+¬gv
+[0]+1,
+TRUE
+)),
+s
+);
+
+740
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+ `¡ab’t
+(
+¬gv
+[0]+1,
+TRUE
+)),()1.0);
+
+743 #ifdeà
+TAINT
+
+
+744
+š‹d
+ = 1;
+
+746 ià(
+tmp¡ab
+ =
+ `¡ab’t
+("0",
+®l¡abs
+)) {
+
+747
+ `¡r_£t
+(
+ `¡ab_v®
+(
+tmp¡ab
+),
+Üigfž’ame
+);
+
+748
+ `magiúame
+("0",
+NuÎch
+, 0);
+
+750 ià(
+tmp¡ab
+ =
+ `¡ab’t
+("\020",
+®l¡abs
+))
+
+751
+ `¡r_£t
+(
+ `¡ab_v®
+(
+tmp¡ab
+),
+Üig¬gv
+[0]);
+
+752 ià(
+¬gv¡ab
+ =
+ `¡ab’t
+("ARGV",
+®l¡abs
+)) {
+
+753
+¬gv¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+754 ()
+ `¯dd
+(
+¬gv¡ab
+);
+
+755
+ `aþ—r
+(
+ `¡ab_¬¿y
+(
+¬gv¡ab
+));
+
+756 ;
+¬gc
+ > 0;‡rgc--,
+¬gv
+++) {
+
+757 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+¬gv¡ab
+),
+ `¡r_make
+(
+¬gv
+[0],0));
+
+760 #ifdeà
+TAINT
+
+
+761 (è
+ `¡ab’t
+("ENV",
+TRUE
+);
+
+763 ià(
+’v¡ab
+ =
+ `¡ab’t
+("ENV",
+®l¡abs
+)) {
+
+764
+’v¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+765 ()
+ `hadd
+(
+’v¡ab
+);
+
+766
+ `hþ—r
+(
+ `¡ab_hash
+(
+’v¡ab
+),
+FALSE
+);
+
+767 ià(
+’v
+ !ð
+’vœÚ
+)
+
+768
+’vœÚ
+[0] =
+NuÎch
+;
+
+769 ; *
+’v
+;ƒnv++) {
+
+770 ià(!(
+s
+ =
+ `šdex
+(*
+’v
+,'=')))
+
+772 *
+s
+++ = '\0';
+
+773
+¡r
+ =
+ `¡r_make
+(
+s
+--,0);
+
+774
+ `¡r_magic
+(
+¡r
+,
+’v¡ab
+, 'E', *
+’v
+,
+s
+ - *env);
+
+775 ()
+ `h¡Üe
+(
+ `¡ab_hash
+(
+’v¡ab
+), *
+’v
+,
+s
+ - *’v,
+¡r
+, 0);
+
+776 *
+s
+ = '=';
+
+779 #ifdeà
+TAINT
+
+
+780
+š‹d
+ = 0;
+
+782 ià(
+tmp¡ab
+ =
+ `¡ab’t
+("$",
+®l¡abs
+))
+
+783
+ `¡r_num£t
+(
+ `STAB_STR
+(
+tmp¡ab
+),()
+ `g‘pid
+());
+
+785 ià(
+dow¬n
+) {
+
+786
+ `¡ab_check
+('A','Z');
+
+787
+ `¡ab_check
+('a','z');
+
+790 ià(
+ `£tjmp
+(
+tÝ_’v
+))
+
+791
+loÝ_±r
+ = -1;
+
+793 #ifdeà
+DEBUGGING
+
+
+794 ià(
+debug
+ & 1024)
+
+795
+ `dump_®l
+();
+
+796 ià(
+debug
+)
+
+797
+ `årštf
+(
+¡d”r
+,"\nEXECUTING...\n\n");
+
+800 ià(
+mšus_c
+) {
+
+801
+ `årštf
+(
+¡d”r
+,"% syÁax OK\n",
+Üigfž’ame
+);
+
+802
+ `ex™
+(0);
+
+807 (è
+ `cmd_exec
+(
+maš_roÙ
+,
+G_SCALAR
+,-1);
+
+809 ià(
+gÙo_rg
+)
+
+810
+ `çl
+("Cª'ˆfšd†ab– \"%s\"--abÜtšg",
+gÙo_rg
+);
+
+811
+ `ex™
+(0);
+
+813
+ }
+}
+
+816
+ $magiÿlize
+(
+li¡
+)
+
+817 *
+li¡
+;
+
+819 
+sym
+[2];
+
+821
+sym
+[1] = '\0';
+
+822 *
+sym
+ = *
+li¡
+++)
+
+823
+ `magiúame
+(
+sym
+,
+NuÎch
+, 0);
+
+824
+ }
+}
+
+827
+ $magiúame
+(
+sym
+,
+Çme
+,
+ÇmËn
+)
+
+828 *
+sym
+;
+
+829 *
+Çme
+;
+
+830 
+ÇmËn
+;
+
+832 
+STAB
+ *
+¡ab
+;
+
+834 ià(
+¡ab
+ =
+ `¡ab’t
+(
+sym
+,
+®l¡abs
+)) {
+
+835
+ `¡ab_æags
+(
+¡ab
+èð
+SF_VMAGIC
+;
+
+836
+ `¡r_magic
+(
+ `¡ab_v®
+(
+¡ab
+), sb, 0,
+Çme
+,
+ÇmËn
+);
+
+838
+ }
+}
+
+843
+ $do_ev®
+(
+¡r
+,
+Ýty³
+,
+¡ash
+,
+gimme
+,
+¬gÏ¡
+)
+
+844
+STR
+ *
+¡r
+;
+
+845 
+Ýty³
+;
+
+846
+HASH
+ *
+¡ash
+;
+
+847 
+gimme
+;
+
+848 *
+¬gÏ¡
+;
+
+850
+STR
+ **
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+851 
+»tv®
+;
+
+852
+CMD
+ *
+myroÙ
+ =
+NuÎcmd
+;
+
+853
+ARRAY
+ *
+;
+
+854 
+i
+;
+
+855
+CMD
+ *
+VOLATILE
+
+Þdcurcmd
+ =
+curcmd
+;
+
+856
+VOLATILE
+ 
+Þdtmps_ba£
+ =
+tmps_ba£
+;
+
+857
+VOLATILE
+ 
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+858
+VOLATILE
+ 
+Þd³¾db
+ =
+³¾db
+;
+
+859
+SPAT
+ *
+VOLATILE
+
+Þd¥©
+ =
+cur¥©
+;
+
+860
+SPAT
+ *
+VOLATILE
+
+Þdl¥©
+ =
+Ï¡¥©
+;
+
+861 *
+Ï¡_ev®
+ =
+NuÎch
+;
+
+862 
+CMD
+ *
+Ï¡_roÙ
+ =
+NuÎcmd
+;
+
+863
+VOLATILE
+ 
+ =
+¬gÏ¡
+[0];
+
+864 *
+¥ecfž’ame
+;
+
+865 *
+tmpfž’ame
+;
+
+866 
+·rsšg
+ = 1;
+
+868
+tmps_ba£
+ =
+tmps_max
+;
+
+869 ià(
+cur¡ash
+ !ð
+¡ash
+) {
+
+870 ()
+ `§veh±r
+(&
+cur¡ash
+);
+
+871
+cur¡ash
+ =
+¡ash
+;
+
+873
+ `¡r_£t
+(
+ `¡ab_v®
+(
+ `¡ab’t
+("@",
+TRUE
+)),"");
+
+874 ià(
+curcmd
+->
+c_lše
+ == 0)
+
+875
+³¾db
+ =
+FALSE
+;
+
+876
+curcmd
+ = &
+compžšg
+;
+
+877 ià(
+Ýty³
+ =ð
+O_EVAL
+) {
+
+878
+curcmd
+->
+c_fže¡ab
+ =
+ `f¡ab
+("(eval)");
+
+879
+curcmd
+->
+c_lše
+ = 1;
+
+880
+ `¡r_s£t
+(
+lše¡r
+,
+¡r
+);
+
+881
+ `¡r_ÿt
+(
+lše¡r
+,";");
+
+884 ià(
+Ï¡_roÙ
+ && !
+š_ev®
+) {
+
+885
+ `Saãä“
+(
+Ï¡_ev®
+);
+
+886
+Ï¡_ev®
+ =
+NuÎch
+;
+
+887
+ `cmd_ä“
+(
+Ï¡_roÙ
+);
+
+888
+Ï¡_roÙ
+ =
+NuÎcmd
+;
+
+890
+¥ecfž’ame
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+891
+ `¡r_£t
+(
+lše¡r
+,"");
+
+892 ià(
+Ýty³
+ =ð
+O_REQUIRE
+ && &
+¡r_undef
+ !=
+
+893
+ `hãtch
+(
+ `¡ab_hash
+(
+šc¡ab
+),
+¥ecfž’ame
+,
+ `¡¾’
+(specfilename), 0)) {
+
+894
+curcmd
+ =
+Þdcurcmd
+;
+
+895
+tmps_ba£
+ =
+Þdtmps_ba£
+;
+
+896
+[++
+] = &
+¡r_yes
+;
+
+897
+³¾db
+ =
+Þd³¾db
+;
+
+898 
+;
+
+900
+tmpfž’ame
+ =
+ `§ve¡r
+(
+¥ecfž’ame
+);
+
+901 ià(
+ `šdex
+("/.", *
+tmpfž’ame
+))
+
+902
+rså
+ =
+ `fÝ’
+(
+tmpfž’ame
+,"r");
+
+904
+ =
+ `¡ab_¬¿y
+(
+šc¡ab
+);
+
+905 
+i
+ = 0; i <ð
+->
+¬y_fžl
+; i++) {
+
+906 ()
+ `¥rštf
+(
+buf
+, "%s/%s",
+
+907
+ `¡r_g‘
+(
+ `aãtch
+(
+,
+i
+,
+TRUE
+)),
+¥ecfž’ame
+);
+
+908
+rså
+ =
+ `fÝ’
+(
+buf
+,"r");
+
+909 ià(
+rså
+) {
+
+910 *
+s
+ =
+buf
+;
+
+912 ià(*
+s
+ == '.' && s[1] == '/')
+
+913
+s
+ += 2;
+
+914
+ `Saãä“
+(
+tmpfž’ame
+);
+
+915
+tmpfž’ame
+ =
+ `§ve¡r
+(
+s
+);
+
+920
+curcmd
+->
+c_fže¡ab
+ =
+ `f¡ab
+(
+tmpfž’ame
+);
+
+921
+ `Saãä“
+(
+tmpfž’ame
+);
+
+922
+tmpfž’ame
+ =
+NuÎch
+;
+
+923 ià(!
+rså
+) {
+
+924
+curcmd
+ =
+Þdcurcmd
+;
+
+925
+tmps_ba£
+ =
+Þdtmps_ba£
+;
+
+926 ià(
+Ýty³
+ =ð
+O_REQUIRE
+) {
+
+927
+ `¥rštf
+(
+tok’buf
+,"Cª'ˆloÿ‹ % š @INC",
+¥ecfž’ame
+);
+
+928 ià(
+ `š¡r
+(
+tok’buf
+,".h "))
+
+929
+ `¡rÿt
+(
+tok’buf
+," (change .ho .ph maybe?)");
+
+930 ià(
+ `š¡r
+(
+tok’buf
+,".ph "))
+
+931
+ `¡rÿt
+(
+tok’buf
+," (did you„un h2ph?)");
+
+932
+ `çl
+("%s",
+tok’buf
+);
+
+934 ià(
+gimme
+ !ð
+G_ARRAY
+)
+
+935
+[++
+] = &
+¡r_undef
+;
+
+936
+³¾db
+ =
+Þd³¾db
+;
+
+937 
+;
+
+939
+curcmd
+->
+c_lše
+ = 0;
+
+941
+š_ev®
+++;
+
+942
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+buåŒ
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+943
+buãnd
+ =
+buåŒ
+ +
+lše¡r
+->
+¡r_cur
+;
+
+944 ià(++
+loÝ_±r
+ >ð
+loÝ_max
+) {
+
+945
+loÝ_max
+ += 128;
+
+946
+ `R’ew
+(
+loÝ_¡ack
+,
+loÝ_max
+, 
+loÝ
+);
+
+948
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+ = "_EVAL_";
+
+949
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_¥
+ =
+;
+
+950 #ifdeà
+DEBUGGING
+
+
+951 ià(
+debug
+ & 4) {
+
+952
+ `deb
+("(Pushšg†ab– #%d _EVAL_)\n",
+loÝ_±r
+);
+
+955
+ev®_roÙ
+ =
+NuÎcmd
+;
+
+956 ià(
+ `£tjmp
+(
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_’v
+)) {
+
+957
+»tv®
+ = 1;
+
+960
+”rÜ_couÁ
+ = 0;
+
+961 ià(
+rså
+) {
+
+962
+»tv®
+ =
+ `yy·r£
+();
+
+963
+»tv®
+ |ð
+”rÜ_couÁ
+;
+
+965 ià(
+Ï¡_roÙ
+ && *
+buåŒ
+ =ð*
+Ï¡_ev®
+ &&
+ `¡rEQ
+(bufptr,last_eval)){
+
+966
+»tv®
+ = 0;
+
+967
+ev®_roÙ
+ =
+Ï¡_roÙ
+;
+
+969 ià(
+š_ev®
+ == 1) {
+
+970 ià(
+Ï¡_roÙ
+) {
+
+971
+ `Saãä“
+(
+Ï¡_ev®
+);
+
+972
+Ï¡_ev®
+ =
+NuÎch
+;
+
+973
+ `cmd_ä“
+(
+Ï¡_roÙ
+);
+
+975
+Ï¡_roÙ
+ =
+NuÎcmd
+;
+
+976
+Ï¡_ev®
+ =
+ `§ve¡r
+(
+buåŒ
+);
+
+977
+»tv®
+ =
+ `yy·r£
+();
+
+978
+»tv®
+ |ð
+”rÜ_couÁ
+;
+
+979 ià(!
+»tv®
+)
+
+980
+Ï¡_roÙ
+ =
+ev®_roÙ
+;
+
+981 ià(!
+Ï¡_roÙ
+) {
+
+982
+ `Saãä“
+(
+Ï¡_ev®
+);
+
+983
+Ï¡_ev®
+ =
+NuÎch
+;
+
+987
+»tv®
+ =
+ `yy·r£
+();
+
+989
+myroÙ
+ =
+ev®_roÙ
+;
+
+991 ià(
+»tv®
+) {
+
+992
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+993
+ =
+¬gÏ¡
+[0];
+
+994 ià(
+gimme
+ !ð
+G_ARRAY
+)
+
+995
+[++
+] = &
+¡r_undef
+;
+
+996 ià(
+·rsšg
+) {
+
+997 #iâdeà
+MANGLEDPARSE
+
+
+998 #ifdeà
+DEBUGGING
+
+
+999 ià(
+debug
+ & 128)
+
+1000
+ `årštf
+(
+¡d”r
+,"F»ešgƒv®_roÙ %lx\n",()
+ev®_roÙ
+);
+
+1002
+ `cmd_ä“
+(
+ev®_roÙ
+);
+
+1004 ià(
+ev®_roÙ
+ =ð
+Ï¡_roÙ
+)
+
+1005
+Ï¡_roÙ
+ =
+NuÎcmd
+;
+
+1006
+ev®_roÙ
+ =
+myroÙ
+ =
+NuÎcmd
+;
+
+1008 ià(
+rså
+) {
+
+1009
+ `fþo£
+(
+rså
+);
+
+1010
+rså
+ = 0;
+
+1014
+·rsšg
+ = 0;
+
+1015
+ =
+ `cmd_exec
+(
+ev®_roÙ
+,
+gimme
+,sp);
+
+1016
+ =
+¡ack
+->
+¬y_¬¿y
+;
+
+1017 
+i
+ =
+¬gÏ¡
+[0] + 1; i <ð
+; i++)
+
+1018
+[
+i
+] =
+ `¡r_mÜl
+(st[i]);
+
+1020 ià(
+š_ev®
+ !ð1 &&
+myroÙ
+ !ð
+Ï¡_roÙ
+)
+
+1021
+ `cmd_ä“
+(
+myroÙ
+);
+
+1024
+³¾db
+ =
+Þd³¾db
+;
+
+1025
+š_ev®
+--;
+
+1026 #ifdeà
+DEBUGGING
+
+
+1027 ià(
+debug
+ & 4) {
+
+1028 *
+tmps
+ =
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+;
+
+1029
+ `deb
+("(PÝpšg†ab– #%d %s)\n",
+loÝ_±r
+,
+
+1030
+tmps
+ ?mps : "" );
+
+1033
+loÝ_±r
+--;
+
+1034
+tmps_ba£
+ =
+Þdtmps_ba£
+;
+
+1035
+cur¥©
+ =
+Þd¥©
+;
+
+1036
+Ï¡¥©
+ =
+Þdl¥©
+;
+
+1037 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+Þd§ve
+)
+
+1038
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+1040 ià(
+Ýty³
+ !ð
+O_EVAL
+) {
+
+1041 ià(
+»tv®
+) {
+
+1042 ià(
+Ýty³
+ =ð
+O_REQUIRE
+)
+
+1043
+ `çl
+("%s",
+ `¡r_g‘
+(
+ `¡ab_v®
+(
+ `¡ab’t
+("@",
+TRUE
+))));
+
+1046
+curcmd
+ =
+Þdcurcmd
+;
+
+1047 ià(
+gimme
+ =ð
+G_SCALAR
+ ?
+ `¡r_Œue
+(
+[
+]è: s°>
+¬gÏ¡
+[0]) {
+
+1048 ()
+ `h¡Üe
+(
+ `¡ab_hash
+(
+šc¡ab
+),
+¥ecfž’ame
+,
+
+1049
+ `¡¾’
+(
+¥ecfž’ame
+),
+ `¡r_smake
+(
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)),
+
+1052 ià(
+Ýty³
+ =ð
+O_REQUIRE
+)
+
+1053
+ `çl
+("% did‚Ù„‘uº‡ruv®ue",
+¥ecfž’ame
+);
+
+1056
+curcmd
+ =
+Þdcurcmd
+;
+
+1057 
+;
+
+1058
+ }
+}
+
+1063
+ $mÜesw™ches
+(
+s
+)
+
+1064 *
+s
+;
+
+1066 
+numËn
+;
+
+1068
+»sw™ch
+:
+
+1069 *
+s
+) {
+
+1071
+Äsch¬
+ =
+ `sÿnoù
+(
+s
+, 4, &
+numËn
+);
+
+1072
+Äs
+ =
+ `n§ve¡r
+("\n",1);
+
+1073 *
+Äs
+ =
+Äsch¬
+;
+
+1074 ià(
+Äsch¬
+ > 0377) {
+
+1075
+Ħ’
+ = 0;
+
+1076
+Äs
+ = "";
+
+1078 ià(!
+Äsch¬
+ &&
+numËn
+ >= 2) {
+
+1079
+Ħ’
+ = 2;
+
+1080
+Äs
+ = "\n\n";
+
+1081
+Äsch¬
+ = '\n';
+
+1083 
+s
+ +
+numËn
+;
+
+1085
+mšus_a
+ =
+TRUE
+;
+
+1086
+s
+++;
+
+1087 
+s
+;
+
+1089
+mšus_c
+ =
+TRUE
+;
+
+1090
+s
+++;
+
+1091 
+s
+;
+
+1093 #ifdeà
+TAINT
+
+
+1094 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+)
+
+1095
+ `çl
+("No -d‡llowed in setuid scripts");
+
+1097
+³¾db
+ =
+TRUE
+;
+
+1098
+s
+++;
+
+1099 
+s
+;
+
+1101 #ifdeà
+DEBUGGING
+
+
+1102 #ifdeà
+TAINT
+
+
+1103 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+)
+
+1104
+ `çl
+("No -D‡llowed in setuid scripts");
+
+1106
+debug
+ =
+ `©oi
+(
+s
++1) | 32768;
+
+1108
+ `w¬n
+("Recompile…erl with -DDEBUGGINGo use -D switch\n");
+
+1110 
+s
+++;
+ `isdig™
+(*s); s++) ;
+
+1111 
+s
+;
+
+1113
+š¶aû
+ =
+ `§ve¡r
+(
+s
++1);
+
+1114 
+s
+ =
+š¶aû
+; * && !
+ `is¥aû
+(*s); s++) ;
+
+1115 *
+s
+ = '\0';
+
+1118 #ifdeà
+TAINT
+
+
+1119 ià(
+euid
+ !ð
+uid
+ ||
+egid
+ !ð
+gid
+)
+
+1120
+ `çl
+("No -I‡llowed in setuid scripts");
+
+1122 ià(*++
+s
+) {
+
+1123 ()
+ `­ush
+(
+ `¡ab_¬¿y
+(
+šc¡ab
+),
+ `¡r_make
+(
+s
+,0));
+
+1126
+ `çl
+("No space‡llowed‡fter -I");
+
+1129
+mšus_l
+ =
+TRUE
+;
+
+1130
+s
+++;
+
+1131 ià(
+ `isdig™
+(*
+s
+)) {
+
+1132
+Üs
+ =
+ `§ve¡r
+("\n");
+
+1133
+ܦ’
+ = 1;
+
+1134 *
+Üs
+ =
+ `sÿnoù
+(
+s
+, 3 + (* =ð'0'), &
+numËn
+);
+
+1135
+s
+ +ð
+numËn
+;
+
+1138
+Üs
+ =
+ `n§ve¡r
+(
+Äs
+,
+Ħ’
+);
+
+1139
+ܦ’
+ =
+Ħ’
+;
+
+1141 
+s
+;
+
+1143
+mšus_n
+ =
+TRUE
+;
+
+1144
+s
+++;
+
+1145 
+s
+;
+
+1147
+mšus_p
+ =
+TRUE
+;
+
+1148
+s
+++;
+
+1149 
+s
+;
+
+1151
+do_undump
+ =
+TRUE
+;
+
+1152
+s
+++;
+
+1153 
+s
+;
+
+1155
+un§ã
+ =
+TRUE
+;
+
+1156
+s
+++;
+
+1157 
+s
+;
+
+1159
+ `åuts
+("\nThi i ³¾, v”siÚ 4.0\n\n",
+¡dout
+);
+
+1160
+ `åuts
+(
+rcsid
+,
+¡dout
+);
+
+1161
+ `åuts
+("\nCÝyrighˆ(cè1989, 1990, 1991, L¬ry W®l\n",
+¡dout
+);
+
+1162 #ifdeà
+MSDOS
+
+
+1163
+ `åuts
+("MS-DOS…ort Copyright (c) 1989, 1990, Diomidis Spinellis\n",
+
+1164
+¡dout
+);
+
+1165 #ifdeà
+OS2
+
+
+1166
+ `åuts
+("OS/2…ort Copyright (c) 1990, Raymond Chen, Kai Uwe Rommel\n",
+
+1167
+¡dout
+);
+
+1170
+ `åuts
+("\n\
+ may bcÝ›d oÆy und”h‹rm oàthGNU G’”® PubliøLiûn£,\n\
+ cÝy oàwhich cª bfound w™hhP”È4.0 di¡ributiÚ k™.\n",
+¡dout
+);
+
+1173 #ifdeà
+MSDOS
+
+
+1174
+ `u§ge
+(
+Üig¬gv
+[0]);
+
+1176
+ `ex™
+(0);
+
+1178
+dow¬n
+ =
+TRUE
+;
+
+1179
+s
+++;
+
+1180 
+s
+;
+
+1186
+ `çl
+("Sw™ch m—nšgËs aá” -x: -%s",
+s
+);
+
+1188 
+NuÎch
+;
+
+1189
+ }
+}
+
+1195
+ $my_uÃxec
+()
+
+1197 #ifdeà
+UNEXEC
+
+
+1198 
+¡©us
+;
+
+1199
+
+‘ext
+;
+
+1200 
+dum²ame
+[
+BUFSIZ
+];
+
+1201 
+³¾·th
+[256];
+
+1203
+ `¥rštf
+ (
+dum²ame
+, "%s.³¾dump",
+Üigfž’ame
+);
+
+1204
+ `¥rštf
+ (
+³¾·th
+, "%s/³¾",
+BIN
+);
+
+1206
+¡©us
+ =
+ `uÃxec
+(
+dum²ame
+,
+³¾·th
+, &
+‘ext
+,
+ `sbrk
+(0), 0);
+
+1207 ià(
+¡©us
+)
+
+1208
+ `årštf
+(
+¡d”r
+, "uÃxeøoà% štØ% çžed!\n",
+³¾·th
+,
+dum²ame
+);
+
+1209
+ `ex™
+(
+¡©us
+);
+
+1211 #iâdeà
+SIGABRT
+
+
+1212 
+ #SIGABRT
+
+SIGILL
+
+
+ )
+
+1214 #iâdeà
+SIGILL
+
+
+1215 
+ #SIGILL
+ 6
+
+ )
+
+1217
+ `kžl
+(
+ `g‘pid
+(),
+SIGABRT
+);
+
+1219
+ }
+}
+
+ @perl.h
+
+17 
+ #VOIDWANT
+ 1
+
+ )
+
+18 
+ ~"cÚfig.h
+"
+
+20 #ifdeà
+MSDOS
+
+
+30 
+ #HAS_ALARM
+
+
+ )
+
+31 
+ #HAS_CHOWN
+
+
+ )
+
+32 
+ #HAS_CHROOT
+
+
+ )
+
+33 
+ #HAS_FORK
+
+
+ )
+
+34 
+ #HAS_GETLOGIN
+
+
+ )
+
+35 
+ #HAS_GETPPID
+
+
+ )
+
+36 
+ #HAS_KILL
+
+
+ )
+
+37 
+ #HAS_LINK
+
+
+ )
+
+38 
+ #HAS_PIPE
+
+
+ )
+
+39 
+ #HAS_WAIT
+
+
+ )
+
+40 
+ #HAS_UMASK
+
+
+ )
+
+45 
+ #HAS_GROUP
+
+
+ )
+
+46 
+ #HAS_PASSWD
+
+
+ )
+
+50 #ià
+defšed
+(
+HASVOLATILE
+è|| defšed(
+__STDC__
+)
+
+51 
+ #VOLATILE
+ vÞ©že
+
+ )
+
+53 
+ #VOLATILE
+
+
+ )
+
+56 #ifdeà
+IAMSUID
+
+
+57 #iâdeà
+TAINT
+
+
+58 
+ #TAINT
+
+
+ )
+
+62 #iâdeà
+HAS_VFORK
+
+
+63 
+ #vfÜk
+
+fÜk
+
+
+ )
+
+66 #ifdeà
+HAS_GETPGRP2
+
+
+67 #iâdeà
+HAS_GETPGRP
+
+
+68 
+ #HAS_GETPGRP
+
+
+ )
+
+70 
+ #g‘pg½
+
+g‘pg½2
+
+
+ )
+
+73 #ifdeà
+HAS_SETPGRP2
+
+
+74 #iâdeà
+HAS_SETPGRP
+
+
+75 
+ #HAS_SETPGRP
+
+
+ )
+
+77 
+ #£g½
+
+£g½2
+
+
+ )
+
+80 
+ ~<¡dio.h
+>
+
+81 
+ ~<ùy³.h
+>
+
+82 
+ ~<£tjmp.h
+>
+
+83 #iâdeà
+MSDOS
+
+
+84 
+ ~<sys/·¿m.h
+>
+
+86 #ifdeà
+__STDC__
+
+
+89 
+ ~<¡ršg.h
+>
+
+92 #ià
+defšed
+(
+HAS_MEMCMP
+è&& defšed(
+ms
+è&&
+BYTEORDER
+ == 0x1234
+
+93 #undeà
+HAS_MEMCMP
+
+
+96 #ifdeà
+HAS_MEMCPY
+
+
+98 #iâdeà
+__STDC__
+
+
+99 #iâdeà
+memýy
+
+
+100
+*
+memýy
+(), *
+mem£t
+();
+
+101
+
+memcmp
+();
+
+105 
+ #bcÝy
+(
+s1
+,
+s2
+,
+l
+ `memýy
+(s2,s1,l)
+
+ )
+
+106 
+ #bz”o
+(
+s
+,
+l
+ `mem£t
+(s,0,l)
+
+ )
+
+109 #iâdeà
+HAS_BCMP
+
+
+110 
+ #bcmp
+(
+s1
+,
+s2
+,
+l
+ `memcmp
+(s1,s2,l)
+
+ )
+
+113 #iâdeà
+_TYPES_
+
+
+114 #iâdeà
+majÜ
+
+
+115 
+ ~<sys/ty³s.h
+>
+
+119 #ifdeà
+I_NETINET_IN
+
+
+120 
+ ~<Ãtš‘/š.h
+>
+
+123 
+ ~<sys/¡©.h
+>
+
+125 #ifdeà
+I_TIME
+
+
+126 
+ ~<time.h
+>
+
+129 #ifdeà
+I_SYS_TIME
+
+
+130 #ifdeà
+SYSTIMEKERNEL
+
+
+131 
+ #KERNEL
+
+
+ )
+
+133 
+ ~<sys/time.h
+>
+
+134 #ifdeà
+SYSTIMEKERNEL
+
+
+135 #undeà
+KERNEL
+
+
+139 #iâdeà
+MSDOS
+
+
+140 
+ ~<sys/times.h
+>
+
+143 #ià
+defšed
+(
+HAS_STRERROR
+è&& (!defšed(
+HAS_MKDIR
+è|| !defšed(
+HAS_RMDIR
+))
+
+144 #undeà
+HAS_STRERROR
+
+
+147 
+ ~<Ӽo.h
+>
+
+148 #iâdeà
+MSDOS
+
+
+149 #iâdeà
+Ӽo
+
+
+150
+
+Ӽo
+;
+
+154 #iâdeà
+¡»¼Ü
+
+
+155 #ifdeà
+HAS_STRERROR
+
+
+156 *
+¡»¼Ü
+();
+
+158
+
+sys_ü
+;
+
+159
+*
+sys_”¾i¡
+[];
+
+160 
+ #¡»¼Ü
+(
+e
+è(Óè< 0 || (eè>ð
+sys_ü
+ ? "(unknown)" :
+sys_”¾i¡
+[e])
+
+ )
+
+164 #ifdeà
+I_SYSIOCTL
+
+
+165 #iâdeà
+_IOCTL_
+
+
+166 
+ ~<sys/ioùl.h
+>
+
+170 #ià
+defšed
+(
+mc300
+è|| defšed(
+mc500
+è|| defšed(
+mc700
+)
+
+171 #ifdeà
+HAS_SOCKETPAIR
+
+
+172 #undeà
+HAS_SOCKETPAIR
+
+
+174 #ifdeà
+HAS_NDBM
+
+
+175 #undeà
+HAS_NDBM
+
+
+179 #ifdeà
+HAS_GDBM
+
+
+180 #ifdeà
+I_GDBM
+
+
+181 
+ ~<gdbm.h
+>
+
+183 
+ #SOME_DBM
+
+
+ )
+
+184 #ifdeà
+HAS_NDBM
+
+
+185 #undeà
+HAS_NDBM
+
+
+187 #ifdeà
+HAS_ODBM
+
+
+188 #undeà
+HAS_ODBM
+
+
+191 #ifdeà
+HAS_NDBM
+
+
+192 
+ ~<ndbm.h
+>
+
+193 
+ #SOME_DBM
+
+
+ )
+
+194 #ifdeà
+HAS_ODBM
+
+
+195 #undeà
+HAS_ODBM
+
+
+198 #ifdeà
+HAS_ODBM
+
+
+199 #ifdeà
+NULL
+
+
+200 #undeà
+NULL
+
+
+202 
+ ~<dbm.h
+>
+
+203 #ifdeà
+NULL
+
+
+204 #undeà
+NULL
+
+
+206 
+ #NULL
+ 0
+
+ )
+
+207 
+ #SOME_DBM
+
+
+ )
+
+208 
+ #dbm_ãtch
+(
+db
+,
+dkey
+ `ãtch
+(dkey)
+
+ )
+
+209 
+ #dbm_d–‘e
+(
+db
+,
+dkey
+ `d–‘e
+(dkey)
+
+ )
+
+210 
+ #dbm_¡Üe
+(
+db
+,
+dkey
+,
+dcÚ‹Á
+,
+æags
+ `¡Üe
+(dkey,dcÚ‹Á)
+
+ )
+
+211 
+ #dbm_þo£
+(
+db
+ `dbmþo£
+()
+
+ )
+
+212 
+ #dbm_fœ¡key
+(
+db
+ `fœ¡key
+()
+
+ )
+
+216 #ifdeà
+SOME_DBM
+
+
+217
+EXT
+ *
+ gdbmkey
+;
+
+218
+EXT
+ 
+ gdbmËn
+;
+
+221 #ià
+INTSIZE
+ == 2
+
+222 
+ #htÚi
+
+htÚs
+
+
+ )
+
+223 
+ #Áohi
+
+Áohs
+
+
+ )
+
+225 
+ #htÚi
+
+htÚl
+
+
+ )
+
+226 
+ #Áohi
+
+Áohl
+
+
+ )
+
+229 #ià
+defšed
+(
+I_DIRENT
+)
+
+230 
+ ~<dœ’t.h
+>
+
+231 
+ #DIRENT
+
+dœ’t
+
+
+ )
+
+233 #ifdeà
+I_SYS_NDIR
+
+
+234 
+ ~<sys/ndœ.h
+>
+
+235 
+ #DIRENT
+
+dœeù
+
+
+ )
+
+237 #ifdeà
+I_SYS_DIR
+
+
+238 #ifdeà
+hp9000s500
+
+
+239 
+ ~<ndœ.h
+>
+
+241 
+ ~<sys/dœ.h
+>
+
+243 
+ #DIRENT
+
+dœeù
+
+
+ )
+
+254 #iâdeà
+S_IFMT
+
+
+255 #ifdeà
+_S_IFMT
+
+
+256 
+ #S_IFMT
+
+_S_IFMT
+
+
+ )
+
+258 
+ #S_IFMT
+ 0170000
+
+ )
+
+262 #iâdeà
+S_ISDIR
+
+
+263 
+ #S_ISDIR
+(
+m
+è((m &
+S_IFMT
+è=ð
+S_IFDIR
+)
+
+ )
+
+266 #iâdeà
+S_ISCHR
+
+
+267 
+ #S_ISCHR
+(
+m
+è((m &
+S_IFMT
+è=ð
+S_IFCHR
+)
+
+ )
+
+270 #iâdeà
+S_ISBLK
+
+
+271 #ifdeà
+S_IFBLK
+
+
+272 
+ #S_ISBLK
+(
+m
+è((m &
+S_IFMT
+è=ð
+S_IFBLK
+)
+
+ )
+
+274 
+ #S_ISBLK
+(
+m
+è(0)
+
+ )
+
+278 #iâdeà
+S_ISREG
+
+
+279 
+ #S_ISREG
+(
+m
+è((m &
+S_IFMT
+è=ð
+S_IFREG
+)
+
+ )
+
+282 #iâdeà
+S_ISFIFO
+
+
+283 #ifdeà
+S_IFIFO
+
+
+284 
+ #S_ISFIFO
+(
+m
+è((m &
+S_IFMT
+è=ð
+S_IFIFO
+)
+
+ )
+
+286 
+ #S_ISFIFO
+(
+m
+è(0)
+
+ )
+
+290 #iâdeà
+S_ISLNK
+
+
+291 #ifdeà
+_S_ISLNK
+
+
+292 
+ #S_ISLNK
+(
+m
+ `_S_ISLNK
+(m)
+
+ )
+
+294 #ifdeà
+_S_IFLNK
+
+
+295 
+ #S_ISLNK
+(
+m
+è((m &
+S_IFMT
+è=ð
+_S_IFLNK
+)
+
+ )
+
+297 #ifdeà
+S_IFLNK
+
+
+298 
+ #S_ISLNK
+(
+m
+è((m &
+S_IFMT
+è=ð
+S_IFLNK
+)
+
+ )
+
+300 
+ #S_ISLNK
+(
+m
+è(0)
+
+ )
+
+306 #iâdeà
+S_ISSOCK
+
+
+307 #ifdeà
+_S_ISSOCK
+
+
+308 
+ #S_ISSOCK
+(
+m
+ `_S_ISSOCK
+(m)
+
+ )
+
+310 #ifdeà
+_S_IFSOCK
+
+
+311 
+ #S_ISSOCK
+(
+m
+è((m &
+S_IFMT
+è=ð
+_S_IFSOCK
+)
+
+ )
+
+313 #ifdeà
+S_IFSOCK
+
+
+314 
+ #S_ISSOCK
+(
+m
+è((m &
+S_IFMT
+è=ð
+S_IFSOCK
+)
+
+ )
+
+316 
+ #S_ISSOCK
+(
+m
+è(0)
+
+ )
+
+322 #iâdeà
+S_IRUSR
+
+
+323 #ifdeà
+S_IREAD
+
+
+324 
+ #S_IRUSR
+
+S_IREAD
+
+
+ )
+
+325 
+ #S_IWUSR
+
+S_IWRITE
+
+
+ )
+
+326 
+ #S_IXUSR
+
+S_IEXEC
+
+
+ )
+
+328 
+ #S_IRUSR
+ 0400
+
+ )
+
+329 
+ #S_IWUSR
+ 0200
+
+ )
+
+330 
+ #S_IXUSR
+ 0100
+
+ )
+
+332 
+ #S_IRGRP
+ (
+S_IRUSR
+>>3)
+
+ )
+
+333 
+ #S_IWGRP
+ (
+S_IWUSR
+>>3)
+
+ )
+
+334 
+ #S_IXGRP
+ (
+S_IXUSR
+>>3)
+
+ )
+
+335 
+ #S_IROTH
+ (
+S_IRUSR
+>>6)
+
+ )
+
+336 
+ #S_IWOTH
+ (
+S_IWUSR
+>>6)
+
+ )
+
+337 
+ #S_IXOTH
+ (
+S_IXUSR
+>>6)
+
+ )
+
+340 #iâdeà
+S_ISUID
+
+
+341 
+ #S_ISUID
+ 04000
+
+ )
+
+344 #iâdeà
+S_ISGID
+
+
+345 
+ #S_ISGID
+ 02000
+
+ )
+
+348 
+ tSTRLEN
+;
+
+350 
+¬g
+
+ tARG
+;
+
+351 
+cmd
+
+ tCMD
+;
+
+352 
+fÜmcmd
+
+ tFCMD
+;
+
+353 
+sÿÅ©
+
+ tSPAT
+;
+
+354 
+¡io
+
+ tSTIO
+;
+
+355 
+sub
+
+ tSUBR
+;
+
+356 
+¡ršg
+
+ tSTR
+;
+
+357 
+©bl
+
+ tARRAY
+;
+
+358 
+htbl
+
+ tHASH
+;
+
+359 
+»gexp
+
+ tREGEXP
+;
+
+360 
+¡ab±rs
+
+ tSTBP
+;
+
+361 
+¡ab
+
+ tSTAB
+;
+
+362 
+ÿΧve
+
+ tCSV
+;
+
+364 
+ ~"hªdy.h
+"
+
+365 
+ ~"»gexp.h
+"
+
+366 
+ ~"¡r.h
+"
+
+367 
+ ~"utž.h
+"
+
+368 
+ ~"fÜm.h
+"
+
+369 
+ ~"¡ab.h
+"
+
+370 
+ ~"¥©.h
+"
+
+371 
+ ~"¬g.h
+"
+
+372 
+ ~"cmd.h
+"
+
+373 
+ ~"¬¿y.h
+"
+
+374 
+ ~"hash.h
+"
+
+376 #ià
+defšed
+(
+iAPX286
+è|| defšed(
+M_I286
+è|| defšed(
+I80286
+)
+
+377 
+ #I286
+
+
+ )
+
+380 #iâdef
+__STDC__
+
+
+381 #ifdeà
+CHARSPRINTF
+
+
+382 *
+¥rštf
+();
+
+384 
+¥rštf
+();
+
+388
+EXT
+ *
+Yes
+
+INIT
+("1");
+
+389
+EXT
+ *
+No
+
+INIT
+("");
+
+394 
+ #G_SCALAR
+ 0
+
+ )
+
+395 
+ #G_ARRAY
+ 1
+
+ )
+
+397 #ifdeà
+CRIPPLED_CC
+
+
+398 
+¡r_Œue
+();
+
+400 
+ #¡r_Œue
+(
+¡r
+è(
+SŒ
+ = (str), \
+
+401 (
+SŒ
+->
+¡r_pok
+ ? \
+
+402 ((*
+SŒ
+->
+¡r_±r
+ > '0' || \
+
+403
+SŒ
+->
+¡r_cur
+ > 1 || \
+
+404 (
+SŒ
+->
+¡r_cur
+ && *SŒ->
+¡r_±r
+ != '0')) ? 1 : 0) \
+
+406 (
+SŒ
+->
+¡r_nok
+ ? (SŒ->
+¡r_u
+.
+¡r_nv®
+ !ð0.0è: 0 ) ))
+
+ )
+
+409 #ifdeà
+DEBUGGING
+
+
+410 
+ #¡r_³ek
+(
+¡r
+è(
+SŒ
+ = (str), \
+
+411 (
+SŒ
+->
+¡r_pok
+ ? \
+
+412
+SŒ
+->
+¡r_±r
+ : \
+
+413 (
+SŒ
+->
+¡r_nok
+ ? \
+
+414 (
+ `¥rštf
+(
+tok’buf
+,"num(%g)",
+SŒ
+->
+¡r_u
+.
+¡r_nv®
+), \
+
+415 (*)
+tok’buf
+) : \
+
+416 "" )))
+
+ )
+
+419 #ifdeà
+CRIPPLED_CC
+
+
+420 *
+¡r_g‘
+();
+
+422 #ifdeà
+TAINT
+
+
+423 
+ #¡r_g‘
+(
+¡r
+è(
+SŒ
+ = (¡r),
+š‹d
+ |ðSŒ->
+¡r_š‹d
+, \
+
+424 (
+SŒ
+->
+¡r_pok
+ ? SŒ->
+¡r_±r
+ :
+ `¡r_2±r
+(SŒ)))
+
+ )
+
+426 
+ #¡r_g‘
+(
+¡r
+è(
+SŒ
+ = (¡r), (SŒ->
+¡r_pok
+ ? SŒ->
+¡r_±r
+ :
+ `¡r_2±r
+(SŒ)))
+
+ )
+
+430 #ifdeà
+CRIPPLED_CC
+
+
+431 
+¡r_gnum
+();
+
+433 #ifdeà
+TAINT
+
+
+434 
+ #¡r_gnum
+(
+¡r
+è(
+SŒ
+ = (¡r),
+š‹d
+ |ðSŒ->
+¡r_š‹d
+, \
+
+435 (
+SŒ
+->
+¡r_nok
+ ? SŒ->
+¡r_u
+.
+¡r_nv®
+ :
+ `¡r_2num
+(SŒ)))
+
+ )
+
+437 
+ #¡r_gnum
+(
+¡r
+è(
+SŒ
+ = (¡r), (SŒ->
+¡r_nok
+ ? SŒ->
+¡r_u
+.
+¡r_nv®
+ :
+ `¡r_2num
+(SŒ)))
+
+ )
+
+440
+EXT
+
+STR
+ *
+ gSŒ
+;
+
+442 
+ #GROWSTR
+(
+,
+,
+Ën
+èià(*Öpè< (Ën)è
+ `grow¡r
+Õp,Í,Ën)
+
+ )
+
+444 #iâdeà
+MSDOS
+
+
+445 
+ #STR_GROW
+(
+¡r
+,
+Ën
+èià((¡r)->
+¡r_Ën
+ < (Ën)è
+ `¡r_grow
+(¡r,Ën)
+
+ )
+
+446 
+ #SŒ_Grow
+
+¡r_grow
+
+
+ )
+
+449 
+ #STR_GROW
+(
+¡r
+,
+Ën
+èià((¡r)->
+¡r_Ën
+ < ()len) \
+
+450
+ `¡r_grow
+(
+¡r
+,()
+Ën
+)
+
+ )
+
+451 
+ #SŒ_Grow
+(
+¡r
+,
+Ën
+ `¡r_grow
+(¡r,()Ö’))
+
+ )
+
+454 #iâdeà
+BYTEORDER
+
+
+455 
+ #BYTEORDER
+ 0x1234
+
+ )
+
+458 #ià
+defšed
+(
+htÚl
+è&& !defšed(
+HAS_HTONL
+)
+
+459 
+ #HAS_HTONL
+
+
+ )
+
+461 #ià
+defšed
+(
+htÚs
+è&& !defšed(
+HAS_HTONS
+)
+
+462 
+ #HAS_HTONS
+
+
+ )
+
+464 #ià
+defšed
+(
+Áohl
+è&& !defšed(
+HAS_NTOHL
+)
+
+465 
+ #HAS_NTOHL
+
+
+ )
+
+467 #ià
+defšed
+(
+Áohs
+è&& !defšed(
+HAS_NTOHS
+)
+
+468 
+ #HAS_NTOHS
+
+
+ )
+
+470 #iâdeà
+HAS_HTONL
+
+
+471 #ià(
+BYTEORDER
+ & 0xffff) != 0x4321
+
+472 
+ #HAS_HTONS
+
+
+ )
+
+473 
+ #HAS_HTONL
+
+
+ )
+
+474 
+ #HAS_NTOHS
+
+
+ )
+
+475 
+ #HAS_NTOHL
+
+
+ )
+
+476 
+ #MYSWAP
+
+
+ )
+
+477 
+ #htÚs
+
+my_sw­
+
+
+ )
+
+478 
+ #htÚl
+
+my_htÚl
+
+
+ )
+
+479 
+ #Áohs
+
+my_sw­
+
+
+ )
+
+480 
+ #Áohl
+
+my_Áohl
+
+
+ )
+
+483 #ià(
+BYTEORDER
+ & 0xffff) == 0x4321
+
+484 #undeà
+HAS_HTONS
+
+
+485 #undeà
+HAS_HTONL
+
+
+486 #undeà
+HAS_NTOHS
+
+
+487 #undeà
+HAS_NTOHL
+
+
+491 #ifdeà
+CASTNEGFLOAT
+
+
+492 
+ #U_S
+(
+wh©
+è(()(wh©))
+
+ )
+
+493 
+ #U_I
+(
+wh©
+è(()(wh©))
+
+ )
+
+494 
+ #U_L
+(
+wh©
+è(()(wh©))
+
+ )
+
+496 
+ÿ¡ulÚg
+();
+
+497 
+ #U_S
+(
+wh©
+è(()
+ `ÿ¡ulÚg
+(wh©))
+
+ )
+
+498 
+ #U_I
+(
+wh©
+è(()
+ `ÿ¡ulÚg
+(wh©))
+
+ )
+
+499 
+ #U_L
+(
+wh©
+è(
+ `ÿ¡ulÚg
+(wh©))
+
+ )
+
+502
+CMD
+ *
+add_Ïb–
+();
+
+503
+CMD
+ *
+block_h—d
+();
+
+504
+CMD
+ *
+­³nd_lše
+();
+
+505
+CMD
+ *
+make_acmd
+();
+
+506
+CMD
+ *
+make_ccmd
+();
+
+507
+CMD
+ *
+make_icmd
+();
+
+508
+CMD
+ *
+šv”t
+();
+
+509
+CMD
+ *
+addcÚd
+();
+
+510
+CMD
+ *
+addloÝ
+();
+
+511
+CMD
+ *
+wÝt
+();
+
+512
+CMD
+ *
+ov”
+();
+
+514
+STAB
+ *
+¡ab’t
+();
+
+515
+STAB
+ *
+g’¡ab
+();
+
+517
+ARG
+ *
+¡ab2¬g
+();
+
+518
+ARG
+ *
+Ý_Ãw
+();
+
+519
+ARG
+ *
+make_Ý
+();
+
+520
+ARG
+ *
+make_m©ch
+();
+
+521
+ARG
+ *
+make_¥l™
+();
+
+522
+ARG
+ *
+rÿtmaybe
+();
+
+523
+ARG
+ *
+li¡ish
+();
+
+524
+ARG
+ *
+mayb–i¡ish
+();
+
+525
+ARG
+ *
+loÿlize
+();
+
+526
+ARG
+ *
+fixev®
+();
+
+527
+ARG
+ *
+jmaybe
+();
+
+528
+ARG
+ *
+l
+();
+
+529
+ARG
+ *
+fixl
+();
+
+530
+ARG
+ *
+mod_m©ch
+();
+
+531
+ARG
+ *
+make_li¡
+();
+
+532
+ARG
+ *
+cmd_to_¬g
+();
+
+533
+ARG
+ *
+addæags
+();
+
+534
+ARG
+ *
+hide_¬y
+();
+
+535
+ARG
+ *
+cv®_to_¬g
+();
+
+537
+STR
+ *
+¡r_Ãw
+();
+
+538
+STR
+ *
+¡ab_¡r
+();
+
+540 
+do_—ch
+();
+
+541 
+do_subr
+();
+
+542 
+do_m©ch
+();
+
+543 
+do_uÅack
+();
+
+544 
+ev®
+();
+
+545 
+do_ev®
+();
+
+546 
+do_assign
+();
+
+548
+SUBR
+ *
+make_sub
+();
+
+550
+FCMD
+ *
+lßd_fÜm©
+();
+
+552 *
+sÿÅ©
+();
+
+553 *
+sÿnsub¡
+();
+
+554 *
+sÿÁ¿ns
+();
+
+555 *
+sÿn¡r
+();
+
+556 *
+sÿnid’t
+();
+
+557 *
+¡r_­³nd_tžl
+();
+
+558 *
+¡r_g‘s
+();
+
+559 *
+¡r_grow
+();
+
+561
+boÞ
+
+do_Ý’
+();
+
+562
+boÞ
+
+do_þo£
+();
+
+563
+boÞ
+
+do_´št
+();
+
+564
+boÞ
+
+do_­ršt
+();
+
+565
+boÞ
+
+do_exec
+();
+
+566
+boÞ
+
+do_«xec
+();
+
+568 
+do_sub¡
+();
+
+569 
+ÿndo
+();
+
+570 
+šgroup
+();
+
+572 
+¡r_»¶aû
+();
+
+573 
+¡r_šc
+();
+
+574 
+¡r_dec
+();
+
+575 
+¡r_ä“
+();
+
+576 
+¡ab_þ—r
+();
+
+577 
+do_još
+();
+
+578 
+do_¥rštf
+();
+
+579 
+do_acû±
+();
+
+580 
+do_pe
+();
+
+581 
+do_vec£t
+();
+
+582 
+do_unshiá
+();
+
+583 
+do_execä“
+();
+
+584 
+magiÿlize
+();
+
+585 
+magiúame
+();
+
+586 
+§v–i¡
+();
+
+587 
+§ve™em
+();
+
+588 
+§vešt
+();
+
+589 
+§v–Úg
+();
+
+590 
+§ve¥Œ
+();
+
+591 
+§veh±r
+();
+
+592 
+»¡Ü–i¡
+();
+
+593 
+»³©ýy
+();
+
+594
+HASH
+ *
+§vehash
+();
+
+595
+ARRAY
+ *
+§v—ry
+();
+
+597
+EXT
+ **
+ gÜig¬gv
+;
+
+598
+EXT
+ 
+ gÜig¬gc
+;
+
+599
+EXT
+ **
+ gÜig’vœÚ
+;
+
+600
+**
+’vœÚ
+;
+
+602
+EXT
+
+lše_t
+
+sublše
+
+INIT
+(0);
+
+603
+EXT
+
+STR
+ *
+subÇme
+
+INIT
+(
+NuΡr
+);
+
+604
+EXT
+ 
+¬yba£
+
+INIT
+(0);
+
+606 
+ souŒec
+ {
+
+607 
+ mo_lšes
+;
+
+608 *
+ mo_¡r
+;
+
+609 
+ mo_Ën
+;
+
+612
+EXT
+ 
+ouŒec
+
+ gouŒec
+;
+
+613
+EXT
+ 
+ouŒec
+
+ gtݻc
+;
+
+615
+EXT
+
+STAB
+ *
+¡dš¡ab
+
+INIT
+(
+NuΡab
+);
+
+616
+EXT
+
+STAB
+ *
+Ï¡_š_¡ab
+
+INIT
+(
+NuΡab
+);
+
+617
+EXT
+
+STAB
+ *
+def¡ab
+
+INIT
+(
+NuΡab
+);
+
+618
+EXT
+
+STAB
+ *
+¬gv¡ab
+
+INIT
+(
+NuΡab
+);
+
+619
+EXT
+
+STAB
+ *
+’v¡ab
+
+INIT
+(
+NuΡab
+);
+
+620
+EXT
+
+STAB
+ *
+sig¡ab
+
+INIT
+(
+NuΡab
+);
+
+621
+EXT
+
+STAB
+ *
+defout¡ab
+
+INIT
+(
+NuΡab
+);
+
+622
+EXT
+
+STAB
+ *
+curout¡ab
+
+INIT
+(
+NuΡab
+);
+
+623
+EXT
+
+STAB
+ *
+¬gvout¡ab
+
+INIT
+(
+NuΡab
+);
+
+624
+EXT
+
+STAB
+ *
+šc¡ab
+
+INIT
+(
+NuΡab
+);
+
+625
+EXT
+
+STAB
+ *
+Ëá¡ab
+
+INIT
+(
+NuΡab
+);
+
+626
+EXT
+
+STAB
+ *
+am³r¡ab
+
+INIT
+(
+NuΡab
+);
+
+627
+EXT
+
+STAB
+ *
+right¡ab
+
+INIT
+(
+NuΡab
+);
+
+628
+EXT
+
+STAB
+ *
+DB¡ab
+
+INIT
+(
+NuΡab
+);
+
+629
+EXT
+
+STAB
+ *
+DBlše
+
+INIT
+(
+NuΡab
+);
+
+630
+EXT
+
+STAB
+ *
+DBsub
+
+INIT
+(
+NuΡab
+);
+
+632
+EXT
+
+HASH
+ *
+ gdef¡ash
+;
+
+633
+EXT
+
+HASH
+ *
+ gcur¡ash
+;
+
+634
+EXT
+
+HASH
+ *
+ gdeb¡ash
+;
+
+636
+EXT
+
+STR
+ *
+ gcur¡Çme
+;
+
+638
+EXT
+
+STR
+ *
+ä“¡¼oÙ
+
+INIT
+(
+NuΡr
+);
+
+639
+EXT
+
+STR
+ *
+Ï¡»t¡r
+
+INIT
+(
+NuΡr
+);
+
+640
+EXT
+
+STR
+ *
+DBsšgË
+
+INIT
+(
+NuΡr
+);
+
+641
+EXT
+
+STR
+ *
+DBŒaû
+
+INIT
+(
+NuΡr
+);
+
+642
+EXT
+
+STR
+ *
+DBsigÇl
+
+INIT
+(
+NuΡr
+);
+
+644
+EXT
+ 
+ gÏ¡¥ba£
+;
+
+645
+EXT
+ 
+ gϡsize
+;
+
+647
+EXT
+ *
+hexdig™
+
+INIT
+("0123456789abcdef0123456789ABCDEF");
+
+648
+EXT
+ *
+ gÜigfž’ame
+;
+
+649
+EXT
+
+FILE
+ *
+VOLATILE
+
+ grså
+;
+
+650
+EXT
+ 
+ gbuf
+[1024];
+
+651
+EXT
+ *
+ gbuåŒ
+;
+
+652
+EXT
+ *
+ gÞdbuåŒ
+;
+
+653
+EXT
+ *
+ gÞdÞdbuåŒ
+;
+
+654
+EXT
+ *
+ gbuãnd
+;
+
+656
+EXT
+
+STR
+ *
+lše¡r
+
+INIT
+(
+NuΡr
+);
+
+658
+EXT
+ *
+rs
+
+INIT
+("\n");
+
+659
+EXT
+ 
+rsch¬
+
+INIT
+('\n');
+
+660
+EXT
+ 
+r¦’
+
+INIT
+(1);
+
+661
+EXT
+ *
+ofs
+
+INIT
+(
+NuÎch
+);
+
+662
+EXT
+ 
+of¦’
+
+INIT
+(0);
+
+663
+EXT
+ *
+Üs
+
+INIT
+(
+NuÎch
+);
+
+664
+EXT
+ 
+ܦ’
+
+INIT
+(0);
+
+665
+EXT
+ *
+ofmt
+
+INIT
+(
+NuÎch
+);
+
+666
+EXT
+ *
+š¶aû
+
+INIT
+(
+NuÎch
+);
+
+667
+EXT
+ *
+nošŒp
+
+INIT
+("");
+
+669
+EXT
+
+boÞ
+
+´•roûss
+
+INIT
+(
+FALSE
+);
+
+670
+EXT
+
+boÞ
+
+mšus_n
+
+INIT
+(
+FALSE
+);
+
+671
+EXT
+
+boÞ
+
+mšus_p
+
+INIT
+(
+FALSE
+);
+
+672
+EXT
+
+boÞ
+
+mšus_l
+
+INIT
+(
+FALSE
+);
+
+673
+EXT
+
+boÞ
+
+mšus_a
+
+INIT
+(
+FALSE
+);
+
+674
+EXT
+
+boÞ
+
+dosw™ches
+
+INIT
+(
+FALSE
+);
+
+675
+EXT
+
+boÞ
+
+dow¬n
+
+INIT
+(
+FALSE
+);
+
+676
+EXT
+
+boÞ
+
+dÛxŒaù
+
+INIT
+(
+FALSE
+);
+
+677
+EXT
+
+boÞ
+
+®l¡abs
+
+INIT
+(
+FALSE
+);
+
+678
+EXT
+
+boÞ
+
+§wam³r§nd
+
+INIT
+(
+FALSE
+);
+
+679
+EXT
+
+boÞ
+
+§w¡udy
+
+INIT
+(
+FALSE
+);
+
+680
+EXT
+
+boÞ
+
+§wi
+
+INIT
+(
+FALSE
+);
+
+681
+EXT
+
+boÞ
+
+§wvec
+
+INIT
+(
+FALSE
+);
+
+682
+EXT
+
+boÞ
+
+loÿlizšg
+
+INIT
+(
+FALSE
+);
+
+684 #ifdeà
+CSH
+
+
+685 *
+cshÇme
+
+INIT
+(
+CSH
+);
+
+686 
+cshËn
+
+INIT
+(0);
+
+689 #ifdeà
+TAINT
+
+
+690
+EXT
+
+boÞ
+
+š‹d
+
+INIT
+(
+FALSE
+);
+
+693 #iâdeà
+MSDOS
+
+
+694 
+ #TMPPATH
+ "/tmp/³¾-eXXXXXX"
+
+ )
+
+696 
+ #TMPPATH
+ "¶XXXXXX"
+
+ )
+
+698
+EXT
+ *
+ ge_tm²ame
+;
+
+699
+EXT
+
+FILE
+ *
+e_å
+
+INIT
+(
+NuÎå
+);
+
+701
+EXT
+ 
+ gtok’buf
+[256];
+
+702
+EXT
+ 
+ex³ù‹rm
+
+INIT
+(
+TRUE
+);
+
+703
+EXT
+
+VOLATILE
+ 
+š_ev®
+
+INIT
+(
+FALSE
+);
+
+704
+EXT
+ 
+muÉžše
+
+INIT
+(0);
+
+705
+EXT
+ 
+ gfÜk´oûss
+;
+
+706
+EXT
+ 
+do_undump
+
+INIT
+(0);
+
+707
+EXT
+ 
+”rÜ_couÁ
+
+INIT
+(0);
+
+708
+EXT
+ 
+muÉi_¡¬t
+
+INIT
+(0);
+
+709
+EXT
+ 
+muÉi_’d
+
+INIT
+(0);
+
+710
+EXT
+ 
+muÉi_Ý’
+
+INIT
+(0);
+
+711
+EXT
+ 
+muÉi_þo£
+
+INIT
+(0);
+
+713
+FILE
+ *
+pÝ’
+();
+
+715
+STR
+ *
+š‹½
+();
+
+716 
+ä“_¬g
+();
+
+717
+STIO
+ *
+¡io_Ãw
+();
+
+719
+EXT
+ 
+¡©
+
+ g¡©buf
+;
+
+720
+EXT
+ 
+¡©
+
+ g¡©ÿche
+;
+
+721
+STAB
+ *
+¡©¡ab
+
+INIT
+(
+NuΡab
+);
+
+722
+STR
+ *
+ g¡©Çme
+;
+
+723 #iâdeà
+MSDOS
+
+
+724
+EXT
+ 
+tms
+
+ gtimesbuf
+;
+
+726
+EXT
+ 
+ guid
+;
+
+727
+EXT
+ 
+ geuid
+;
+
+728
+EXT
+ 
+ ggid
+;
+
+729
+EXT
+ 
+ gegid
+;
+
+730
+UIDTYPE
+
+g‘uid
+();
+
+731
+UIDTYPE
+
+g‘euid
+();
+
+732
+GIDTYPE
+
+g‘gid
+();
+
+733
+GIDTYPE
+
+g‘egid
+();
+
+734
+EXT
+ 
+ gun§ã
+;
+
+736 #ifdeà
+DEBUGGING
+
+
+737
+EXT
+
+VOLATILE
+ 
+debug
+
+INIT
+(0);
+
+738
+EXT
+ 
+dËv–
+
+INIT
+(0);
+
+739
+EXT
+ 
+dlmax
+
+INIT
+(128);
+
+740
+EXT
+ *
+ gdebÇme
+;
+
+741
+EXT
+ *
+ gdebd–im
+;
+
+742 
+ #YYDEBUG
+ 1
+
+ )
+
+744
+EXT
+ 
+³¾db
+
+INIT
+(0);
+
+745 
+ #YYMAXDEPTH
+ 300
+
+ )
+
+747
+EXT
+
+lše_t
+
+cmdlše
+
+INIT
+(
+NOLINE
+);
+
+749
+EXT
+
+STR
+
+ g¡r_undef
+;
+
+750
+EXT
+
+STR
+
+ g¡r_no
+;
+
+751
+EXT
+
+STR
+
+ g¡r_yes
+;
+
+755
+EXT
+ 
+ sloÝ
+ {
+
+756 *
+ mloÝ_Ïb–
+;
+
+757 
+ mloÝ_¥
+;
+
+758
+jmp_buf
+
+ mloÝ_’v
+;
+
+759 } *
+ gloÝ_¡ack
+;
+
+761
+EXT
+ 
+loÝ_±r
+
+INIT
+(-1);
+
+762
+EXT
+ 
+loÝ_max
+
+INIT
+(128);
+
+764
+EXT
+
+jmp_buf
+
+ gtÝ_’v
+;
+
+766
+EXT
+ *
+VOLATILE
+
+gÙo_rg
+
+INIT
+(
+NuÎch
+);
+
+768 
+ sufuncs
+ {
+
+769 (*
+ muf_v®
+)();
+
+770 (*
+ muf_£t
+)();
+
+771 
+ muf_šdex
+;
+
+774
+EXT
+
+ARRAY
+ *
+ g¡ack
+;
+
+776
+EXT
+
+ARRAY
+ *
+VOLATILE
+
+ g§ve¡ack
+;
+
+778
+EXT
+
+ARRAY
+ *
+ gto§ve
+;
+
+780
+EXT
+
+ARRAY
+ *
+ glš—ry
+;
+
+781
+EXT
+
+ARRAY
+ *
+ gdb¬gs
+;
+
+783
+EXT
+
+ARRAY
+ *
+ gfdpid
+;
+
+784
+EXT
+
+HASH
+ *
+ gpid¡©us
+;
+
+786
+EXT
+ *
+ gdi
+;
+
+787
+EXT
+ *
+ gdc
+;
+
+788
+EXT
+ *
+ gds
+;
+
+791
+EXT
+ 
+ba£time
+
+INIT
+(0);
+
+792 *
+mk‹mp
+();
+
+793 #iâdeà
+__STDC__
+
+
+795 
+©of
+();
+
+796 
+time
+();
+
+797 
+tm
+ *
+gmtime
+(), *
+loÿÉime
+();
+
+798 *
+šdex
+(), *
+ršdex
+();
+
+799 *
+¡rýy
+(), *
+¡rÿt
+();
+
+802 #ifdeà
+EUNICE
+
+
+803 
+ #UNLINK
+
+uÆnk
+
+
+ )
+
+804 
+uÆnk
+();
+
+806 
+ #UNLINK
+
+uÆšk
+
+
+ )
+
+809 #iâdeà
+HAS_SETREUID
+
+
+810 #ifdeà
+HAS_SETRESUID
+
+
+811 
+ #£Œeuid
+(
+r
+,
+e
+ `£Œesuid
+Ô,e,-1)
+
+ )
+
+812 
+ #HAS_SETREUID
+
+
+ )
+
+815 #iâdeà
+HAS_SETREGID
+
+
+816 #ifdeà
+HAS_SETRESGID
+
+
+817 
+ #£Œegid
+(
+r
+,
+e
+ `£Œesgid
+Ô,e,-1)
+
+ )
+
+818 
+ #HAS_SETREGID
+
+
+ )
+
+822 #iâdeà
+åuts
+
+
+823 
+ #åuts
+(
+¡r
+,
+ `årštf
+(å,"%s",¡r)
+
+ )
+
+ @perly.c
+
+1 #iâdeà
+lšt
+
+
+3
+ gyyrcsid
+[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $";
+
+5 
+ ~<¡dlib.h
+>
+
+6 
+ #YYBYACC
+ 1
+
+ )
+
+7 
+ #YYMAJOR
+ 1
+
+ )
+
+8 
+ #YYMINOR
+ 9
+
+ )
+
+9 
+ #YYLEX
+
+ `yyËx
+()
+
+ )
+
+10 
+ #YYEMPTY
+ -1
+
+ )
+
+11 
+ #yyþ—rš
+ (
+yych¬
+=(
+YYEMPTY
+))
+
+ )
+
+12 
+ #yy”rok
+ (
+yy”ræag
+=0)
+
+ )
+
+13 
+ #YYRECOVERING
+(è(
+yy”ræag
+!=0)
+
+ )
+
+14 
+yygrow¡ack
+();
+
+15 
+ #YYPREFIX
+ "yy"
+
+ )
+
+17 
+ ~"INTERN.h
+"
+
+18 
+ ~"³¾.h
+"
+
+20
+STAB
+ *
+ gsü¡ab
+;
+
+21
+ARG
+ *
+ g¬g4
+;
+
+22
+ARG
+ *
+ g¬g5
+;
+
+26 
+ miv®
+;
+
+27 *
+ mcv®
+;
+
+28
+ARG
+ *
+ m¬g
+;
+
+29
+CMD
+ *
+ mcmdv®
+;
+
+30 
+compcmd
+
+ mcompv®
+;
+
+31
+STAB
+ *
+ m¡abv®
+;
+
+32
+FCMD
+ *
+ mfÜmv®
+;
+
+33 }
+ tYYSTYPE
+;
+
+35 
+ #YYERRCODE
+ 256
+
+ )
+
+36 
+ #WORD
+ 257
+
+ )
+
+37 
+ #APPEND
+ 258
+
+ )
+
+38 
+ #OPEN
+ 259
+
+ )
+
+39 
+ #SSELECT
+ 260
+
+ )
+
+40 
+ #LOOPEX
+ 261
+
+ )
+
+41 
+ #USING
+ 262
+
+ )
+
+42 
+ #FORMAT
+ 263
+
+ )
+
+43 
+ #DO
+ 264
+
+ )
+
+44 
+ #SHIFT
+ 265
+
+ )
+
+45 
+ #PUSH
+ 266
+
+ )
+
+46 
+ #POP
+ 267
+
+ )
+
+47 
+ #LVALFUN
+ 268
+
+ )
+
+48 
+ #WHILE
+ 269
+
+ )
+
+49 
+ #UNTIL
+ 270
+
+ )
+
+50 
+ #IF
+ 271
+
+ )
+
+51 
+ #UNLESS
+ 272
+
+ )
+
+52 
+ #ELSE
+ 273
+
+ )
+
+53 
+ #ELSIF
+ 274
+
+ )
+
+54 
+ #CONTINUE
+ 275
+
+ )
+
+55 
+ #SPLIT
+ 276
+
+ )
+
+56 
+ #FLIST
+ 277
+
+ )
+
+57 
+ #FOR
+ 278
+
+ )
+
+58 
+ #FILOP
+ 279
+
+ )
+
+59 
+ #FILOP2
+ 280
+
+ )
+
+60 
+ #FILOP3
+ 281
+
+ )
+
+61 
+ #FILOP4
+ 282
+
+ )
+
+62 
+ #FILOP22
+ 283
+
+ )
+
+63 
+ #FILOP25
+ 284
+
+ )
+
+64 
+ #FUNC0
+ 285
+
+ )
+
+65 
+ #FUNC1
+ 286
+
+ )
+
+66 
+ #FUNC2
+ 287
+
+ )
+
+67 
+ #FUNC2x
+ 288
+
+ )
+
+68 
+ #FUNC3
+ 289
+
+ )
+
+69 
+ #FUNC4
+ 290
+
+ )
+
+70 
+ #FUNC5
+ 291
+
+ )
+
+71 
+ #HSHFUN
+ 292
+
+ )
+
+72 
+ #HSHFUN3
+ 293
+
+ )
+
+73 
+ #FLIST2
+ 294
+
+ )
+
+74 
+ #SUB
+ 295
+
+ )
+
+75 
+ #FILETEST
+ 296
+
+ )
+
+76 
+ #LOCAL
+ 297
+
+ )
+
+77 
+ #DELETE
+ 298
+
+ )
+
+78 
+ #RELOP
+ 299
+
+ )
+
+79 
+ #EQOP
+ 300
+
+ )
+
+80 
+ #MULOP
+ 301
+
+ )
+
+81 
+ #ADDOP
+ 302
+
+ )
+
+82 
+ #PACKAGE
+ 303
+
+ )
+
+83 
+ #AMPER
+ 304
+
+ )
+
+84 
+ #FORMLIST
+ 305
+
+ )
+
+85 
+ #REG
+ 306
+
+ )
+
+86 
+ #ARYLEN
+ 307
+
+ )
+
+87 
+ #ARY
+ 308
+
+ )
+
+88 
+ #HSH
+ 309
+
+ )
+
+89 
+ #STAR
+ 310
+
+ )
+
+90 
+ #SUBST
+ 311
+
+ )
+
+91 
+ #PATTERN
+ 312
+
+ )
+
+92 
+ #RSTRING
+ 313
+
+ )
+
+93 
+ #TRANS
+ 314
+
+ )
+
+94 
+ #LISTOP
+ 315
+
+ )
+
+95 
+ #DOTDOT
+ 316
+
+ )
+
+96 
+ #OROR
+ 317
+
+ )
+
+97 
+ #ANDAND
+ 318
+
+ )
+
+98 
+ #UNIOP
+ 319
+
+ )
+
+99 
+ #LS
+ 320
+
+ )
+
+100 
+ #RS
+ 321
+
+ )
+
+101 
+ #MATCH
+ 322
+
+ )
+
+102 
+ #NMATCH
+ 323
+
+ )
+
+103 
+ #UMINUS
+ 324
+
+ )
+
+104 
+ #POW
+ 325
+
+ )
+
+105 
+ #INC
+ 326
+
+ )
+
+106 
+ #DEC
+ 327
+
+ )
+
+107 cÚ¡ 
+ gyylhs
+[] = { -1,
+
+128 cÚ¡ 
+ gyyËn
+[] = { 2,
+
+149 cÚ¡ 
+ gyydeäed
+[] = { 1,
+
+192 cÚ¡ 
+ gyydgÙo
+[] = { 1,
+
+197 cÚ¡ 
+ gyysšdex
+[] = { 0,
+
+240 cÚ¡ 
+ gyyršdex
+[] = { 0,
+
+283 cÚ¡ 
+ gyygšdex
+[] = { 0,
+
+288 
+ #YYTABLESIZE
+ 6272
+
+ )
+
+289 cÚ¡ 
+ gyybË
+[] = { 88,
+
+919 cÚ¡ 
+ gyycheck
+[] = { 18,
+
+1549 
+ #YYFINAL
+ 1
+
+ )
+
+1550 #iâdeà
+YYDEBUG
+
+
+1551 
+ #YYDEBUG
+ 0
+
+ )
+
+1553 
+ #YYMAXTOKEN
+ 327
+
+ )
+
+1554 #ià
+YYDEBUG
+
+
+1555 cÚ¡ * cÚ¡
+ gyyÇme
+[] = {
+
+1572 cÚ¡ * cÚ¡
+ gyyruË
+[] = {
+
+1757 #ià
+YYDEBUG
+
+
+1758 
+ ~<¡dio.h
+>
+
+1760 #ifdeà
+YYSTACKSIZE
+
+
+1761 #undeà
+YYMAXDEPTH
+
+
+1762 
+ #YYMAXDEPTH
+
+YYSTACKSIZE
+
+
+ )
+
+1764 #ifdeà
+YYMAXDEPTH
+
+
+1765 
+ #YYSTACKSIZE
+
+YYMAXDEPTH
+
+
+ )
+
+1767 
+ #YYSTACKSIZE
+ 10000
+
+ )
+
+1768 
+ #YYMAXDEPTH
+ 10000
+
+ )
+
+1771 
+ #YYINITSTACKSIZE
+ 200
+
+ )
+
+1772 
+ gyydebug
+;
+
+1773 
+ gyyüs
+;
+
+1774 
+ gyy”ræag
+;
+
+1775 
+ gyych¬
+;
+
+1776 *
+ gyys¥
+;
+
+1777
+YYSTYPE
+ *
+ gyyv¥
+;
+
+1778
+YYSTYPE
+
+ gyyv®
+;
+
+1779
+YYSTYPE
+
+ gyylv®
+;
+
+1780 *
+ gyyss
+;
+
+1781 *
+ gyys¦im
+;
+
+1782
+YYSTYPE
+ *
+ gyyvs
+;
+
+1783 
+ gyy¡acksize
+;
+
+1788 
+ $yygrow¡ack
+()
+
+1790 
+Ãwsize
+,
+i
+;
+
+1791 *
+Ãwss
+;
+
+1792
+YYSTYPE
+ *
+Ãwvs
+;
+
+1794 ià((
+Ãwsize
+ =
+yy¡acksize
+) == 0)
+
+1795
+Ãwsize
+ =
+YYINITSTACKSIZE
+;
+
+1796 ià(
+Ãwsize
+ >ð
+YYMAXDEPTH
+)
+
+1798 ià((
+Ãwsize
+ *ð2è>
+YYMAXDEPTH
+)
+
+1799
+Ãwsize
+ =
+YYMAXDEPTH
+;
+
+1800
+i
+ =
+yys¥
+ -
+yyss
+;
+
+1801
+Ãwss
+ =
+yyss
+ ? (*)
+ `»®loc
+(yyss,
+Ãwsize
+ *  *newss) :
+
+1802 (*)
+ `m®loc
+(
+Ãwsize
+ *  *
+Ãwss
+);
+
+1803 ià(
+Ãwss
+ =ð
+NULL
+)
+
+1805
+yyss
+ =
+Ãwss
+;
+
+1806
+yys¥
+ =
+Ãwss
+ +
+i
+;
+
+1807
+Ãwvs
+ =
+yyvs
+ ? (
+YYSTYPE
+ *)
+ `»®loc
+(yyvs,
+Ãwsize
+ *  *newvs) :
+
+1808 (
+YYSTYPE
+ *)
+ `m®loc
+(
+Ãwsize
+ *  *
+Ãwvs
+);
+
+1809 ià(
+Ãwvs
+ =ð
+NULL
+)
+
+1811
+yyvs
+ =
+Ãwvs
+;
+
+1812
+yyv¥
+ =
+Ãwvs
+ +
+i
+;
+
+1813
+yy¡acksize
+ =
+Ãwsize
+;
+
+1814
+yys¦im
+ =
+yyss
+ +
+Ãwsize
+ - 1;
+
+1816
+ }
+}
+
+1818 
+ #YYABORT
+ 
+yyabÜt
+
+
+ )
+
+1819 
+ #YYREJECT
+ 
+yyabÜt
+
+
+ )
+
+1820 
+ #YYACCEPT
+ 
+yyacû±
+
+
+ )
+
+1821 
+ #YYERROR
+ 
+yy”¾ab
+
+
+ )
+
+1823 #iâdeà
+YYPARSE_PARAM
+
+
+1824 #ià
+defšed
+(
+__ýlu¥lus
+è||
+__STDC__
+
+
+1825 
+ #YYPARSE_PARAM_ARG
+ 
+
+ )
+
+1826 
+ #YYPARSE_PARAM_DECL
+
+
+ )
+
+1828 
+ #YYPARSE_PARAM_ARG
+
+
+ )
+
+1829 
+ #YYPARSE_PARAM_DECL
+
+
+ )
+
+1832 #iâdeà
+YYPARSE_PARAM_TYPE
+
+
+1833 
+ #YYPARSE_PARAM_TYPE
+ *
+
+ )
+
+1835 #ià
+defšed
+(
+__ýlu¥lus
+è||
+__STDC__
+
+
+1836 
+ #YYPARSE_PARAM_ARG
+
+YYPARSE_PARAM_TYPE
+
+YYPARSE_PARAM
+
+
+ )
+
+1837 
+ #YYPARSE_PARAM_DECL
+
+
+ )
+
+1839 
+ #YYPARSE_PARAM_ARG
+
+YYPARSE_PARAM
+
+
+ )
+
+1840 
+ #YYPARSE_PARAM_DECL
+
+YYPARSE_PARAM_TYPE
+
+YYPARSE_PARAM
+;
+
+ )
+
+1845
+ $yy·r£
+ (
+YYPARSE_PARAM_ARG
+)
+
+1846
+YYPARSE_PARAM_DECL
+
+
+1848 
+yym
+,
+yyn
+,
+yy¡©e
+;
+
+1849 #ià
+YYDEBUG
+
+
+1850 cÚ¡ *
+yys
+;
+
+1852 ià((
+yys
+ =
+ `g‘’v
+("YYDEBUG")))
+
+1854
+yyn
+ = *
+yys
+;
+
+1855 ià(
+yyn
+ >= '0' && yyn <= '9')
+
+1856
+yydebug
+ =
+yyn
+ - '0';
+
+1860
+yyüs
+ = 0;
+
+1861
+yy”ræag
+ = 0;
+
+1862
+yych¬
+ = (-1);
+
+1864 ià(
+yyss
+ =ð
+NULL
+ &&
+ `yygrow¡ack
+()è
+yyovӾow
+;
+
+1865
+yys¥
+ =
+yyss
+;
+
+1866
+yyv¥
+ =
+yyvs
+;
+
+1867 *
+yys¥
+ =
+yy¡©e
+ = 0;
+
+1869
+yyloÝ
+:
+
+1870 ià((
+yyn
+ =
+yydeäed
+[
+yy¡©e
+])è
+yy»duû
+;
+
+1871 ià(
+yych¬
+ < 0)
+
+1873 ià((
+yych¬
+ =
+ `yyËx
+()) < 0) yychar = 0;
+
+1874 #ià
+YYDEBUG
+
+
+1875 ià(
+yydebug
+)
+
+1877
+yys
+ = 0;
+
+1878 ià(
+yych¬
+ <ð
+YYMAXTOKEN
+yys
+ =
+yyÇme
+[yychar];
+
+1879 ià(!
+yys
+) yys = "illegal-symbol";
+
+1880
+ `´štf
+("%sdebug: state %d,„eading %d (%s)\n",
+
+1881
+YYPREFIX
+,
+yy¡©e
+,
+yych¬
+,
+yys
+);
+
+1885 ià((
+yyn
+ =
+yysšdex
+[
+yy¡©e
+]è&& (yyÀ+ð
+yych¬
+) >= 0 &&
+
+1886
+yyn
+ <ð
+YYTABLESIZE
+ &&
+yycheck
+[yyn] =ð
+yych¬
+)
+
+1888 #ià
+YYDEBUG
+
+
+1889 ià(
+yydebug
+)
+
+1890
+ `´štf
+("%sdebug: state %d, shiftingo state %d\n",
+
+1891
+YYPREFIX
+,
+yy¡©e
+,
+yybË
+[
+yyn
+]);
+
+1893 ià(
+yys¥
+ >ð
+yys¦im
+ &&
+ `yygrow¡ack
+())
+
+1895 
+yyovӾow
+;
+
+1897 *++
+yys¥
+ =
+yy¡©e
+ =
+yybË
+[
+yyn
+];
+
+1898 *++
+yyv¥
+ =
+yylv®
+;
+
+1899
+yych¬
+ = (-1);
+
+1900 ià(
+yy”ræag
+ > 0) --yyerrflag;
+
+1901 
+yyloÝ
+;
+
+1903 ià((
+yyn
+ =
+yyršdex
+[
+yy¡©e
+]è&& (yyÀ+ð
+yych¬
+) >= 0 &&
+
+1904
+yyn
+ <ð
+YYTABLESIZE
+ &&
+yycheck
+[yyn] =ð
+yych¬
+)
+
+1906
+yyn
+ =
+yybË
+[yyn];
+
+1907 
+yy»duû
+;
+
+1909 ià(
+yy”ræag
+è
+yyš»cov”y
+;
+
+1910 #ià
+ `defšed
+(
+lšt
+è|| defšed(
+__GNUC__
+)
+
+1911 
+yyÃw”rÜ
+;
+
+1913
+yyÃw”rÜ
+:
+
+1914
+ `yy”rÜ
+("syntaxƒrror");
+
+1915 #ià
+ `defšed
+(
+lšt
+è|| defšed(
+__GNUC__
+)
+
+1916 
+yy”¾ab
+;
+
+1918
+yy”¾ab
+:
+
+1919 ++
+yyüs
+;
+
+1920
+yyš»cov”y
+:
+
+1921 ià(
+yy”ræag
+ < 3)
+
+1923
+yy”ræag
+ = 3;
+
+1926 ià((
+yyn
+ =
+yysšdex
+[*
+yys¥
+]è&& (yyÀ+ð
+YYERRCODE
+) >= 0 &&
+
+1927
+yyn
+ <ð
+YYTABLESIZE
+ &&
+yycheck
+[yyn] =ð
+YYERRCODE
+)
+
+1929 #ià
+YYDEBUG
+
+
+1930 ià(
+yydebug
+)
+
+1931
+ `´štf
+("%sdebug: s‹ %d,ƒ¼Ü„ecov”y shiášg\
+ s‹ %d\n",
+YYPREFIX
+, *
+yys¥
+,
+yybË
+[
+yyn
+]);
+
+1934 ià(
+yys¥
+ >ð
+yys¦im
+ &&
+ `yygrow¡ack
+())
+
+1936 
+yyovӾow
+;
+
+1938 *++
+yys¥
+ =
+yy¡©e
+ =
+yybË
+[
+yyn
+];
+
+1939 *++
+yyv¥
+ =
+yylv®
+;
+
+1940 
+yyloÝ
+;
+
+1944 #ià
+YYDEBUG
+
+
+1945 ià(
+yydebug
+)
+
+1946
+ `´štf
+("%sdebug:ƒrror„ecovery discarding state %d\n",
+
+1947
+YYPREFIX
+, *
+yys¥
+);
+
+1949 ià(
+yys¥
+ <ð
+yyss
+è
+yyabÜt
+;
+
+1950 --
+yys¥
+;
+
+1951 --
+yyv¥
+;
+
+1957 ià(
+yych¬
+ =ð0è
+yyabÜt
+;
+
+1958 #ià
+YYDEBUG
+
+
+1959 ià(
+yydebug
+)
+
+1961
+yys
+ = 0;
+
+1962 ià(
+yych¬
+ <ð
+YYMAXTOKEN
+yys
+ =
+yyÇme
+[yychar];
+
+1963 ià(!
+yys
+) yys = "illegal-symbol";
+
+1964
+ `´štf
+("%sdebug: state %d,ƒrror„ecovery discardsoken %d (%s)\n",
+
+1965
+YYPREFIX
+,
+yy¡©e
+,
+yych¬
+,
+yys
+);
+
+1968
+yych¬
+ = (-1);
+
+1969 
+yyloÝ
+;
+
+1971
+yy»duû
+:
+
+1972 #ià
+YYDEBUG
+
+
+1973 ià(
+yydebug
+)
+
+1974
+ `´štf
+("%sdebug: state %d,„educing by„ule %d (%s)\n",
+
+1975
+YYPREFIX
+,
+yy¡©e
+,
+yyn
+,
+yyruË
+[yyn]);
+
+1977
+yym
+ =
+yyËn
+[
+yyn
+];
+
+1978
+yyv®
+ =
+yyv¥
+[1-
+yym
+];
+
+1979 
+yyn
+)
+
+1984 #ià
+ `defšed
+(
+YYDEBUG
+è&& defšed(
+DEBUGGING
+)
+
+1985
+yydebug
+ = (
+debug
+ & 1);
+
+1991 { ià(
+š_ev®
+)
+
+1992
+ev®_roÙ
+ =
+ `block_h—d
+(
+yyv¥
+[0].
+cmdv®
+);
+
+1994
+maš_roÙ
+ =
+ `block_h—d
+(
+yyv¥
+[0].
+cmdv®
+); }
+
+1998 {
+yyv®
+.
+compv®
+.
+comp_Œue
+ =
+yyv¥
+[-2].
+cmdv®
+; yyv®.compv®.
+comp_®t
+ = yyvsp[0].cmdval; }
+
+2002 {
+yyv®
+.
+compv®
+.
+comp_Œue
+ =
+yyv¥
+[-1].
+cmdv®
+; yyv®.compv®.
+comp_®t
+ = yyvsp[0].cmdval; }
+
+2006 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; }
+
+2010 {
+yyv®
+.
+cmdv®
+ =
+yyv¥
+[0].cmdval; }
+
+2014 {
+cmdlše
+ =
+yyv¥
+[-4].
+iv®
+;
+
+2015
+yyv®
+.
+cmdv®
+ =
+ `make_ccmd
+(
+C_ELSIF
+,
+yyv¥
+[-2].
+¬g
+,yyv¥[0].
+compv®
+); }
+
+2019 {
+yyv®
+.
+cmdv®
+ =
+ `block_h—d
+(
+yyv¥
+[-1].cmdval);
+
+2020 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+yyv¥
+[-2].
+iv®
+)
+
+2021
+ `»¡Ü–i¡
+(
+yyv¥
+[-2].
+iv®
+); }
+
+2025 {
+yyv®
+.
+iv®
+ =
+§ve¡ack
+->
+¬y_fžl
+; }
+
+2029 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; }
+
+2033 {
+yyv®
+.
+cmdv®
+ =
+ `­³nd_lše
+(
+yyv¥
+[-1].cmdval,yyvsp[0].cmdval); }
+
+2037 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; }
+
+2041 {
+yyv®
+.
+cmdv®
+ =
+ `add_Ïb–
+(
+yyv¥
+[-1].
+cv®
+,yyvsp[0].cmdval); }
+
+2045 { ià(
+yyv¥
+[-1].
+cv®
+ !ð
+NuÎch
+) {
+
+2046
+yyv®
+.
+cmdv®
+ =
+ `add_Ïb–
+(
+yyv¥
+[-1].
+cv®
+,
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+
+2047
+Nuάg
+, Nullarg) );
+
+2050
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+;
+
+2051
+cmdlše
+ =
+NOLINE
+;
+
+2056 {
+yyv®
+.
+cmdv®
+ =
+ `add_Ïb–
+(
+yyv¥
+[-2].
+cv®
+,yyvsp[-1].cmdval); }
+
+2060 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; }
+
+2064 {
+yyv®
+.
+cmdv®
+ =
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+yyv¥
+[0].
+¬g
+,
+Nuάg
+); }
+
+2068 {
+yyv®
+.
+cmdv®
+ =
+ `addcÚd
+(
+
+2069
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+Nuάg
+,
+yyv¥
+[-2].
+¬g
+), yyvsp[0].arg); }
+
+2073 {
+yyv®
+.
+cmdv®
+ =
+ `addcÚd
+(
+ `šv”t
+(
+
+2074
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+Nuάg
+,
+yyv¥
+[-2].
+¬g
+)), yyvsp[0].arg); }
+
+2078 {
+yyv®
+.
+cmdv®
+ =
+ `addloÝ
+(
+
+2079
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+Nuάg
+,
+yyv¥
+[-2].
+¬g
+), yyvsp[0].arg); }
+
+2083 {
+yyv®
+.
+cmdv®
+ =
+ `addloÝ
+(
+ `šv”t
+(
+
+2084
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+Nuάg
+,
+yyv¥
+[-2].
+¬g
+)), yyvsp[0].arg); }
+
+2088 {
+cmdlše
+ =
+yyv¥
+[-4].
+iv®
+;
+
+2089
+yyv®
+.
+cmdv®
+ =
+ `make_icmd
+(
+C_IF
+,
+yyv¥
+[-2].
+¬g
+,yyv¥[0].
+compv®
+); }
+
+2093 {
+cmdlše
+ =
+yyv¥
+[-4].
+iv®
+;
+
+2094
+yyv®
+.
+cmdv®
+ =
+ `šv”t
+(
+ `make_icmd
+(
+C_IF
+,
+yyv¥
+[-2].
+¬g
+,yyv¥[0].
+compv®
+)); }
+
+2098 {
+cmdlše
+ =
+yyv¥
+[-2].
+iv®
+;
+
+2099
+yyv®
+.
+cmdv®
+ =
+ `make_ccmd
+(
+C_IF
+,
+ `cmd_to_¬g
+(
+yyv¥
+[-1].cmdv®),yyv¥[0].
+compv®
+); }
+
+2103 {
+cmdlše
+ =
+yyv¥
+[-2].
+iv®
+;
+
+2104
+yyv®
+.
+cmdv®
+ =
+ `šv”t
+(
+ `make_ccmd
+(
+C_IF
+,
+ `cmd_to_¬g
+(
+yyv¥
+[-1].cmdv®),yyv¥[0].
+compv®
+)); }
+
+2108 {
+cmdlše
+ =
+yyv¥
+[-4].
+iv®
+;
+
+2109
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `add_Ïb–
+(
+yyv¥
+[-5].
+cv®
+,
+
+2110
+ `make_ccmd
+(
+C_WHILE
+,
+yyv¥
+[-2].
+¬g
+,yyv¥[0].
+compv®
+) )); }
+
+2114 {
+cmdlše
+ =
+yyv¥
+[-4].
+iv®
+;
+
+2115
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `add_Ïb–
+(
+yyv¥
+[-5].
+cv®
+,
+
+2116
+ `šv”t
+(
+ `make_ccmd
+(
+C_WHILE
+,
+yyv¥
+[-2].
+¬g
+,yyv¥[0].
+compv®
+)) )); }
+
+2120 {
+cmdlše
+ =
+yyv¥
+[-2].
+iv®
+;
+
+2121
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `add_Ïb–
+(
+yyv¥
+[-3].
+cv®
+,
+
+2122
+ `make_ccmd
+(
+C_WHILE
+,
+ `cmd_to_¬g
+(
+yyv¥
+[-1].
+cmdv®
+),yyv¥[0].
+compv®
+) )); }
+
+2126 {
+cmdlše
+ =
+yyv¥
+[-2].
+iv®
+;
+
+2127
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `add_Ïb–
+(
+yyv¥
+[-3].
+cv®
+,
+
+2128
+ `šv”t
+(
+ `make_ccmd
+(
+C_WHILE
+,
+ `cmd_to_¬g
+(
+yyv¥
+[-1].
+cmdv®
+),yyv¥[0].
+compv®
+)) )); }
+
+2132 {
+cmdlše
+ =
+yyv¥
+[-5].
+iv®
+;
+
+2145 ià(
+yyv¥
+[-2].
+¬g
+->
+¬g_ty³
+ !ð
+O_ARRAY
+) {
+
+2146
+sü¡ab
+ =
+ `¯dd
+(
+ `g’¡ab
+());
+
+2147
+yyv®
+.
+cmdv®
+ =
+ `­³nd_lše
+(
+
+2148
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+
+2149
+ `l
+(
+ `make_Ý
+(
+O_ASSIGN
+,2,
+
+2150
+ `li¡ish
+(
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+2151
+ `¡ab2¬g
+(
+A_STAB
+,
+sü¡ab
+),
+
+2152
+Nuάg
+,Nullarg )),
+
+2153
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-2].
+¬g
+)),
+
+2154
+Nuάg
+)),
+
+2155
+Nuάg
+),
+
+2156
+ `wÝt
+(
+ `ov”
+(
+yyv¥
+[-4].
+¡abv®
+,
+ `add_Ïb–
+(yyv¥[-6].
+cv®
+,
+
+2157
+ `make_ccmd
+(
+C_WHILE
+,
+
+2158
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+2159
+ `¡ab2¬g
+(
+A_STAB
+,
+sü¡ab
+),
+
+2160
+Nuάg
+,Nullarg ),
+
+2161
+yyv¥
+[0].
+compv®
+)))));
+
+2162
+yyv®
+.
+cmdv®
+->
+c_lše
+ =
+yyv¥
+[-5].
+iv®
+;
+
+2163
+yyv®
+.
+cmdv®
+->
+c_h—d
+->
+c_lše
+ =
+yyv¥
+[-5].
+iv®
+;
+
+2166
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `ov”
+(
+yyv¥
+[-4].
+¡abv®
+,
+ `add_Ïb–
+(yyv¥[-6].
+cv®
+,
+
+2167
+ `make_ccmd
+(
+C_WHILE
+,
+yyv¥
+[-2].
+¬g
+,yyv¥[0].
+compv®
+) )));
+
+2173 {
+cmdlše
+ =
+yyv¥
+[-4].
+iv®
+;
+
+2174 ià(
+yyv¥
+[-2].
+¬g
+->
+¬g_ty³
+ !ð
+O_ARRAY
+) {
+
+2175
+sü¡ab
+ =
+ `¯dd
+(
+ `g’¡ab
+());
+
+2176
+yyv®
+.
+cmdv®
+ =
+ `­³nd_lše
+(
+
+2177
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+
+2178
+ `l
+(
+ `make_Ý
+(
+O_ASSIGN
+,2,
+
+2179
+ `li¡ish
+(
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+2180
+ `¡ab2¬g
+(
+A_STAB
+,
+sü¡ab
+),
+
+2181
+Nuάg
+,Nullarg )),
+
+2182
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-2].
+¬g
+)),
+
+2183
+Nuάg
+)),
+
+2184
+Nuάg
+),
+
+2185
+ `wÝt
+(
+ `ov”
+(
+def¡ab
+,
+ `add_Ïb–
+(
+yyv¥
+[-5].
+cv®
+,
+
+2186
+ `make_ccmd
+(
+C_WHILE
+,
+
+2187
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+2188
+ `¡ab2¬g
+(
+A_STAB
+,
+sü¡ab
+),
+
+2189
+Nuάg
+,Nullarg ),
+
+2190
+yyv¥
+[0].
+compv®
+)))));
+
+2191
+yyv®
+.
+cmdv®
+->
+c_lše
+ =
+yyv¥
+[-4].
+iv®
+;
+
+2192
+yyv®
+.
+cmdv®
+->
+c_h—d
+->
+c_lše
+ =
+yyv¥
+[-4].
+iv®
+;
+
+2195
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `ov”
+(
+def¡ab
+,
+ `add_Ïb–
+(
+yyv¥
+[-5].
+cv®
+,
+
+2196
+ `make_ccmd
+(
+C_WHILE
+,
+yyv¥
+[-2].
+¬g
+,yyv¥[0].
+compv®
+) )));
+
+2202 {
+yyv®
+.
+compv®
+.
+comp_Œue
+ =
+yyv¥
+[0].
+cmdv®
+;
+
+2203
+yyv®
+.
+compv®
+.
+comp_®t
+ =
+yyv¥
+[-2].
+cmdv®
+;
+
+2204
+cmdlše
+ =
+yyv¥
+[-8].
+iv®
+;
+
+2205
+yyv®
+.
+cmdv®
+ =
+ `­³nd_lše
+(
+yyv¥
+[-6].cmdv®,
+ `wÝt
+(
+ `add_Ïb–
+(yyv¥[-9].
+cv®
+,
+
+2206
+ `make_ccmd
+(
+C_WHILE
+,
+yyv¥
+[-4].
+¬g
+,
+yyv®
+.
+compv®
+) ))); }
+
+2210 {
+yyv®
+.
+cmdv®
+ =
+ `add_Ïb–
+(
+yyv¥
+[-1].
+cv®
+,
+ `make_ccmd
+(
+C_BLOCK
+,
+Nuάg
+,yyv¥[0].
+compv®
+)); }
+
+2214 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; }
+
+2218 { ()
+ `sÿn¡r
+("1");
+yyv®
+.
+¬g
+ =
+yylv®
+.arg; }
+
+2222 {
+yyv®
+.
+cv®
+ =
+NuÎch
+; }
+
+2226 {
+yyv®
+.
+iv®
+ = 0; }
+
+2230 {
+yyv®
+.
+iv®
+ = 0; }
+
+2234 {
+yyv®
+.
+iv®
+ = 0; }
+
+2238 { ià(
+ `¡rEQ
+(
+yyv¥
+[-2].
+cv®
+,"stdout"))
+
+2239
+ `make_fÜm
+(
+ `¡ab’t
+("STDOUT",
+TRUE
+),
+yyv¥
+[0].
+fÜmv®
+);
+
+2240 ià(
+ `¡rEQ
+(
+yyv¥
+[-2].
+cv®
+,"stderr"))
+
+2241
+ `make_fÜm
+(
+ `¡ab’t
+("STDERR",
+TRUE
+),
+yyv¥
+[0].
+fÜmv®
+);
+
+2243
+ `make_fÜm
+(
+ `¡ab’t
+(
+yyv¥
+[-2].
+cv®
+,
+TRUE
+),yyv¥[0].
+fÜmv®
+);
+
+2244
+ `Saãä“
+(
+yyv¥
+[-2].
+cv®
+); yyv¥[-2].cv® =
+NuÎch
+; }
+
+2248 {
+ `make_fÜm
+(
+ `¡ab’t
+("STDOUT",
+TRUE
+),
+yyv¥
+[0].
+fÜmv®
+); }
+
+2252 {
+ `make_sub
+(
+yyv¥
+[-1].
+cv®
+,yyv¥[0].
+cmdv®
+); }
+
+2256 { 
+tmpbuf
+[256];
+
+2257
+STAB
+ *
+tmp¡ab
+;
+
+2259
+ `§veh±r
+(&
+cur¡ash
+);
+
+2260
+ `§ve™em
+(
+cur¡Çme
+);
+
+2261
+ `¡r_£t
+(
+cur¡Çme
+,
+yyv¥
+[-1].
+cv®
+);
+
+2262
+ `¥rštf
+(
+tmpbuf
+,"'_%s",
+yyv¥
+[-1].
+cv®
+);
+
+2263
+tmp¡ab
+ =
+ `¡ab’t
+(
+tmpbuf
+,
+TRUE
+);
+
+2264 ià(!
+ `¡ab_xhash
+(
+tmp¡ab
+))
+
+2265
+ `¡ab_xhash
+(
+tmp¡ab
+èð
+ `hÃw
+(0);
+
+2266
+cur¡ash
+ =
+ `¡ab_xhash
+(
+tmp¡ab
+);
+
+2267 ià(!
+cur¡ash
+->
+tbl_Çme
+)
+
+2268
+cur¡ash
+->
+tbl_Çme
+ =
+ `§ve¡r
+(
+yyv¥
+[-1].
+cv®
+);
+
+2269
+cur¡ash
+->
+tbl_cÛffsize
+ = 0;
+
+2270
+ `Saãä“
+(
+yyv¥
+[-1].
+cv®
+); yyv¥[-1].cv® =
+NuÎch
+;
+
+2271
+cmdlše
+ =
+NOLINE
+;
+
+2276 {
+yyv®
+.
+¬g
+ =
+yyv¥
+[0].arg; }
+
+2280 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_COMMA
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2284 {
+yyv®
+.
+¬g
+ =
+yyv¥
+[0].arg; }
+
+2288 {
+yyv¥
+[-2].
+¬g
+ =
+ `li¡ish
+(yyvsp[-2].arg);
+
+2289 ià(
+yyv¥
+[-2].
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+ && yyv¥[-2].¬g->
+¬g_Ën
+ == 1)
+
+2290
+yyv¥
+[-2].
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+2291 ià(
+yyv¥
+[-2].
+¬g
+->
+¬g_ty³
+ =ð
+O_LIST
+)
+
+2292
+yyv¥
+[0].
+¬g
+ =
+ `li¡ish
+(yyvsp[0].arg);
+
+2293
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_ASSIGN
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+)); }
+
+2297 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_POW
+, 2,
+yyv¥
+[-3].¬g, yyv¥[0].¬g,
+Nuάg
+)); }
+
+2301 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+yyv¥
+[-2].
+iv®
+, 2, yyv¥[-3].¬g, yyv¥[0].¬g,
+Nuάg
+)); }
+
+2305 {
+yyv®
+.
+¬g
+ =
+ `rÿtmaybe
+(
+ `l
+(
+ `make_Ý
+(
+yyv¥
+[-2].
+iv®
+, 2, yyv¥[-3].¬g, yyv¥[0].¬g,
+Nuάg
+)));}
+
+2309 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_LEFT_SHIFT
+, 2,
+yyv¥
+[-3].¬g, yyv¥[0].¬g,
+Nuάg
+)); }
+
+2313 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_RIGHT_SHIFT
+, 2,
+yyv¥
+[-3].¬g, yyv¥[0].¬g,
+Nuάg
+)); }
+
+2317 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_BIT_AND
+, 2,
+yyv¥
+[-3].¬g, yyv¥[0].¬g,
+Nuάg
+)); }
+
+2321 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_XOR
+, 2,
+yyv¥
+[-3].¬g, yyv¥[0].¬g,
+Nuάg
+)); }
+
+2325 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_BIT_OR
+, 2,
+yyv¥
+[-3].¬g, yyv¥[0].¬g,
+Nuάg
+)); }
+
+2329 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_POW
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2333 { ià(
+yyv¥
+[-1].
+iv®
+ =ð
+O_REPEAT
+)
+
+2334
+yyv¥
+[-2].
+¬g
+ =
+ `li¡ish
+(yyvsp[-2].arg);
+
+2335
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 2, yyv¥[-2].¬g, yyv¥[0].¬g,
+Nuάg
+);
+
+2336 ià(
+yyv¥
+[-1].
+iv®
+ =ð
+O_REPEAT
+) {
+
+2337 ià(
+yyv®
+.
+¬g
+[1].
+¬g_ty³
+ !ð
+A_EXPR
+ ||
+
+2338
+yyv®
+.
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ !ð
+O_LIST
+)
+
+2339
+yyv®
+.
+¬g
+[1].
+¬g_æags
+ &ð~
+AF_ARYOK
+;
+
+2344 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 2, yyv¥[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2348 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_LEFT_SHIFT
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2352 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_RIGHT_SHIFT
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2356 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 2, yyv¥[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2360 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 2, yyv¥[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2364 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_BIT_AND
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2368 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_XOR
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2372 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_BIT_OR
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2376 {
+¬g4
+ =
+Nuάg
+;
+
+2377
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_F_OR_R
+, 4,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2381 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_AND
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2385 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_OR
+, 2,
+yyv¥
+[-2].¬g, yyv¥[0].¬g,
+Nuάg
+); }
+
+2389 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_COND_EXPR
+, 3,
+yyv¥
+[-4].arg, yyvsp[-2].arg, yyvsp[0].arg); }
+
+2393 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_MATCH
+,
+yyv¥
+[-2].arg, yyvsp[0].arg); }
+
+2397 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_NMATCH
+,
+yyv¥
+[-2].arg, yyvsp[0].arg); }
+
+2401 {
+yyv®
+.
+¬g
+ =
+yyv¥
+[0].arg; }
+
+2405 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_NEGATE
+, 1,
+yyv¥
+[0].¬g,
+Nuάg
+, Nullarg); }
+
+2409 {
+yyv®
+.
+¬g
+ =
+yyv¥
+[0].arg; }
+
+2413 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_NOT
+, 1,
+yyv¥
+[0].¬g,
+Nuάg
+, Nullarg); }
+
+2417 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_COMPLEMENT
+, 1,
+yyv¥
+[0].¬g,
+Nuάg
+, Nullarg);}
+
+2421 {
+yyv®
+.
+¬g
+ =
+ `addæags
+(1,
+AF_POST
+|
+AF_UP
+,
+
+2422
+ `l
+(
+ `make_Ý
+(
+O_ITEM
+,1,
+yyv¥
+[-1].
+¬g
+,
+Nuάg
+,Nullarg))); }
+
+2426 {
+yyv®
+.
+¬g
+ =
+ `addæags
+(1,
+AF_POST
+,
+
+2427
+ `l
+(
+ `make_Ý
+(
+O_ITEM
+,1,
+yyv¥
+[-1].
+¬g
+,
+Nuάg
+,Nullarg))); }
+
+2431 {
+yyv®
+.
+¬g
+ =
+ `addæags
+(1,
+AF_PRE
+|
+AF_UP
+,
+
+2432
+ `l
+(
+ `make_Ý
+(
+O_ITEM
+,1,
+yyv¥
+[0].
+¬g
+,
+Nuάg
+,Nullarg))); }
+
+2436 {
+yyv®
+.
+¬g
+ =
+ `addæags
+(1,
+AF_PRE
+,
+
+2437
+ `l
+(
+ `make_Ý
+(
+O_ITEM
+,1,
+yyv¥
+[0].
+¬g
+,
+Nuάg
+,Nullarg))); }
+
+2441 {
+ݬgs
+[
+yyv¥
+[-1].
+iv®
+] = 0;
+
+2442
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 1,
+
+2443
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+)),
+
+2444
+Nuάg
+, Nullarg);
+
+2449 {
+ݬgs
+[
+yyv¥
+[-1].
+iv®
+] = 1;
+
+2450
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 1, yyv¥[0].¬g,
+Nuάg
+, Nullarg); }
+
+2454 {
+ݬgs
+[
+yyv¥
+[0].
+iv®
+] = (yyv¥[0].iv® !ð
+O_FTTTY
+);
+
+2455
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[0].
+iv®
+, 1,
+
+2456
+ `¡ab2¬g
+(
+A_STAB
+,
+
+2457
+yyv¥
+[0].
+iv®
+ =ð
+O_FTTTY
+?
+ `¡ab’t
+("STDIN",
+TRUE
+):
+def¡ab
+),
+
+2458
+Nuάg
+, Nullarg); }
+
+2462 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `loÿlize
+(
+ `make_Ý
+(
+O_ASSIGN
+, 1,
+
+2463
+ `loÿlize
+(
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+))),
+
+2464
+Nuάg
+,Nullarg))); }
+
+2468 {
+yyv®
+.
+¬g
+ =
+ `make_li¡
+(
+yyv¥
+[-2].arg); }
+
+2472 {
+yyv®
+.
+¬g
+ =
+ `make_li¡
+(
+yyv¥
+[-1].arg); }
+
+2476 {
+yyv®
+.
+¬g
+ =
+ `make_li¡
+(
+Nuάg
+); }
+
+2480 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_DOFILE
+,2,
+yyv¥
+[0].¬g,
+Nuάg
+,Nullarg);
+
+2481
+®l¡abs
+ =
+TRUE
+;}
+
+2485 {
+yyv®
+.
+¬g
+ =
+ `cmd_to_¬g
+(
+yyv¥
+[0].
+cmdv®
+); }
+
+2489 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[0].
+¡abv®
+); }
+
+2493 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_STAR
+,
+yyv¥
+[0].
+¡abv®
+); }
+
+2497 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_AELEM
+, 2,
+
+2498
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¯dd
+(
+yyv¥
+[-3].
+¡abv®
+)), yyv¥[-1].
+¬g
+,
+Nuάg
+); }
+
+2502 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_HASH
+, 1,
+
+2503
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[0].
+¡abv®
+),
+
+2504
+Nuάg
+, Nullarg); }
+
+2508 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+2509
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[0].
+¡abv®
+),
+
+2510
+Nuάg
+, Nullarg); }
+
+2514 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_HELEM
+, 2,
+
+2515
+ `¡ab2¬g
+(
+A_STAB
+,
+ `hadd
+(
+yyv¥
+[-3].
+¡abv®
+)),
+
+2516
+ `jmaybe
+(
+yyv¥
+[-1].
+¬g
+),
+
+2517
+Nuάg
+); }
+
+2521 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_LSLICE
+, 3,
+
+2522
+Nuάg
+,
+
+2523
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+)),
+
+2524
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-4].
+¬g
+))); }
+
+2528 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_LSLICE
+, 3,
+
+2529
+Nuάg
+,
+
+2530
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+)),
+
+2531
+Nuάg
+); }
+
+2535 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_ASLICE
+, 2,
+
+2536
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¯dd
+(
+yyv¥
+[-3].
+¡abv®
+)),
+
+2537
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+)),
+
+2538
+Nuάg
+); }
+
+2542 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_HSLICE
+, 2,
+
+2543
+ `¡ab2¬g
+(
+A_STAB
+,
+ `hadd
+(
+yyv¥
+[-3].
+¡abv®
+)),
+
+2544
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+)),
+
+2545
+Nuάg
+); }
+
+2549 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_DELETE
+, 2,
+
+2550
+ `¡ab2¬g
+(
+A_STAB
+,
+ `hadd
+(
+yyv¥
+[-3].
+¡abv®
+)),
+
+2551
+ `jmaybe
+(
+yyv¥
+[-1].
+¬g
+),
+
+2552
+Nuάg
+); }
+
+2556 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_ARYLEN
+,
+yyv¥
+[0].
+¡abv®
+); }
+
+2560 {
+yyv®
+.
+¬g
+ =
+yyv¥
+[0].arg; }
+
+2564 {
+yyv®
+.
+¬g
+ =
+yyv¥
+[0].arg; }
+
+2568 {
+yyv®
+.
+¬g
+ =
+yyv¥
+[0].arg; }
+
+2572 {
+yyv®
+.
+¬g
+ =
+yyv¥
+[0].arg; }
+
+2576 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2577
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[-3].
+cv®
+,
+TRUE
+)),
+
+2578
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+),
+
+2579
+Nuάg
+);
+ `Saãä“
+(
+yyv¥
+[-3].
+cv®
+); yyv¥[-3].cv® =
+NuÎch
+;
+
+2580
+yyv®
+.
+¬g
+->
+¬g_æags
+ |ð
+AF_DEPR
+; }
+
+2584 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2585
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[-3].
+cv®
+,
+TRUE
+)),
+
+2586
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+),
+
+2587
+Nuάg
+);
+ `Saãä“
+(
+yyv¥
+[-3].
+cv®
+); yyv¥[-3].cv® =
+NuÎch
+; }
+
+2591 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2592
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[-2].
+cv®
+,
+TRUE
+)),
+
+2593
+ `make_li¡
+(
+Nuάg
+),
+
+2594
+Nuάg
+);
+
+2595
+yyv®
+.
+¬g
+->
+¬g_æags
+ |ð
+AF_DEPR
+; }
+
+2599 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2600
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[-2].
+cv®
+,
+TRUE
+)),
+
+2601
+ `make_li¡
+(
+Nuάg
+),
+
+2602
+Nuάg
+); }
+
+2606 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2607
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+)),
+
+2608
+Nuάg
+,
+
+2609
+Nuάg
+); }
+
+2613 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2614
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[-3].
+¡abv®
+),
+
+2615
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+),
+
+2616
+Nuάg
+);
+
+2617
+yyv®
+.
+¬g
+->
+¬g_æags
+ |ð
+AF_DEPR
+; }
+
+2621 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2622
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[-3].
+¡abv®
+),
+
+2623
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+),
+
+2624
+Nuάg
+); }
+
+2628 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2629
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[-2].
+¡abv®
+),
+
+2630
+ `make_li¡
+(
+Nuάg
+),
+
+2631
+Nuάg
+);
+
+2632
+yyv®
+.
+¬g
+->
+¬g_æags
+ |ð
+AF_DEPR
+; }
+
+2636 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2637
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[-2].
+¡abv®
+),
+
+2638
+ `make_li¡
+(
+Nuάg
+),
+
+2639
+Nuάg
+); }
+
+2643 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+2644
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[0].
+¡abv®
+),
+
+2645
+Nuάg
+,
+
+2646
+Nuάg
+); }
+
+2650 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[0].
+iv®
+,0,
+Nuάg
+,Nullarg,Nullarg); }
+
+2654 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+,1,
+ `cv®_to_¬g
+(yyv¥[0].
+cv®
+),
+
+2655
+Nuάg
+,Nullarg); }
+
+2659 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[0].
+iv®
+,0,
+Nuάg
+,Nullarg,Nullarg); }
+
+2663 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+,1,yyv¥[0].¬g,
+Nuάg
+,Nullarg); }
+
+2667 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SELECT
+, 0,
+Nuάg
+, Nullarg, Nullarg);}
+
+2671 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SELECT
+, 1,
+yyv¥
+[-1].¬g,
+Nuάg
+, Nullarg); }
+
+2675 {
+¬g4
+ =
+yyv¥
+[-1].
+¬g
+;
+
+2676
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SSELECT
+, 4,
+yyv¥
+[-4].arg, yyvsp[-3].arg, yyvsp[-2].arg); }
+
+2680 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_OPEN
+, 2,
+
+2681
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+)),
+
+2682
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+)),
+
+2683
+Nuάg
+); }
+
+2687 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_OPEN
+, 2,
+
+2688
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[-1].
+cv®
+,
+TRUE
+)),
+
+2689
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¡ab’t
+(
+yyv¥
+[-1].
+cv®
+,
+TRUE
+)),
+
+2690
+Nuάg
+); }
+
+2694 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_OPEN
+, 2,
+
+2695
+yyv¥
+[-2].
+¬g
+,
+
+2696
+yyv¥
+[-1].
+¬g
+,
+Nuάg
+); }
+
+2700 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-3].
+iv®
+, 1,
+
+2701
+yyv¥
+[-1].
+¬g
+,
+
+2702
+Nuάg
+, Nullarg); }
+
+2706 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 1,
+
+2707
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+)),
+
+2708
+Nuάg
+, Nullarg);
+
+2709
+ `Saãä“
+(
+yyv¥
+[0].
+cv®
+); yyv¥[0].cv® =
+NuÎch
+; }
+
+2713 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 1,
+
+2714
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[0].
+¡abv®
+),
+
+2715
+Nuάg
+, Nullarg); }
+
+2719 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-2].
+iv®
+, 1,
+
+2720
+ `¡ab2¬g
+(
+A_WORD
+,
+NuΡab
+),
+
+2721
+Nuάg
+, Nullarg); }
+
+2725 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[0].
+iv®
+, 0,
+
+2726
+Nuάg
+, Nullarg, Nullarg); }
+
+2730 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-4].
+iv®
+, 2, yyv¥[-2].¬g, yyv¥[-1].¬g,
+Nuάg
+); }
+
+2734 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-5].
+iv®
+, 3, yyv¥[-3].¬g, yyv¥[-2].¬g,
+ `make_li¡
+(yyvsp[-1].arg)); }
+
+2738 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-5].
+iv®
+, 2, yyv¥[-3].¬g, yyv¥[-1].¬g,
+Nuάg
+); }
+
+2742 {
+¬g4
+ =
+yyv¥
+[-1].
+¬g
+;
+yyv®
+.¬g =
+ `make_Ý
+(yyv¥[-6].
+iv®
+, 4, yyvsp[-4].arg, yyvsp[-3].arg, yyvsp[-2].arg); }
+
+2746 {
+¬g4
+ =
+yyv¥
+[-2].
+¬g
+;
+¬g5
+ = yyvsp[-1].arg;
+
+2747
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-8].
+iv®
+, 5, yyvsp[-6].arg, yyvsp[-4].arg, yyvsp[-3].arg); }
+
+2751 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-4].
+iv®
+, 2,
+
+2752
+yyv¥
+[-2].
+¬g
+,
+
+2753
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+),
+
+2754
+Nuάg
+); }
+
+2758 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_POP
+, 1,
+yyv¥
+[0].¬g,
+Nuάg
+, Nullarg); }
+
+2762 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_POP
+, 1,
+yyv¥
+[-1].¬g,
+Nuάg
+, Nullarg); }
+
+2766 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SHIFT
+, 1,
+yyv¥
+[0].¬g,
+Nuάg
+, Nullarg); }
+
+2770 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SHIFT
+, 1,
+yyv¥
+[-1].¬g,
+Nuάg
+, Nullarg); }
+
+2774 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SHIFT
+, 1,
+
+2775
+ `¡ab2¬g
+(
+A_STAB
+,
+
+2776
+ `¯dd
+(
+ `¡ab’t
+(
+sublše
+ ? "_" : "ARGV",
+TRUE
+))),
+
+2777
+Nuάg
+, Nullarg); }
+
+2781 { 
+p
+[]="/\\s+/";
+
+2782 *
+Þd’d
+ =
+buãnd
+;
+
+2783
+ARG
+ *
+Þd¬g
+ =
+yylv®
+.
+¬g
+;
+
+2785
+buãnd
+=
+p
++5;
+
+2786 ()
+ `sÿÅ©
+(
+p
+);
+
+2787
+buãnd
+=
+Þd’d
+;
+
+2788
+yyv®
+.
+¬g
+ =
+ `make_¥l™
+(
+def¡ab
+,
+yylv®
+.¬g,
+Nuάg
+);
+
+2789
+yylv®
+.
+¬g
+ =
+Þd¬g
+; }
+
+2793 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_MATCH
+,
+yyv¥
+[-2].arg,
+
+2794
+ `make_¥l™
+(
+def¡ab
+,
+yyv¥
+[-3].
+¬g
+,yyvsp[-1].arg));}
+
+2798 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_MATCH
+,
+yyv¥
+[-1].arg,
+
+2799
+ `make_¥l™
+(
+def¡ab
+,
+yyv¥
+[-2].
+¬g
+,
+Nuάg
+) ); }
+
+2803 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_MATCH
+,
+
+2804
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+
+2805
+ `make_¥l™
+(
+def¡ab
+,
+yyv¥
+[-1].
+¬g
+,
+Nuάg
+) ); }
+
+2809 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-4].
+iv®
+, 2,
+
+2810
+yyv¥
+[-2].
+¬g
+,
+
+2811
+ `li¡ish
+(
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+)),
+
+2812
+Nuάg
+); }
+
+2816 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-3].
+iv®
+, 1,
+
+2817
+ `make_li¡
+(
+yyv¥
+[-1].
+¬g
+),
+
+2818
+Nuάg
+,
+
+2819
+Nuάg
+); }
+
+2823 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 1,
+ `fixl
+(yyvsp[-1].ival,yyvsp[0].arg),
+
+2824
+Nuάg
+, Nullarg)); }
+
+2828 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+yyv¥
+[0].
+iv®
+, 1,
+
+2829
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+
+2830
+Nuάg
+, Nullarg)); }
+
+2834 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[0].
+iv®
+, 0,
+Nuάg
+, Nullarg, Nullarg); }
+
+2838 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-2].
+iv®
+, 0,
+Nuάg
+, Nullarg, Nullarg); }
+
+2842 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-2].
+iv®
+, 0,
+Nuάg
+, Nullarg, Nullarg); }
+
+2846 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-3].
+iv®
+, 1, yyv¥[-1].¬g,
+Nuάg
+, Nullarg); }
+
+2850 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-4].
+iv®
+, 2, yyv¥[-2].¬g, yyv¥[-1].¬g,
+Nuάg
+);
+
+2851 ià(
+yyv¥
+[-4].
+iv®
+ =ð
+O_INDEX
+ &&
+yyv®
+.
+¬g
+[2].
+¬g_ty³
+ =ð
+A_SINGLE
+)
+
+2852
+ `fbmcompže
+(
+yyv®
+.
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+,0); }
+
+2856 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-4].
+iv®
+, 2, yyv¥[-2].¬g, yyv¥[-1].¬g,
+Nuάg
+);
+
+2857 ià(
+yyv¥
+[-4].
+iv®
+ =ð
+O_INDEX
+ &&
+yyv®
+.
+¬g
+[2].
+¬g_ty³
+ =ð
+A_SINGLE
+)
+
+2858
+ `fbmcompže
+(
+yyv®
+.
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+,0); }
+
+2862 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-5].
+iv®
+, 3, yyvsp[-3].arg, yyvsp[-2].arg, yyvsp[-1].arg);
+
+2863 ià(
+yyv¥
+[-5].
+iv®
+ =ð
+O_INDEX
+ &&
+yyv®
+.
+¬g
+[2].
+¬g_ty³
+ =ð
+A_SINGLE
+)
+
+2864
+ `fbmcompže
+(
+yyv®
+.
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+,0); }
+
+2868 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-5].
+iv®
+, 3, yyvsp[-3].arg, yyvsp[-2].arg, yyvsp[-1].arg); }
+
+2872 {
+¬g4
+ =
+yyv¥
+[-1].
+¬g
+;
+
+2873
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-6].
+iv®
+, 4, yyvsp[-4].arg, yyvsp[-3].arg, yyvsp[-2].arg); }
+
+2877 {
+¬g4
+ =
+yyv¥
+[-2].
+¬g
+;
+¬g5
+ = yyvsp[-1].arg;
+
+2878
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-7].
+iv®
+, 5, yyvsp[-5].arg, yyvsp[-4].arg, yyvsp[-3].arg); }
+
+2882 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-3].
+iv®
+, 1,
+
+2883
+yyv¥
+[-1].
+¬g
+,
+
+2884
+Nuάg
+,
+
+2885
+Nuάg
+); }
+
+2889 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+, 1,
+
+2890
+yyv¥
+[0].
+¬g
+,
+
+2891
+Nuάg
+,
+
+2892
+Nuάg
+); }
+
+2896 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-5].
+iv®
+, 3, yyvsp[-3].arg, yyvsp[-2].arg, yyvsp[-1].arg); }
+
+2900 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[0].
+iv®
+,2,
+
+2901
+ `¡ab2¬g
+(
+A_WORD
+,
+NuΡab
+),
+
+2902
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+
+2903
+Nuάg
+); }
+
+2907 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+,2,
+
+2908
+ `¡ab2¬g
+(
+A_WORD
+,
+NuΡab
+),
+
+2909
+ `mayb–i¡ish
+(
+yyv¥
+[-1].
+iv®
+,
+ `make_li¡
+(yyv¥[0].
+¬g
+)),
+
+2910
+Nuάg
+); }
+
+2914 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-1].
+iv®
+,2,
+
+2915
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+)),
+
+2916
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+
+2917
+Nuάg
+); }
+
+2921 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-2].
+iv®
+,2,
+
+2922
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[-1].
+cv®
+,
+TRUE
+)),
+
+2923
+ `mayb–i¡ish
+(
+yyv¥
+[-2].
+iv®
+,
+ `make_li¡
+(yyv¥[0].
+¬g
+)),
+
+2924
+Nuάg
+);
+ `Saãä“
+(
+yyv¥
+[-1].
+cv®
+); yyv¥[-1].cv® =
+NuÎch
+; }
+
+2928 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yyv¥
+[-2].
+iv®
+,2,
+
+2929
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[-1].
+¡abv®
+),
+
+2930
+ `mayb–i¡ish
+(
+yyv¥
+[-2].
+iv®
+,
+ `make_li¡
+(yyv¥[0].
+¬g
+)),
+
+2931
+Nuάg
+); }
+
+2935 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+));
+
+2936
+ `Saãä“
+(
+yyv¥
+[0].
+cv®
+); yyv¥[0].cv® =
+NuÎch
+;}
+
+2940 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¯dd
+(
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+)));
+
+2941
+ `Saãä“
+(
+yyv¥
+[0].
+cv®
+); yyv¥[0].cv® =
+NuÎch
+; }
+
+2945 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[0].
+¡abv®
+); }
+
+2949 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_WORD
+,
+ `hadd
+(
+ `¡ab’t
+(
+yyv¥
+[0].
+cv®
+,
+TRUE
+)));
+
+2950
+ `Saãä“
+(
+yyv¥
+[0].
+cv®
+); yyv¥[0].cv® =
+NuÎch
+; }
+
+2954 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_STAB
+,
+yyv¥
+[0].
+¡abv®
+); }
+
+2958 { *
+s
+;
+
+2959
+yyv®
+.
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+2960
+yyv®
+.
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+2961
+yyv®
+.
+¬g
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+2962
+yyv®
+.
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+ `¡r_make
+(
+yyv¥
+[0].
+cv®
+,0);
+
+2963 
+s
+ =
+yyv¥
+[0].
+cv®
+; * &&
+ `i¦ow”
+(*s); s++) ;
+
+2964 ià(
+dow¬n
+ && !*
+s
+)
+
+2965
+ `w¬n
+(
+
+2967
+yyv¥
+[0].
+cv®
+ );
+
+2972
+yys¥
+ -ð
+yym
+;
+
+2973
+yy¡©e
+ = *
+yys¥
+;
+
+2974
+yyv¥
+ -ð
+yym
+;
+
+2975
+yym
+ =
+yylhs
+[
+yyn
+];
+
+2976 ià(
+yy¡©e
+ =ð0 &&
+yym
+ == 0)
+
+2978 #ià
+YYDEBUG
+
+
+2979 ià(
+yydebug
+)
+
+2980
+ `´štf
+("%sdebug:‡á”„eduùiÚ, shiášg from s‹ 0o\
+ %d\n",
+YYPREFIX
+,
+YYFINAL
+);
+
+2983
+yy¡©e
+ =
+YYFINAL
+;
+
+2984 *++
+yys¥
+ =
+YYFINAL
+;
+
+2985 *++
+yyv¥
+ =
+yyv®
+;
+
+2986 ià(
+yych¬
+ < 0)
+
+2988 ià((
+yych¬
+ =
+ `yyËx
+()) < 0) yychar = 0;
+
+2989 #ià
+YYDEBUG
+
+
+2990 ià(
+yydebug
+)
+
+2992
+yys
+ = 0;
+
+2993 ià(
+yych¬
+ <ð
+YYMAXTOKEN
+yys
+ =
+yyÇme
+[yychar];
+
+2994 ià(!
+yys
+) yys = "illegal-symbol";
+
+2995
+ `´štf
+("%sdebug: state %d,„eading %d (%s)\n",
+
+2996
+YYPREFIX
+,
+YYFINAL
+,
+yych¬
+,
+yys
+);
+
+3000 ià(
+yych¬
+ =ð0è
+yyacû±
+;
+
+3001 
+yyloÝ
+;
+
+3003 ià((
+yyn
+ =
+yygšdex
+[
+yym
+]è&& (yyÀ+ð
+yy¡©e
+) >= 0 &&
+
+3004
+yyn
+ <ð
+YYTABLESIZE
+ &&
+yycheck
+[yyn] =ð
+yy¡©e
+)
+
+3005
+yy¡©e
+ =
+yybË
+[
+yyn
+];
+
+3007
+yy¡©e
+ =
+yydgÙo
+[
+yym
+];
+
+3008 #ià
+YYDEBUG
+
+
+3009 ià(
+yydebug
+)
+
+3010
+ `´štf
+("%sdebug:‡á”„eduùiÚ, shiášg from s‹ %d \
+ s‹ %d\n",
+YYPREFIX
+, *
+yys¥
+,
+yy¡©e
+);
+
+3013 ià(
+yys¥
+ >ð
+yys¦im
+ &&
+ `yygrow¡ack
+())
+
+3015 
+yyovӾow
+;
+
+3017 *++
+yys¥
+ =
+yy¡©e
+;
+
+3018 *++
+yyv¥
+ =
+yyv®
+;
+
+3019 
+yyloÝ
+;
+
+3020
+yyovӾow
+:
+
+3021
+ `yy”rÜ
+("yacc stack overflow");
+
+3022
+yyabÜt
+:
+
+3024
+yyacû±
+:
+
+3026
+ }
+}
+
+ @perly.h
+
+1 #iâdeà
+YYERRCODE
+
+
+2 
+ #YYERRCODE
+ 256
+
+ )
+
+5 
+ #WORD
+ 257
+
+ )
+
+6 
+ #APPEND
+ 258
+
+ )
+
+7 
+ #OPEN
+ 259
+
+ )
+
+8 
+ #SSELECT
+ 260
+
+ )
+
+9 
+ #LOOPEX
+ 261
+
+ )
+
+10 
+ #USING
+ 262
+
+ )
+
+11 
+ #FORMAT
+ 263
+
+ )
+
+12 
+ #DO
+ 264
+
+ )
+
+13 
+ #SHIFT
+ 265
+
+ )
+
+14 
+ #PUSH
+ 266
+
+ )
+
+15 
+ #POP
+ 267
+
+ )
+
+16 
+ #LVALFUN
+ 268
+
+ )
+
+17 
+ #WHILE
+ 269
+
+ )
+
+18 
+ #UNTIL
+ 270
+
+ )
+
+19 
+ #IF
+ 271
+
+ )
+
+20 
+ #UNLESS
+ 272
+
+ )
+
+21 
+ #ELSE
+ 273
+
+ )
+
+22 
+ #ELSIF
+ 274
+
+ )
+
+23 
+ #CONTINUE
+ 275
+
+ )
+
+24 
+ #SPLIT
+ 276
+
+ )
+
+25 
+ #FLIST
+ 277
+
+ )
+
+26 
+ #FOR
+ 278
+
+ )
+
+27 
+ #FILOP
+ 279
+
+ )
+
+28 
+ #FILOP2
+ 280
+
+ )
+
+29 
+ #FILOP3
+ 281
+
+ )
+
+30 
+ #FILOP4
+ 282
+
+ )
+
+31 
+ #FILOP22
+ 283
+
+ )
+
+32 
+ #FILOP25
+ 284
+
+ )
+
+33 
+ #FUNC0
+ 285
+
+ )
+
+34 
+ #FUNC1
+ 286
+
+ )
+
+35 
+ #FUNC2
+ 287
+
+ )
+
+36 
+ #FUNC2x
+ 288
+
+ )
+
+37 
+ #FUNC3
+ 289
+
+ )
+
+38 
+ #FUNC4
+ 290
+
+ )
+
+39 
+ #FUNC5
+ 291
+
+ )
+
+40 
+ #HSHFUN
+ 292
+
+ )
+
+41 
+ #HSHFUN3
+ 293
+
+ )
+
+42 
+ #FLIST2
+ 294
+
+ )
+
+43 
+ #SUB
+ 295
+
+ )
+
+44 
+ #FILETEST
+ 296
+
+ )
+
+45 
+ #LOCAL
+ 297
+
+ )
+
+46 
+ #DELETE
+ 298
+
+ )
+
+47 
+ #RELOP
+ 299
+
+ )
+
+48 
+ #EQOP
+ 300
+
+ )
+
+49 
+ #MULOP
+ 301
+
+ )
+
+50 
+ #ADDOP
+ 302
+
+ )
+
+51 
+ #PACKAGE
+ 303
+
+ )
+
+52 
+ #AMPER
+ 304
+
+ )
+
+53 
+ #FORMLIST
+ 305
+
+ )
+
+54 
+ #REG
+ 306
+
+ )
+
+55 
+ #ARYLEN
+ 307
+
+ )
+
+56 
+ #ARY
+ 308
+
+ )
+
+57 
+ #HSH
+ 309
+
+ )
+
+58 
+ #STAR
+ 310
+
+ )
+
+59 
+ #SUBST
+ 311
+
+ )
+
+60 
+ #PATTERN
+ 312
+
+ )
+
+61 
+ #RSTRING
+ 313
+
+ )
+
+62 
+ #TRANS
+ 314
+
+ )
+
+63 
+ #LISTOP
+ 315
+
+ )
+
+64 
+ #DOTDOT
+ 316
+
+ )
+
+65 
+ #OROR
+ 317
+
+ )
+
+66 
+ #ANDAND
+ 318
+
+ )
+
+67 
+ #UNIOP
+ 319
+
+ )
+
+68 
+ #LS
+ 320
+
+ )
+
+69 
+ #RS
+ 321
+
+ )
+
+70 
+ #MATCH
+ 322
+
+ )
+
+71 
+ #NMATCH
+ 323
+
+ )
+
+72 
+ #UMINUS
+ 324
+
+ )
+
+73 
+ #POW
+ 325
+
+ )
+
+74 
+ #INC
+ 326
+
+ )
+
+75 
+ #DEC
+ 327
+
+ )
+
+77 
+ miv®
+;
+
+78 *
+ mcv®
+;
+
+79
+ARG
+ *
+ m¬g
+;
+
+80
+CMD
+ *
+ mcmdv®
+;
+
+81 
+compcmd
+
+ mcompv®
+;
+
+82
+STAB
+ *
+ m¡abv®
+;
+
+83
+FCMD
+ *
+ mfÜmv®
+;
+
+84 }
+ tYYSTYPE
+;
+
+85
+YYSTYPE
+
+yylv®
+;
+
+86
+YYSTYPE
+
+yylv®
+;
+
+ @regcomp.c
+
+53 
+ ~"EXTERN.h
+"
+
+54 
+ ~"³¾.h
+"
+
+55 
+ ~"INTERN.h
+"
+
+56 
+ ~"»gcomp.h
+"
+
+58 #ifdeà
+MSDOS
+
+
+59 #ià
+defšed
+(
+BUGGY_MSC6
+)
+
+61 #´agm¨
+Ýtimize
+("a",
+off
+)
+
+63 #´agm¨
+Ýtimize
+("w",
+ )
+
+67 #iâdeà
+STATIC
+
+
+68 
+ #STATIC
+ 
+
+ )
+
+71 
+ #ISMULT1
+(
+c
+è((cè=ð'*' || (cè=ð'+' || (cè=ð'?')
+
+ )
+
+72 
+ #ISMULT2
+(
+s
+) ((*s) == '*' || (*s) == '+' || (*s) == '?' || \
+
+73 ((*
+s
+è=ð'{' &&
+ `»gcu¾y
+(s)))
+
+ )
+
+74 
+ #META
+ "^$.[()|?+*\\"
+
+ )
+
+76 #ifdeà
+SPSTART
+
+
+77 #undeà
+SPSTART
+
+
+82 
+ #HASWIDTH
+ 01
+
+ )
+
+83 
+ #SIMPLE
+ 02
+
+ )
+
+84 
+ #SPSTART
+ 04
+
+ )
+
+85 
+ #WORST
+ 0
+
+ )
+
+90 *
+ g»g´ecomp
+;
+
+91 *
+ g»g·r£
+;
+
+92 *
+ g»gx’d
+;
+
+93 
+ g»gŬ
+;
+
+94 *
+ g»gcode
+;
+
+95 
+ g»gsize
+;
+
+96 
+ g»gfÞd
+;
+
+97 
+ g»g§wb¿ck‘
+;
+
+102
+STATIC
+ 
+»gcu¾y
+();
+
+103
+STATIC
+ *
+»g
+();
+
+104
+STATIC
+ *
+»gb¿nch
+();
+
+105
+STATIC
+ *
+»gp›û
+();
+
+106
+STATIC
+ *
+»g©om
+();
+
+107
+STATIC
+ *
+»gþass
+();
+
+108
+STATIC
+ *
+»gnode
+();
+
+109
+STATIC
+ *
+»gªode
+();
+
+110
+STATIC
+ 
+»gc
+();
+
+111
+STATIC
+ 
+»gš£¹
+();
+
+112
+STATIC
+ 
+»gž
+();
+
+113
+STATIC
+ 
+»gÝž
+();
+
+130
+»gexp
+ *
+
+131
+ $»gcomp
+(
+exp
+,
+x’d
+,
+fÞd
+)
+
+132 *
+exp
+;
+
+133 *
+x’d
+;
+
+134 
+fÞd
+;
+
+136 
+»gexp
+ *
+r
+;
+
+137 *
+sÿn
+;
+
+138 
+STR
+ *
+lÚgish
+;
+
+139
+STR
+ *
+lÚge¡
+;
+
+140 
+Ën
+;
+
+141 *
+fœ¡
+;
+
+142 
+æags
+;
+
+143 
+backish
+;
+
+144 
+backe¡
+;
+
+145 
+curback
+;
+
+146
+*
+ `§ãm®loc
+();
+
+147
+*
+ `§ve¡r
+();
+
+148 
+§w¶us
+ = 0;
+
+150 ià(
+exp
+ =ð
+NULL
+)
+
+151
+ `çl
+("NULL„egexp‡rgument");
+
+154
+»gfÞd
+ =
+fÞd
+;
+
+155
+»g·r£
+ =
+exp
+;
+
+156
+»gx’d
+ =
+x’d
+;
+
+157
+»g´ecomp
+ =
+ `n§ve¡r
+(
+exp
+,
+x’d
+-exp);
+
+158
+»g§wb¿ck‘
+ = 0;
+
+159
+»gŬ
+ = 1;
+
+160
+»gsize
+ = 0L;
+
+161
+»gcode
+ = &
+»gdummy
+;
+
+162
+ `»gc
+(
+MAGIC
+);
+
+163 ià(
+ `»g
+(0, &
+æags
+è=ð
+NULL
+) {
+
+164
+ `Saãä“
+(
+»g´ecomp
+);
+
+165
+»g´ecomp
+ =
+NuÎch
+;
+
+166 (
+NULL
+);
+
+170 ià(
+»gsize
+ >= 32767L)
+
+171
+ `FAIL
+("regexpoo big");
+
+174
+ `Newc
+(1001,
+r
+, (
+»gexp
+è+ ()
+»gsize
+, ,„egexp);
+
+175 ià(
+r
+ =ð
+NULL
+)
+
+176
+ `FAIL
+("regexp out of space");
+
+179 ià(
+»g§wb¿ck‘
+)
+
+180
+ `bcÝy
+(
+»g´ecomp
+,
+exp
+,
+x’d
+-exp);
+
+181
+r
+->
+´ecomp
+ =
+»g´ecomp
+;
+
+182
+r
+->
+subba£
+ =
+NULL
+;
+
+183
+»g·r£
+ =
+exp
+;
+
+184
+»gŬ
+ = 1;
+
+185
+»gcode
+ =
+r
+->
+´og¿m
+;
+
+186
+ `»gc
+(
+MAGIC
+);
+
+187 ià(
+ `»g
+(0, &
+æags
+è=ð
+NULL
+)
+
+188 (
+NULL
+);
+
+191
+r
+->
+»g¡¬t
+ =
+NuΡr
+;
+
+192
+r
+->
+»gªch
+ = 0;
+
+193
+r
+->
+»gmu¡
+ =
+NuΡr
+;
+
+194
+r
+->
+»gback
+ = -1;
+
+195
+r
+->
+»g¡þass
+ =
+NuÎch
+;
+
+196
+sÿn
+ =
+r
+->
+´og¿m
++1;
+
+197 ià(
+ `OP
+(
+ `»gÃxt
+(
+sÿn
+)è=ð
+END
+) {
+
+198
+sÿn
+ =
+ `NEXTOPER
+(scan);
+
+200
+fœ¡
+ =
+sÿn
+;
+
+201 
+ `OP
+(
+fœ¡
+è=ð
+OPEN
+ ||
+
+202 (
+ `OP
+(
+fœ¡
+è=ð
+BRANCH
+ && OP(
+ `»gÃxt
+(first)) != BRANCH) ||
+
+203 (
+ `OP
+(
+fœ¡
+è=ð
+PLUS
+) ||
+
+204 (
+ `OP
+(
+fœ¡
+è=ð
+CURLY
+ &&
+ `ARG1
+(first) > 0) ) {
+
+205 ià(
+ `OP
+(
+fœ¡
+è=ð
+PLUS
+)
+
+206
+§w¶us
+ = 2;
+
+208
+fœ¡
+ +ð
+»g¬gËn
+[
+ `OP
+(first)];
+
+209
+fœ¡
+ =
+ `NEXTOPER
+(first);
+
+213 ià(
+ `OP
+(
+fœ¡
+è=ð
+EXACTLY
+) {
+
+214
+r
+->
+»g¡¬t
+ =
+
+215
+ `¡r_make
+(
+ `OPERAND
+(
+fœ¡
+)+1,*OPERAND(first));
+
+216 ià(
+r
+->
+»g¡¬t
+->
+¡r_cur
+ > !(
+§w¡udy
+|
+fÞd
+))
+
+217
+ `fbmcompže
+(
+r
+->
+»g¡¬t
+,
+fÞd
+);
+
+219 ià((
+exp
+ =
+ `šdex
+(
+sim¶e
+,
+ `OP
+(
+fœ¡
+))) &&ƒxp > simple)
+
+220
+r
+->
+»g¡þass
+ =
+fœ¡
+;
+
+221 ià(
+ `OP
+(
+fœ¡
+è=ð
+BOUND
+ || OP(fœ¡è=ð
+NBOUND
+)
+
+222
+r
+->
+»g¡þass
+ =
+fœ¡
+;
+
+223 ià(
+ `OP
+(
+fœ¡
+è=ð
+BOL
+ ||
+
+224 (
+ `OP
+(
+fœ¡
+è=ð
+STAR
+ && OP(
+ `NEXTOPER
+(fœ¡)è=ð
+ANY
+) )
+
+225
+r
+->
+»gªch
+ = 1;
+
+226
+r
+->
+»gªch
+ |ð
+§w¶us
+;
+
+228 #ifdeà
+DEBUGGING
+
+
+229 ià(
+debug
+ & 512)
+
+230
+ `årštf
+(
+¡d”r
+,"first %d‚ext %d offset %d\n",
+
+231
+ `OP
+(
+fœ¡
+), OP(
+ `NEXTOPER
+(fœ¡)), fœ¡ -
+sÿn
+);
+
+244
+lÚgish
+ =
+ `¡r_make
+("",0);
+
+245
+lÚge¡
+ =
+ `¡r_make
+("",0);
+
+246
+Ën
+ = 0;
+
+247
+curback
+ = 0;
+
+248
+backish
+ = 0;
+
+249
+backe¡
+ = 0;
+
+250 
+ `OP
+(
+sÿn
+è!ð
+END
+) {
+
+251 ià(
+ `OP
+(
+sÿn
+è=ð
+BRANCH
+) {
+
+252 ià(
+ `OP
+(
+ `»gÃxt
+(
+sÿn
+)è=ð
+BRANCH
+) {
+
+253
+curback
+ = -30000;
+
+254 
+ `OP
+(
+sÿn
+è=ð
+BRANCH
+)
+
+255
+sÿn
+ =
+ `»gÃxt
+(scan);
+
+258
+sÿn
+ =
+ `NEXTOPER
+(scan);
+
+260 ià(
+ `OP
+(
+sÿn
+è=ð
+EXACTLY
+) {
+
+261 *
+t
+;
+
+263
+fœ¡
+ =
+sÿn
+;
+
+264 
+ `OP
+(
+t
+ =
+ `»gÃxt
+(
+sÿn
+)è=ð
+CLOSE
+)
+
+265
+sÿn
+ =
+t
+;
+
+266 ià(
+curback
+ -
+backish
+ =ð
+Ën
+) {
+
+267
+ `¡r_nÿt
+(
+lÚgish
+,
+ `OPERAND
+(
+fœ¡
+)+1,
+
+268 *
+ `OPERAND
+(
+fœ¡
+));
+
+269
+Ën
+ +ð*
+ `OPERAND
+(
+fœ¡
+);
+
+270
+curback
+ +ð*
+ `OPERAND
+(
+fœ¡
+);
+
+271
+fœ¡
+ =
+ `»gÃxt
+(
+sÿn
+);
+
+273 ià(*
+ `OPERAND
+(
+fœ¡
+è>ð
+Ën
+ + (
+curback
+ >= 0)) {
+
+274
+Ën
+ = *
+ `OPERAND
+(
+fœ¡
+);
+
+275
+ `¡r_n£t
+(
+lÚgish
+,
+ `OPERAND
+(
+fœ¡
+)+1,
+Ën
+);
+
+276
+backish
+ =
+curback
+;
+
+277
+curback
+ +ð
+Ën
+;
+
+278
+fœ¡
+ =
+ `»gÃxt
+(
+sÿn
+);
+
+281
+curback
+ +ð*
+ `OPERAND
+(
+fœ¡
+);
+
+283 ià(
+ `šdex
+(
+v¬›s
+,
+ `OP
+(
+sÿn
+))) {
+
+284
+curback
+ = -30000;
+
+285
+Ën
+ = 0;
+
+286 ià(
+lÚgish
+->
+¡r_cur
+ >
+lÚge¡
+->str_cur) {
+
+287
+ `¡r_s£t
+(
+lÚge¡
+,
+lÚgish
+);
+
+288
+backe¡
+ =
+backish
+;
+
+290
+ `¡r_n£t
+(
+lÚgish
+,"",0);
+
+292 ià(
+ `šdex
+(
+sim¶e
+,
+ `OP
+(
+sÿn
+))) {
+
+293
+curback
+++;
+
+294
+Ën
+ = 0;
+
+295 ià(
+lÚgish
+->
+¡r_cur
+ >
+lÚge¡
+->str_cur) {
+
+296
+ `¡r_s£t
+(
+lÚge¡
+,
+lÚgish
+);
+
+297
+backe¡
+ =
+backish
+;
+
+299
+ `¡r_n£t
+(
+lÚgish
+,"",0);
+
+301
+sÿn
+ =
+ `»gÃxt
+(scan);
+
+306 ià(
+lÚgish
+->
+¡r_cur
+ + (
+ `OP
+(
+fœ¡
+è=ð
+EOL
+è>
+lÚge¡
+->str_cur) {
+
+307
+ `¡r_s£t
+(
+lÚge¡
+,
+lÚgish
+);
+
+308
+backe¡
+ =
+backish
+;
+
+311
+ `¡r_n£t
+(
+lÚgish
+,"",0);
+
+312 ià(
+lÚge¡
+->
+¡r_cur
+
+
+314 (!
+r
+->
+»g¡¬t
+
+
+316 !
+ `fbmš¡r
+(
+r
+->
+»g¡¬t
+->
+¡r_±r
+,
+
+317
+r
+->
+»g¡¬t
+->
+¡r_±r
+ +„->»g¡¬t->
+¡r_cur
+,
+
+318
+lÚge¡
+)
+
+322
+r
+->
+»gmu¡
+ =
+lÚge¡
+;
+
+323 ià(
+backe¡
+ < 0)
+
+324
+backe¡
+ = -1;
+
+325
+r
+->
+»gback
+ =
+backe¡
+;
+
+326 ià(
+lÚge¡
+->
+¡r_cur
+
+
+327 > !(
+§w¡udy
+ ||
+fÞd
+ ||
+ `OP
+(
+fœ¡
+è=ð
+EOL
+) )
+
+328
+ `fbmcompže
+(
+r
+->
+»gmu¡
+,
+fÞd
+);
+
+329
+r
+->
+»gmu¡
+->
+¡r_u
+.
+¡r_u£ful
+ = 100;
+
+330 ià(
+ `OP
+(
+fœ¡
+è=ð
+EOL
+ &&
+lÚgish
+->
+¡r_cur
+)
+
+331
+r
+->
+»gmu¡
+->
+¡r_pok
+ |ð
+SP_TAIL
+;
+
+334
+ `¡r_ä“
+(
+lÚge¡
+);
+
+335
+lÚge¡
+ =
+NuΡr
+;
+
+337
+ `¡r_ä“
+(
+lÚgish
+);
+
+340
+r
+->
+do_fÞdšg
+ =
+fÞd
+;
+
+341
+r
+->
+Ŭ’s
+ =
+»gŬ
+ - 1;
+
+342
+ `New
+(1002,
+r
+->
+¡¬
+,
+»gŬ
+, *);
+
+343
+ `New
+(1002,
+r
+->
+’dp
+,
+»gŬ
+, *);
+
+344 #ifdeà
+DEBUGGING
+
+
+345 ià(
+debug
+ & 512)
+
+346
+ `»gdump
+(
+r
+);
+
+348 (
+r
+);
+
+349
+ }
+}
+
+361
+ $»g
+(
+·»n
+,
+æagp
+)
+
+362 
+·»n
+;
+
+363 *
+æagp
+;
+
+365 *
+»t
+;
+
+366 *
+br
+;
+
+367 *
+’d”
+;
+
+368 
+·ºo
+;
+
+369 
+æags
+;
+
+371 *
+æagp
+ =
+HASWIDTH
+;
+
+374 ià(
+·»n
+) {
+
+375
+·ºo
+ =
+»gŬ
+;
+
+376
+»gŬ
+++;
+
+377
+»t
+ =
+ `»gªode
+(
+OPEN
+,
+·ºo
+);
+
+379
+»t
+ =
+NULL
+;
+
+382
+br
+ =
+ `»gb¿nch
+(&
+æags
+);
+
+383 ià(
+br
+ =ð
+NULL
+)
+
+384 (
+NULL
+);
+
+385 ià(
+»t
+ !ð
+NULL
+)
+
+386
+ `»gž
+(
+»t
+,
+br
+);
+
+388
+»t
+ =
+br
+;
+
+389 ià(!(
+æags
+&
+HASWIDTH
+))
+
+390 *
+æagp
+ &ð~
+HASWIDTH
+;
+
+391 *
+æagp
+ |ð
+æags
+&
+SPSTART
+;
+
+392 *
+»g·r£
+ == '|') {
+
+393
+»g·r£
+++;
+
+394
+br
+ =
+ `»gb¿nch
+(&
+æags
+);
+
+395 ià(
+br
+ =ð
+NULL
+)
+
+396 (
+NULL
+);
+
+397
+ `»gž
+(
+»t
+,
+br
+);
+
+398 ià(!(
+æags
+&
+HASWIDTH
+))
+
+399 *
+æagp
+ &ð~
+HASWIDTH
+;
+
+400 *
+æagp
+ |ð
+æags
+&
+SPSTART
+;
+
+404 ià(
+·»n
+)
+
+405
+’d”
+ =
+ `»gªode
+(
+CLOSE
+,
+·ºo
+);
+
+407
+’d”
+ =
+ `»gnode
+(
+END
+);
+
+408
+ `»gž
+(
+»t
+,
+’d”
+);
+
+411 
+br
+ =
+»t
+; b¸!ð
+NULL
+; b¸ð
+ `»gÃxt
+(br))
+
+412
+ `»gÝž
+(
+br
+,
+’d”
+);
+
+415 ià(
+·»n
+ && *
+»g·r£
+++ != ')') {
+
+416
+ `FAIL
+("unmatched () in„egexp");
+
+417 } ià(!
+·»n
+ &&
+»g·r£
+ <
+»gx’d
+) {
+
+418 ià(*
+»g·r£
+ == ')') {
+
+419
+ `FAIL
+("unmatched () in„egexp");
+
+421
+ `FAIL
+("junk onƒnd of„egexp");
+
+425 (
+»t
+);
+
+426
+ }
+}
+
+434
+ $»gb¿nch
+(
+æagp
+)
+
+435 *
+æagp
+;
+
+437 *
+»t
+;
+
+438 *
+chaš
+;
+
+439 *
+Ï‹¡
+;
+
+440 
+æags
+;
+
+442 *
+æagp
+ =
+WORST
+;
+
+444
+»t
+ =
+ `»gnode
+(
+BRANCH
+);
+
+445
+chaš
+ =
+NULL
+;
+
+446 
+»g·r£
+ <
+»gx’d
+ && *regparse != '|' && *regparse != ')') {
+
+447
+Ï‹¡
+ =
+ `»gp›û
+(&
+æags
+);
+
+448 ià(
+Ï‹¡
+ =ð
+NULL
+)
+
+449 (
+NULL
+);
+
+450 *
+æagp
+ |ð
+æags
+&
+HASWIDTH
+;
+
+451 ià(
+chaš
+ =ð
+NULL
+)
+
+452 *
+æagp
+ |ð
+æags
+&
+SPSTART
+;
+
+454
+ `»gž
+(
+chaš
+,
+Ï‹¡
+);
+
+455
+chaš
+ =
+Ï‹¡
+;
+
+457 ià(
+chaš
+ =ð
+NULL
+)
+
+458 (è
+ `»gnode
+(
+NOTHING
+);
+
+460 (
+»t
+);
+
+461
+ }
+}
+
+473
+ $»gp›û
+(
+æagp
+)
+
+474 *
+æagp
+;
+
+476 *
+»t
+;
+
+477 
+;
+
+478 *
+Ãxt
+;
+
+479 
+æags
+;
+
+480 *
+Üig·r£
+ =
+»g·r£
+;
+
+481 
+ÜigŬ
+ =
+»gŬ
+;
+
+482 *
+max
+;
+
+483 
+™”
+;
+
+484 
+ch
+;
+
+486
+»t
+ =
+ `»g©om
+(&
+æags
+);
+
+487 ià(
+»t
+ =ð
+NULL
+)
+
+488 (
+NULL
+);
+
+490
+ = *
+»g·r£
+;
+
+500 ià(
+ =ð'{' &&
+ `»gcu¾y
+(
+»g·r£
+)) {
+
+501
+Ãxt
+ =
+»g·r£
+ + 1;
+
+502
+max
+ =
+NuÎch
+;
+
+503 
+ `isdig™
+(*
+Ãxt
+) || *next == ',') {
+
+504 ià(*
+Ãxt
+ == ',') {
+
+505 ià(
+max
+)
+
+508
+max
+ =
+Ãxt
+;
+
+510
+Ãxt
+++;
+
+512 ià(*
+Ãxt
+ == '}') {
+
+513 ià(!
+max
+)
+
+514
+max
+ =
+Ãxt
+;
+
+515
+»g·r£
+++;
+
+516
+™”
+ =
+ `©oi
+(
+»g·r£
+);
+
+517 ià(
+æags
+&
+SIMPLE
+) {
+
+518 
+tmp
+;
+
+520
+ `»gš£¹
+(
+CURLY
+,
+»t
+);
+
+521 ià(
+™”
+ > 0)
+
+522 *
+æagp
+ = (
+WORST
+|
+HASWIDTH
+);
+
+523 ià(*
+max
+ == ',')
+
+524
+max
+++;
+
+526
+max
+ =
+»g·r£
+;
+
+527
+tmp
+ =
+ `©oi
+(
+max
+);
+
+528 ià(
+tmp
+ &&m°<
+™”
+)
+
+529
+ `çl
+("Can't do {n,m} with‚ > m");
+
+530 ià(
+»gcode
+ !ð&
+»gdummy
+) {
+
+531 #ifdeà
+REGALIGN
+
+
+532 *(*)(
+»t
++3èð
+™”
+;
+
+533 *(*)(
+»t
++5èð
+tmp
+;
+
+535
+»t
+[3] =
+™”
+ >> 8;„et[4] = iter & 0377;
+
+536
+»t
+[5] =
+tmp
+ >> 8;„et[6] =mp & 0377;
+
+539
+»g·r£
+ =
+Ãxt
+;
+
+540 
+á_check
+;
+
+542
+»g§wb¿ck‘
+++;
+
+543 ià(
+™”
+ > 0) {
+
+544
+ch
+ = *
+max
+;
+
+545
+ `¥rštf
+(
+»g·r£
+,"%.*d",
+max
+-»g·r£,
+™”
+ - 1);
+
+546 *
+max
+ =
+ch
+;
+
+547 ià(*
+max
+ == ',' && max[1] != '}') {
+
+548 ià(
+ `©oi
+(
+max
++1) <= 0)
+
+549
+ `çl
+("Can't do {n,m} with‚ > m");
+
+550
+ch
+ = *
+Ãxt
+;
+
+551
+ `¥rštf
+(
+max
++1,"%.*d",
+Ãxt
+-(max+1),
+ `©oi
+(max+1) - 1);
+
+552 *
+Ãxt
+ =
+ch
+;
+
+554 ià(
+™”
+ !ð1 || *
+max
+ == ',') {
+
+555
+»g·r£
+ =
+Üig·r£
+;
+
+556
+»gŬ
+ =
+ÜigŬ
+;
+
+559
+»g·r£
+ =
+Ãxt
+;
+
+560 
+á_check
+;
+
+562 *
+æagp
+ =
+æags
+;
+
+563 
+»t
+;
+
+565 ià(*
+max
+ == ',') {
+
+566
+max
+++;
+
+567
+™”
+ =
+ `©oi
+(
+max
+);
+
+568 ià(
+max
+ =ð
+Ãxt
+) {
+
+569
+»g·r£
+ =
+Ãxt
+;
+
+570
+ = '*';
+
+572 ià(
+™”
+ > 0) {
+
+573
+ = '?';
+
+574
+ch
+ = *
+Ãxt
+;
+
+575
+ `¥rštf
+(
+max
+,"%.*d",
+Ãxt
+-max,
+™”
+ - 1);
+
+576 *
+Ãxt
+ =
+ch
+;
+
+577 ià(
+™”
+ == 1)
+
+578
+»g·r£
+ =
+Ãxt
+;
+
+580
+»g·r£
+ =
+Üig·r£
+ - 1;
+
+581
+»gŬ
+ =
+ÜigŬ
+;
+
+585
+ `çl
+("Can't do {n,0}");
+
+588
+ `çl
+("Can't do {0}");
+
+592 ià(!
+ `ISMULT1
+(
+)) {
+
+593 *
+æagp
+ =
+æags
+;
+
+594 (
+»t
+);
+
+597 ià(!(
+æags
+&
+HASWIDTH
+è&&
+ != '?')
+
+598
+ `FAIL
+("regexp *+ operand could beƒmpty");
+
+599 *
+æagp
+ = (
+ !ð'+'è? (
+WORST
+|
+SPSTART
+è: (WORST|
+HASWIDTH
+);
+
+601 ià(
+ =ð'*' && (
+æags
+&
+SIMPLE
+))
+
+602
+ `»gš£¹
+(
+STAR
+,
+»t
+);
+
+603 ià(
+ == '*') {
+
+605
+ `»gš£¹
+(
+BRANCH
+,
+»t
+);
+
+606
+ `»gÝž
+(
+»t
+,
+ `»gnode
+(
+BACK
+));
+
+607
+ `»gÝž
+(
+»t
+,„et);
+
+608
+ `»gž
+(
+»t
+,
+ `»gnode
+(
+BRANCH
+));
+
+609
+ `»gž
+(
+»t
+,
+ `»gnode
+(
+NOTHING
+));
+
+610 } ià(
+ =ð'+' && (
+æags
+&
+SIMPLE
+))
+
+611
+ `»gš£¹
+(
+PLUS
+,
+»t
+);
+
+612 ià(
+ == '+') {
+
+614
+Ãxt
+ =
+ `»gnode
+(
+BRANCH
+);
+
+615
+ `»gž
+(
+»t
+,
+Ãxt
+);
+
+616
+ `»gž
+(
+ `»gnode
+(
+BACK
+),
+»t
+);
+
+617
+ `»gž
+(
+Ãxt
+,
+ `»gnode
+(
+BRANCH
+));
+
+618
+ `»gž
+(
+»t
+,
+ `»gnode
+(
+NOTHING
+));
+
+619 } ià(
+ == '?') {
+
+621
+ `»gš£¹
+(
+BRANCH
+,
+»t
+);
+
+622
+ `»gž
+(
+»t
+,
+ `»gnode
+(
+BRANCH
+));
+
+623
+Ãxt
+ =
+ `»gnode
+(
+NOTHING
+);
+
+624
+ `»gž
+(
+»t
+,
+Ãxt
+);
+
+625
+ `»gÝž
+(
+»t
+,
+Ãxt
+);
+
+627
+á_check
+:
+
+628
+»g·r£
+++;
+
+629 ià(
+ `ISMULT2
+(
+»g·r£
+))
+
+630
+ `FAIL
+("nested *?+ in„egexp");
+
+632 (
+»t
+);
+
+633
+ }
+}
+
+646
+ $»g©om
+(
+æagp
+)
+
+647 *
+æagp
+;
+
+649 *
+»t
+;
+
+650 
+æags
+;
+
+652 *
+æagp
+ =
+WORST
+;
+
+654 *
+»g·r£
+++) {
+
+656
+»t
+ =
+ `»gnode
+(
+BOL
+);
+
+659
+»t
+ =
+ `»gnode
+(
+EOL
+);
+
+662
+»t
+ =
+ `»gnode
+(
+ANY
+);
+
+663 *
+æagp
+ |ð
+HASWIDTH
+|
+SIMPLE
+;
+
+666
+»t
+ =
+ `»gþass
+();
+
+667 *
+æagp
+ |ð
+HASWIDTH
+|
+SIMPLE
+;
+
+670
+»t
+ =
+ `»g
+(1, &
+æags
+);
+
+671 ià(
+»t
+ =ð
+NULL
+)
+
+672 (
+NULL
+);
+
+673 *
+æagp
+ |ð
+æags
+&(
+HASWIDTH
+|
+SPSTART
+);
+
+677
+ `FAIL
+("internal urp in„egexp");
+
+682
+ `FAIL
+("?+* follows‚othing in„egexp");
+
+685 *
+»g·r£
+) {
+
+687
+»t
+ =
+ `»gnode
+(
+ALNUM
+);
+
+688 *
+æagp
+ |ð
+HASWIDTH
+|
+SIMPLE
+;
+
+689
+»g·r£
+++;
+
+692
+»t
+ =
+ `»gnode
+(
+NALNUM
+);
+
+693 *
+æagp
+ |ð
+HASWIDTH
+|
+SIMPLE
+;
+
+694
+»g·r£
+++;
+
+697
+»t
+ =
+ `»gnode
+(
+BOUND
+);
+
+698 *
+æagp
+ |ð
+SIMPLE
+;
+
+699
+»g·r£
+++;
+
+702
+»t
+ =
+ `»gnode
+(
+NBOUND
+);
+
+703 *
+æagp
+ |ð
+SIMPLE
+;
+
+704
+»g·r£
+++;
+
+707
+»t
+ =
+ `»gnode
+(
+SPACE
+);
+
+708 *
+æagp
+ |ð
+HASWIDTH
+|
+SIMPLE
+;
+
+709
+»g·r£
+++;
+
+712
+»t
+ =
+ `»gnode
+(
+NSPACE
+);
+
+713 *
+æagp
+ |ð
+HASWIDTH
+|
+SIMPLE
+;
+
+714
+»g·r£
+++;
+
+717
+»t
+ =
+ `»gnode
+(
+DIGIT
+);
+
+718 *
+æagp
+ |ð
+HASWIDTH
+|
+SIMPLE
+;
+
+719
+»g·r£
+++;
+
+722
+»t
+ =
+ `»gnode
+(
+NDIGIT
+);
+
+723 *
+æagp
+ |ð
+HASWIDTH
+|
+SIMPLE
+;
+
+724
+»g·r£
+++;
+
+735 
+defch¬
+;
+
+739 
+num
+ =
+ `©oi
+(
+»g·r£
+);
+
+741 ià(
+num
+ > 9 &&‚um >ð
+»gŬ
+)
+
+742 
+defch¬
+;
+
+744
+»t
+ =
+ `»gªode
+(
+REF
+,
+num
+);
+
+745 
+ `i§scii
+(*
+»g·r£
+è&&
+ `isdig™
+(*regparse))
+
+746
+»g·r£
+++;
+
+747 *
+æagp
+ |ð
+SIMPLE
+;
+
+752 ià(
+»g·r£
+ >ð
+»gx’d
+)
+
+753
+ `FAIL
+("trailing \\ in„egexp");
+
+756 
+defch¬
+;
+
+760 
+Ën
+;
+
+761 
+’d”
+;
+
+762 *
+p
+;
+
+763 *
+Þdp
+;
+
+764 
+numËn
+;
+
+766
+defch¬
+:
+
+767
+»t
+ =
+ `»gnode
+(
+EXACTLY
+);
+
+768
+ `»gc
+(0);
+
+769 
+Ën
+=0,
+p
+=
+»g·r£
+-1;
+
+770
+Ën
+ < 127 &&
+p
+ <
+»gx’d
+;
+
+771
+Ën
+++)
+
+773
+Þdp
+ =
+p
+;
+
+774 *
+p
+) {
+
+782 
+loÝdÚe
+;
+
+784 *++
+p
+) {
+
+793 --
+p
+;
+
+794 
+loÝdÚe
+;
+
+796
+’d”
+ = '\n';
+
+797
+p
+++;
+
+800
+’d”
+ = '\r';
+
+801
+p
+++;
+
+804
+’d”
+ = '\t';
+
+805
+p
+++;
+
+808
+’d”
+ = '\f';
+
+809
+p
+++;
+
+812
+’d”
+ = '\033';
+
+813
+p
+++;
+
+816
+’d”
+ = '\007';
+
+817
+p
+++;
+
+820
+’d”
+ =
+ `sÿnhex
+(++
+p
+, 2, &
+numËn
+);
+
+821
+p
+ +ð
+numËn
+;
+
+824
+p
+++;
+
+825
+’d”
+ = *
+p
+++;
+
+826 ià(
+ `i¦ow”
+(
+’d”
+))
+
+827
+’d”
+ =
+ `touµ”
+(ender);
+
+828
+’d”
+ ^= 64;
+
+832 ià(*
+p
+ == '0' ||
+
+833 (
+ `isdig™
+(
+p
+[1]è&&
+ `©oi
+Õè>ð
+»gŬ
+) ) {
+
+834
+’d”
+ =
+ `sÿnoù
+(
+p
+, 3, &
+numËn
+);
+
+835
+p
+ +ð
+numËn
+;
+
+838 --
+p
+;
+
+839 
+loÝdÚe
+;
+
+843 ià(
+p
+ >ð
+»gx’d
+)
+
+844
+ `FAIL
+("trailing \\ in„egexp");
+
+847
+’d”
+ = *
+p
+++;
+
+852
+’d”
+ = *
+p
+++;
+
+855 ià(
+»gfÞd
+ &&
+ `isuµ”
+(
+’d”
+))
+
+856
+’d”
+ =
+ `tÞow”
+(ender);
+
+857 ià(
+ `ISMULT2
+(
+p
+)) {
+
+858 ià(
+Ën
+)
+
+859
+p
+ =
+Þdp
+;
+
+861
+Ën
+++;
+
+862
+ `»gc
+(
+’d”
+);
+
+866
+ `»gc
+(
+’d”
+);
+
+868
+loÝdÚe
+:
+
+869
+»g·r£
+ =
+p
+;
+
+870 ià(
+Ën
+ <= 0)
+
+871
+ `FAIL
+("internal disaster in„egexp");
+
+872 *
+æagp
+ |ð
+HASWIDTH
+;
+
+873 ià(
+Ën
+ == 1)
+
+874 *
+æagp
+ |ð
+SIMPLE
+;
+
+875 ià(
+»gcode
+ !ð&
+»gdummy
+)
+
+876 *
+ `OPERAND
+(
+»t
+èð
+Ën
+;
+
+877
+ `»gc
+('\0');
+
+882 (
+»t
+);
+
+883
+ }
+}
+
+886
+ $»g£t
+(
+b™s
+,
+def
+,
+c
+)
+
+887 *
+b™s
+;
+
+888 
+def
+;
+
+889 
+c
+;
+
+891 ià(
+»gcode
+ =ð&
+»gdummy
+)
+
+893
+c
+ &= 255;
+
+894 ià(
+def
+)
+
+895
+b™s
+[
+c
+ >> 3] &= ~(1 << (c & 7));
+
+897
+b™s
+[
+c
+ >> 3] |= (1 << (c & 7));
+
+898
+ }
+}
+
+901
+ $»gþass
+()
+
+903 *
+b™s
+;
+
+904 
+þass
+;
+
+905 
+Ï¡þass
+;
+
+906 
+¿nge
+ = 0;
+
+907 *
+»t
+;
+
+908 
+def
+;
+
+909 
+numËn
+;
+
+911
+»t
+ =
+ `»gnode
+(
+ANYOF
+);
+
+912 ià(*
+»g·r£
+ == '^') {
+
+913
+»g·r£
+++;
+
+914
+def
+ = 0;
+
+916
+def
+ = 255;
+
+918
+b™s
+ =
+»gcode
+;
+
+919 
+þass
+ = 0; class < 32; class++)
+
+920
+ `»gc
+(
+def
+);
+
+921 ià(*
+»g·r£
+ == ']' || *regparse == '-')
+
+922 
+skcÚd
+;
+
+923 
+»g·r£
+ <
+»gx’d
+ && *regparse != ']') {
+
+924
+skcÚd
+:
+
+925
+þass
+ =
+ `UCHARAT
+(
+»g·r£
+++);
+
+926 ià(
+þass
+ == '\\') {
+
+927
+þass
+ =
+ `UCHARAT
+(
+»g·r£
+++);
+
+928 
+þass
+) {
+
+930 
+þass
+ = 'a'; class <= 'z'; class++)
+
+931
+ `»g£t
+(
+b™s
+,
+def
+,
+þass
+);
+
+932 
+þass
+ = 'A'; class <= 'Z'; class++)
+
+933
+ `»g£t
+(
+b™s
+,
+def
+,
+þass
+);
+
+934 
+þass
+ = '0'; class <= '9'; class++)
+
+935
+ `»g£t
+(
+b™s
+,
+def
+,
+þass
+);
+
+936
+ `»g£t
+(
+b™s
+,
+def
+,'_');
+
+937
+Ï¡þass
+ = 1234;
+
+940
+ `»g£t
+(
+b™s
+,
+def
+,' ');
+
+941
+ `»g£t
+(
+b™s
+,
+def
+,'\t');
+
+942
+ `»g£t
+(
+b™s
+,
+def
+,'\r');
+
+943
+ `»g£t
+(
+b™s
+,
+def
+,'\f');
+
+944
+ `»g£t
+(
+b™s
+,
+def
+,'\n');
+
+945
+Ï¡þass
+ = 1234;
+
+948 
+þass
+ = '0'; class <= '9'; class++)
+
+949
+ `»g£t
+(
+b™s
+,
+def
+,
+þass
+);
+
+950
+Ï¡þass
+ = 1234;
+
+953
+þass
+ = '\n';
+
+956
+þass
+ = '\r';
+
+959
+þass
+ = '\t';
+
+962
+þass
+ = '\f';
+
+965
+þass
+ = '\b';
+
+968
+þass
+ = '\033';
+
+971
+þass
+ = '\007';
+
+974
+þass
+ =
+ `sÿnhex
+(
+»g·r£
+, 2, &
+numËn
+);
+
+975
+»g·r£
+ +ð
+numËn
+;
+
+978
+þass
+ = *
+»g·r£
+++;
+
+979 ià(
+ `i¦ow”
+(
+þass
+))
+
+980
+þass
+ =
+ `touµ”
+(class);
+
+981
+þass
+ ^= 64;
+
+985
+þass
+ =
+ `sÿnoù
+(--
+»g·r£
+, 3, &
+numËn
+);
+
+986
+»g·r£
+ +ð
+numËn
+;
+
+990 ià(
+¿nge
+) {
+
+991 ià(
+Ï¡þass
+ >
+þass
+)
+
+992
+ `FAIL
+("invalid []„ange in„egexp");
+
+993
+¿nge
+ = 0;
+
+996
+Ï¡þass
+ =
+þass
+;
+
+997 ià(*
+»g·r£
+ =ð'-' &&„eg·r£+1 <
+»gx’d
+ &&
+
+998
+»g·r£
+[1] != ']') {
+
+999
+»g·r£
+++;
+
+1000
+¿nge
+ = 1;
+
+1004  ;
+Ï¡þass
+ <ð
+þass
+;†astclass++) {
+
+1005
+ `»g£t
+(
+b™s
+,
+def
+,
+Ï¡þass
+);
+
+1006 ià(
+»gfÞd
+ &&
+ `isuµ”
+(
+Ï¡þass
+))
+
+1007
+ `»g£t
+(
+b™s
+,
+def
+,
+ `tÞow”
+(
+Ï¡þass
+));
+
+1009
+Ï¡þass
+ =
+þass
+;
+
+1011 ià(*
+»g·r£
+ != ']')
+
+1012
+ `FAIL
+("unmatched [] in„egexp");
+
+1013
+»g·r£
+++;
+
+1014 
+»t
+;
+
+1015
+ }
+}
+
+1021
+ $»gnode
+(
+)
+
+1022 
+;
+
+1024 *
+»t
+;
+
+1025 *
+±r
+;
+
+1027
+»t
+ =
+»gcode
+;
+
+1028 ià(
+»t
+ =ð&
+»gdummy
+) {
+
+1029 #ifdeà
+REGALIGN
+
+
+1030 ià(!(
+»gsize
+ & 1))
+
+1031
+»gsize
+++;
+
+1033
+»gsize
+ += 3;
+
+1034 (
+»t
+);
+
+1037 #ifdeà
+REGALIGN
+
+
+1038 #iâdeà
+lšt
+
+
+1039 ià(!(()
+»t
+ & 1))
+
+1040 *
+»t
+++ = 127;
+
+1043
+±r
+ =
+»t
+;
+
+1044 *
+±r
+++ =
+;
+
+1045 *
+±r
+++ = '\0';
+
+1046 *
+±r
+++ = '\0';
+
+1047
+»gcode
+ =
+±r
+;
+
+1049 (
+»t
+);
+
+1050
+ }
+}
+
+1056
+ $»gªode
+(
+,
+¬g
+)
+
+1057 
+;
+
+1058 
+¬g
+;
+
+1060 *
+»t
+;
+
+1061 *
+±r
+;
+
+1063
+»t
+ =
+»gcode
+;
+
+1064 ià(
+»t
+ =ð&
+»gdummy
+) {
+
+1065 #ifdeà
+REGALIGN
+
+
+1066 ià(!(
+»gsize
+ & 1))
+
+1067
+»gsize
+++;
+
+1069
+»gsize
+ += 5;
+
+1070 (
+»t
+);
+
+1073 #ifdeà
+REGALIGN
+
+
+1074 #iâdeà
+lšt
+
+
+1075 ià(!(()
+»t
+ & 1))
+
+1076 *
+»t
+++ = 127;
+
+1079
+±r
+ =
+»t
+;
+
+1080 *
+±r
+++ =
+;
+
+1081 *
+±r
+++ = '\0';
+
+1082 *
+±r
+++ = '\0';
+
+1083 #ifdeà
+REGALIGN
+
+
+1084 *(*)(
+»t
++3èð
+¬g
+;
+
+1086
+»t
+[3] =
+¬g
+ >> 8;„et[4] =‡rg & 0377;
+
+1088
+±r
+ += 2;
+
+1089
+»gcode
+ =
+±r
+;
+
+1091 (
+»t
+);
+
+1092
+ }
+}
+
+1098
+ $»gc
+(
+b
+)
+
+1099 
+b
+;
+
+1101 ià(
+»gcode
+ !ð&
+»gdummy
+)
+
+1102 *
+»gcode
+++ =
+b
+;
+
+1104
+»gsize
+++;
+
+1105
+ }
+}
+
+1113
+ $»gš£¹
+(
+,
+Ýnd
+)
+
+1114 
+;
+
+1115 *
+Ýnd
+;
+
+1117 *
+¤c
+;
+
+1118 *
+d¡
+;
+
+1119 *
+¶aû
+;
+
+1120 
+off£t
+ = (
+ =ð
+CURLY
+ ? 4 : 0);
+
+1122 ià(
+»gcode
+ =ð&
+»gdummy
+) {
+
+1123 #ifdeà
+REGALIGN
+
+
+1124
+»gsize
+ +ð4 +
+off£t
+;
+
+1126
+»gsize
+ +ð3 +
+off£t
+;
+
+1131
+¤c
+ =
+»gcode
+;
+
+1132 #ifdeà
+REGALIGN
+
+
+1133
+»gcode
+ +ð4 +
+off£t
+;
+
+1135
+»gcode
+ +ð3 +
+off£t
+;
+
+1137
+d¡
+ =
+»gcode
+;
+
+1138 
+¤c
+ >
+Ýnd
+)
+
+1139 *--
+d¡
+ = *--
+¤c
+;
+
+1141
+¶aû
+ =
+Ýnd
+;
+
+1142 *
+¶aû
+++ =
+;
+
+1143 *
+¶aû
+++ = '\0';
+
+1144 *
+¶aû
+++ = '\0';
+
+1145 
+off£t
+-- > 0)
+
+1146 *
+¶aû
+++ = '\0';
+
+1147
+ }
+}
+
+1153
+ $»gž
+(
+p
+,
+v®
+)
+
+1154 *
+p
+;
+
+1155 *
+v®
+;
+
+1157 *
+sÿn
+;
+
+1158 *
+‹mp
+;
+
+1159 
+off£t
+;
+
+1161 ià(
+p
+ =ð&
+»gdummy
+)
+
+1165
+sÿn
+ =
+p
+;
+
+1167
+‹mp
+ =
+ `»gÃxt
+(
+sÿn
+);
+
+1168 ià(
+‹mp
+ =ð
+NULL
+)
+
+1170
+sÿn
+ =
+‹mp
+;
+
+1173 #ifdeà
+REGALIGN
+
+
+1174
+off£t
+ =
+v®
+ -
+sÿn
+;
+
+1175 #iâdeà
+lšt
+
+
+1176 *(*)(
+sÿn
++1èð
+off£t
+;
+
+1178
+off£t
+ = offset;
+
+1181 ià(
+ `OP
+(
+sÿn
+è=ð
+BACK
+)
+
+1182
+off£t
+ =
+sÿn
+ -
+v®
+;
+
+1184
+off£t
+ =
+v®
+ -
+sÿn
+;
+
+1185 *(
+sÿn
++1èð(
+off£t
+>>8)&0377;
+
+1186 *(
+sÿn
++2èð
+off£t
+&0377;
+
+1188
+ }
+}
+
+1194
+ $»gÝž
+(
+p
+,
+v®
+)
+
+1195 *
+p
+;
+
+1196 *
+v®
+;
+
+1199 ià(
+p
+ =ð
+NULL
+ ||… =ð&
+»gdummy
+ ||
+ `OP
+Õè!ð
+BRANCH
+)
+
+1201
+ `»gž
+(
+ `NEXTOPER
+(
+p
+),
+v®
+);
+
+1202
+ }
+}
+
+1207
+STATIC
+ 
+
+1208
+ $»gcu¾y
+(
+s
+)
+
+1209 *
+s
+;
+
+1211 ià(*
+s
+++ != '{')
+
+1212 
+FALSE
+;
+
+1213 ià(!
+ `isdig™
+(*
+s
+))
+
+1214 
+FALSE
+;
+
+1215 
+ `isdig™
+(*
+s
+))
+
+1216
+s
+++;
+
+1217 ià(*
+s
+ == ',')
+
+1218
+s
+++;
+
+1219 
+ `isdig™
+(*
+s
+))
+
+1220
+s
+++;
+
+1221 ià(*
+s
+ != '}')
+
+1222 
+FALSE
+;
+
+1223 
+TRUE
+;
+
+1224
+ }
+}
+
+1226 #ifdeà
+DEBUGGING
+
+
+1232
+ $»gdump
+(
+r
+)
+
+1233
+»gexp
+ *
+r
+;
+
+1235 *
+s
+;
+
+1236 
+ =
+EXACTLY
+;
+
+1237 *
+Ãxt
+;
+
+1240
+s
+ =
+r
+->
+´og¿m
+ + 1;
+
+1241 
+ !ð
+END
+) {
+
+1242 #ifdeà
+REGALIGN
+
+
+1243 ià(!(()
+s
+ & 1))
+
+1244
+s
+++;
+
+1246
+ =
+ `OP
+(
+s
+);
+
+1247
+ `årštf
+(
+¡d”r
+,"%2d%s",
+s
+-
+r
+->
+´og¿m
+,
+ `»g´Ý
+(s));
+
+1248
+Ãxt
+ =
+ `»gÃxt
+(
+s
+);
+
+1249
+s
+ +ð
+»g¬gËn
+[
+];
+
+1250 ià(
+Ãxt
+ =ð
+NULL
+)
+
+1251
+ `årštf
+(
+¡d”r
+,"(0)");
+
+1253
+ `årštf
+(
+¡d”r
+,"(%d)", (
+s
+-
+r
+->
+´og¿m
+)+(
+Ãxt
+-s));
+
+1254
+s
+ += 3;
+
+1255 ià(
+ =ð
+ANYOF
+) {
+
+1256
+s
+ += 32;
+
+1258 ià(
+ =ð
+EXACTLY
+) {
+
+1260
+s
+++;
+
+1261 *
+s
+ != '\0') {
+
+1262 ()
+ `putch¬
+(*
+s
+);
+
+1263
+s
+++;
+
+1265
+s
+++;
+
+1267 ()
+ `putch¬
+('\n');
+
+1271 ià(
+r
+->
+»g¡¬t
+)
+
+1272
+ `årštf
+(
+¡d”r
+,"¡¬ˆ`%s' ",
+r
+->
+»g¡¬t
+->
+¡r_±r
+);
+
+1273 ià(
+r
+->
+»g¡þass
+)
+
+1274
+ `årštf
+(
+¡d”r
+,"¡þas `%s' ",
+ `»g´Ý
+(
+r
+->
+»g¡þass
+));
+
+1275 ià(
+r
+->
+»gªch
+ & 1)
+
+1276
+ `årštf
+(
+¡d”r
+,"anchored ");
+
+1277 ià(
+r
+->
+»gªch
+ & 2)
+
+1278
+ `årštf
+(
+¡d”r
+,"plus ");
+
+1279 ià(
+r
+->
+»gmu¡
+ !ð
+NULL
+)
+
+1280
+ `årštf
+(
+¡d”r
+,"mu¡ hav\"%s\" back %d ",
+r
+->
+»gmu¡
+->
+¡r_±r
+,
+
+1281
+r
+->
+»gback
+);
+
+1282
+ `årštf
+(
+¡d”r
+,"\n");
+
+1283
+ }
+}
+
+1289
+ $»g´Ý
+(
+)
+
+1290 *
+;
+
+1292 *
+p
+;
+
+1294 (è
+ `¡rýy
+(
+buf
+, ":");
+
+1296 
+ `OP
+(
+)) {
+
+1297 
+BOL
+:
+
+1298
+p
+ = "BOL";
+
+1300 
+EOL
+:
+
+1301
+p
+ = "EOL";
+
+1303 
+ANY
+:
+
+1304
+p
+ = "ANY";
+
+1306 
+ANYOF
+:
+
+1307
+p
+ = "ANYOF";
+
+1309 
+BRANCH
+:
+
+1310
+p
+ = "BRANCH";
+
+1312 
+EXACTLY
+:
+
+1313
+p
+ = "EXACTLY";
+
+1315 
+NOTHING
+:
+
+1316
+p
+ = "NOTHING";
+
+1318 
+BACK
+:
+
+1319
+p
+ = "BACK";
+
+1321 
+END
+:
+
+1322
+p
+ = "END";
+
+1324 
+ALNUM
+:
+
+1325
+p
+ = "ALNUM";
+
+1327 
+NALNUM
+:
+
+1328
+p
+ = "NALNUM";
+
+1330 
+BOUND
+:
+
+1331
+p
+ = "BOUND";
+
+1333 
+NBOUND
+:
+
+1334
+p
+ = "NBOUND";
+
+1336 
+SPACE
+:
+
+1337
+p
+ = "SPACE";
+
+1339 
+NSPACE
+:
+
+1340
+p
+ = "NSPACE";
+
+1342 
+DIGIT
+:
+
+1343
+p
+ = "DIGIT";
+
+1345 
+NDIGIT
+:
+
+1346
+p
+ = "NDIGIT";
+
+1348 
+CURLY
+:
+
+1349 ()
+ `¥rštf
+(
+buf
++
+ `¡¾’
+(buf), "CURLY {%d,%d}",
+
+1350
+ `ARG1
+(
+),
+ `ARG2
+(op));
+
+1351
+p
+ =
+NULL
+;
+
+1353 
+REF
+:
+
+1354 ()
+ `¥rštf
+(
+buf
++
+ `¡¾’
+(buf), "REF%d",
+ `ARG1
+(
+));
+
+1355
+p
+ =
+NULL
+;
+
+1357 
+OPEN
+:
+
+1358 ()
+ `¥rštf
+(
+buf
++
+ `¡¾’
+(buf), "OPEN%d",
+ `ARG1
+(
+));
+
+1359
+p
+ =
+NULL
+;
+
+1361 
+CLOSE
+:
+
+1362 ()
+ `¥rštf
+(
+buf
++
+ `¡¾’
+(buf), "CLOSE%d",
+ `ARG1
+(
+));
+
+1363
+p
+ =
+NULL
+;
+
+1365 
+STAR
+:
+
+1366
+p
+ = "STAR";
+
+1368 
+PLUS
+:
+
+1369
+p
+ = "PLUS";
+
+1372
+ `FAIL
+("corrupted„egexp opcode");
+
+1374 ià(
+p
+ !ð
+NULL
+)
+
+1375 (è
+ `¡rÿt
+(
+buf
+,
+p
+);
+
+1376 (
+buf
+);
+
+1377
+ }
+}
+
+1380
+ $»gä“
+(
+r
+)
+
+1381 
+»gexp
+ *
+r
+;
+
+1383 ià(
+r
+->
+´ecomp
+) {
+
+1384
+ `Saãä“
+(
+r
+->
+´ecomp
+);
+
+1385
+r
+->
+´ecomp
+ =
+NuÎch
+;
+
+1387 ià(
+r
+->
+subba£
+) {
+
+1388
+ `Saãä“
+(
+r
+->
+subba£
+);
+
+1389
+r
+->
+subba£
+ =
+NuÎch
+;
+
+1391 ià(
+r
+->
+»gmu¡
+) {
+
+1392
+ `¡r_ä“
+(
+r
+->
+»gmu¡
+);
+
+1393
+r
+->
+»gmu¡
+ =
+NuΡr
+;
+
+1395 ià(
+r
+->
+»g¡¬t
+) {
+
+1396
+ `¡r_ä“
+(
+r
+->
+»g¡¬t
+);
+
+1397
+r
+->
+»g¡¬t
+ =
+NuΡr
+;
+
+1399
+ `Saãä“
+(
+r
+->
+¡¬
+);
+
+1400
+ `Saãä“
+(
+r
+->
+’dp
+);
+
+1401
+ `Saãä“
+(
+r
+);
+
+1402
+ }
+}
+
+ @regcomp.h
+
+56 
+ #END
+ 0
+
+ )
+
+57 
+ #BOL
+ 1
+
+ )
+
+58 
+ #EOL
+ 2
+
+ )
+
+59 
+ #ANY
+ 3
+
+ )
+
+60 
+ #ANYOF
+ 4
+
+ )
+
+61 
+ #CURLY
+ 5
+
+ )
+
+62 
+ #BRANCH
+ 6
+
+ )
+
+63 
+ #BACK
+ 7
+
+ )
+
+64 
+ #EXACTLY
+ 8
+
+ )
+
+65 
+ #NOTHING
+ 9
+
+ )
+
+66 
+ #STAR
+ 10
+
+ )
+
+67 
+ #PLUS
+ 11
+
+ )
+
+68 
+ #ALNUM
+ 12
+
+ )
+
+69 
+ #NALNUM
+ 13
+
+ )
+
+70 
+ #BOUND
+ 14
+
+ )
+
+71 
+ #NBOUND
+ 15
+
+ )
+
+72 
+ #SPACE
+ 16
+
+ )
+
+73 
+ #NSPACE
+ 17
+
+ )
+
+74 
+ #DIGIT
+ 18
+
+ )
+
+75 
+ #NDIGIT
+ 19
+
+ )
+
+76 
+ #REF
+ 20
+
+ )
+
+77 
+ #OPEN
+ 21
+
+ )
+
+78 
+ #CLOSE
+ 22
+
+ )
+
+102 #iâdeà
+DOINIT
+
+
+103
+
+»g¬gËn
+[];
+
+105 
+ g»g¬gËn
+[] = {0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2};
+
+109 #iâdeà
+DOINIT
+
+
+110
+
+v¬›s
+[];
+
+112 
+ gv¬›s
+[] = {
+BRANCH
+,
+BACK
+,
+STAR
+,
+PLUS
+,
+CURLY
+,
+REF
+,0};
+
+116 #iâdeà
+DOINIT
+
+
+117
+
+sim¶e
+[];
+
+119 
+ gsim¶e
+[] = {
+ANY
+,
+ANYOF
+,
+ALNUM
+,
+NALNUM
+,
+SPACE
+,
+NSPACE
+,
+DIGIT
+,
+NDIGIT
+,0};
+
+122
+EXT
+ 
+ g»gdummy
+;
+
+140 #iâdeà
+gould
+
+
+141 #iâdeà
+üay
+
+
+142 #iâdeà
+‘a10
+
+
+143 
+ #REGALIGN
+
+
+ )
+
+148 
+ #OP
+(
+p
+è(*Õ))
+
+ )
+
+150 #iâdeà
+lšt
+
+
+151 #ifdeà
+REGALIGN
+
+
+152 
+ #NEXT
+(
+p
+è(*(*)Õ+1))
+
+ )
+
+153 
+ #ARG1
+(
+p
+è(*(*)Õ+3))
+
+ )
+
+154 
+ #ARG2
+(
+p
+è(*(*)Õ+5))
+
+ )
+
+156 
+ #NEXT
+(
+p
+è(((*(Õ)+1)&0377)<<8è+ (*(Õ)+2)&0377))
+
+ )
+
+157 
+ #ARG1
+(
+p
+è(((*(Õ)+3)&0377)<<8è+ (*(Õ)+4)&0377))
+
+ )
+
+158 
+ #ARG2
+(
+p
+è(((*(Õ)+5)&0377)<<8è+ (*(Õ)+6)&0377))
+
+ )
+
+161 
+ #NEXT
+(
+p
+è0
+
+ )
+
+164 
+ #OPERAND
+(
+p
+è(Õè+ 3)
+
+ )
+
+166 #ifdeà
+REGALIGN
+
+
+167 
+ #NEXTOPER
+(
+p
+è(Õè+ 4)
+
+ )
+
+169 
+ #NEXTOPER
+(
+p
+è(Õè+ 3)
+
+ )
+
+172 
+ #MAGIC
+ 0234
+
+ )
+
+177 #iâdeà
+lšt
+
+
+178 #iâdeà
+CHARBITS
+
+
+179 
+ #UCHARAT
+(
+p
+è(()*(*)Õ))
+
+ )
+
+181 
+ #UCHARAT
+(
+p
+è(()*Õ)&
+CHARBITS
+)
+
+ )
+
+184 
+ #UCHARAT
+(
+p
+»gdummy
+
+
+ )
+
+187 
+ #FAIL
+(
+m
+ `çl
+("/%s/: %s",
+»g´ecomp
+,m)
+
+ )
+
+189 *
+»gÃxt
+();
+
+190 #ifdeà
+DEBUGGING
+
+
+191 
+»gdump
+();
+
+192 *
+»g´Ý
+();
+
+ @regexec.c
+
+52 
+ ~"EXTERN.h
+"
+
+53 
+ ~"³¾.h
+"
+
+54 
+ ~"»gcomp.h
+"
+
+56 #iâdeà
+STATIC
+
+
+57 
+ #STATIC
+ 
+
+ )
+
+60 #ifdeà
+DEBUGGING
+
+
+61 
+ g»gǼ©e
+ = 0;
+
+64 
+ #isALNUM
+(
+c
+è(
+ `i§scii
+(cè&& (
+ `i§Íha
+(cè||
+ `isdig™
+(cè|| c =ð'_'))
+
+ )
+
+65 
+ #isSPACE
+(
+c
+è(
+ `i§scii
+(cè&&
+ `is¥aû
+(c))
+
+ )
+
+66 
+ #isDIGIT
+(
+c
+è(
+ `i§scii
+(cè&&
+ `isdig™
+(c))
+
+ )
+
+67 
+ #isUPPER
+(
+c
+è(
+ `i§scii
+(cè&&
+ `isuµ”
+(c))
+
+ )
+
+76 *
+ g»g´ecomp
+;
+
+77 *
+ g»gšput
+;
+
+78 
+ g»g´ev
+;
+
+79 *
+ g»gbÞ
+;
+
+80 *
+ g»geÞ
+;
+
+81 **
+ g»g¡¬
+;
+
+82 **
+ g»g’dp
+;
+
+83 *
+ g»gÏ¡·»n
+;
+
+84 *
+ g»gtžl
+;
+
+86 
+ g»gmyp_size
+ = 0;
+
+87 **
+ g»gmy¡¬
+ =
+NuÎ
+(**);
+
+88 **
+ g»gmy’dp
+ =
+NuÎ
+(**);
+
+93
+STATIC
+ 
+»gŒy
+();
+
+94
+STATIC
+ 
+»gm©ch
+();
+
+95
+STATIC
+ 
+»g»³©
+();
+
+97
+
+muÉžše
+;
+
+103
+ $»gexec
+(
+´og
+,
+¡ršg¬g
+,
+¡»nd
+,
+¡rbeg
+,
+mš’d
+,
+sü—m”
+,
+§ãba£
+)
+
+104 
+»gexp
+ *
+´og
+;
+
+105 *
+¡ršg¬g
+;
+
+106 *
+¡»nd
+;
+
+107 *
+¡rbeg
+;
+
+108 
+mš’d
+;
+
+109
+STR
+ *
+sü—m”
+;
+
+110 
+§ãba£
+;
+
+112 *
+s
+;
+
+113 
+i
+;
+
+114 *
+c
+;
+
+115 *
+¡ršg
+ =
+¡ršg¬g
+;
+
+116 
+tmp
+;
+
+117 
+mšËn
+ = 0;
+
+118 
+dÚtbÙh”
+ = 0;
+
+121 ià(
+´og
+ =ð
+NULL
+ ||
+¡ršg
+ == NULL) {
+
+122
+ `çl
+("NULL„egexp…arameter");
+
+126 ià(
+¡ršg
+ =ð
+¡rbeg
+)
+
+127
+»g´ev
+ = '\n';
+
+129
+»g´ev
+ =
+¡ršg¬g
+[-1];
+
+130 ià(!
+muÉžše
+ &&
+»g´ev
+ == '\n')
+
+131
+»g´ev
+ = '\0';
+
+133
+»g´ecomp
+ =
+´og
+->
+´ecomp
+;
+
+135 ià(
+ `UCHARAT
+(
+´og
+->
+´og¿m
+è!ð
+MAGIC
+) {
+
+136
+ `FAIL
+("corrupted„egexp…rogram");
+
+139 ià(
+´og
+->
+do_fÞdšg
+) {
+
+140
+§ãba£
+ =
+FALSE
+;
+
+141
+i
+ =
+¡»nd
+ -
+¡ršg
+;
+
+142
+ `New
+(1101,
+c
+,
+i
++1,);
+
+143 ()
+ `bcÝy
+(
+¡ršg
+,
+c
+,
+i
++1);
+
+144
+¡ršg
+ =
+c
+;
+
+145
+¡»nd
+ =
+¡ršg
+ +
+i
+;
+
+146 
+s
+ =
+¡ršg
+; s <
+¡»nd
+; s++)
+
+147 ià(
+ `isUPPER
+(*
+s
+))
+
+148 *
+s
+ =
+ `tÞow”
+(*s);
+
+152
+s
+ =
+¡ršg
+;
+
+153 ià(
+´og
+->
+»gmu¡
+ !ð
+NuΡr
+ &&
+
+154 (!(
+´og
+->
+»gªch
+ & 1è|| (
+muÉžše
+ &&…rog->
+»gback
+ >= 0)) ) {
+
+155 ià(
+¡ršg¬g
+ =ð
+¡rbeg
+ &&
+sü—m”
+) {
+
+156 ià(
+sü—mfœ¡
+[
+´og
+->
+»gmu¡
+->
+¡r_¿»
+] >= 0)
+
+157
+s
+ =
+ `sü—mš¡r
+(
+sü—m”
+,
+´og
+->
+»gmu¡
+);
+
+159
+s
+ =
+NuÎch
+;
+
+161 #iâdeà
+lšt
+
+
+163
+s
+ =
+ `fbmš¡r
+((*)s, (*)
+¡»nd
+,
+
+164
+´og
+->
+»gmu¡
+);
+
+166 ià(!
+s
+) {
+
+167 ++
+´og
+->
+»gmu¡
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+168 
+phoÛy
+;
+
+170 ià(
+´og
+->
+»gback
+ >= 0) {
+
+171
+s
+ -ð
+´og
+->
+»gback
+;
+
+172 ià(
+s
+ <
+¡ršg
+)
+
+173
+s
+ =
+¡ršg
+;
+
+174
+mšËn
+ =
+´og
+->
+»gback
+ +…rog->
+»gmu¡
+->
+¡r_cur
+;
+
+176 ià(--
+´og
+->
+»gmu¡
+->
+¡r_u
+.
+¡r_u£ful
+ < 0) {
+
+177
+ `¡r_ä“
+(
+´og
+->
+»gmu¡
+);
+
+178
+´og
+->
+»gmu¡
+ =
+NuΡr
+;
+
+179
+s
+ =
+¡ršg
+;
+
+182
+s
+ =
+¡ršg
+;
+
+183
+mšËn
+ =
+´og
+->
+»gmu¡
+->
+¡r_cur
+;
+
+188
+»gbÞ
+ =
+¡ršg
+;
+
+191
+»geÞ
+ =
+¡»nd
+;
+
+194
+»gtžl
+ =
+¡ršg
++
+mš’d
+;
+
+197 iàÐ
+»gmyp_size
+ <
+´og
+->
+Ŭ’s
+ + 1 ) {
+
+199
+»gmyp_size
+ =
+´og
+->
+Ŭ’s
+ + 1;
+
+200 iàÐ
+»gmyp_size
+ < 10 )„egmyp_size = 10;
+
+201 iàÐ
+»gmy¡¬
+ ) {
+
+203
+ `R’ew
+(
+»gmy¡¬
+,
+»gmyp_size
+,*);
+
+204
+ `R’ew
+(
+»gmy’dp
+,
+»gmyp_size
+,*);
+
+208
+ `New
+(1102,
+»gmy¡¬
+,
+»gmyp_size
+,*);
+
+209
+ `New
+(1102,
+»gmy’dp
+,
+»gmyp_size
+,*);
+
+216 ià(
+´og
+->
+»gªch
+ & 1) {
+
+217 ià(
+ `»gŒy
+(
+´og
+,
+¡ršg
+))
+
+218 
+gÙ_™
+;
+
+219 ià(
+muÉžše
+) {
+
+220 ià(
+mšËn
+)
+
+221
+dÚtbÙh”
+ =
+mšËn
+ - 1;
+
+222
+¡»nd
+ -ð
+dÚtbÙh”
+;
+
+224 ià(
+s
+ >
+¡ršg
+)
+
+225
+s
+--;
+
+226 
+s
+ <
+¡»nd
+) {
+
+227 ià(*
+s
+++ == '\n') {
+
+228 ià(
+s
+ <
+¡»nd
+ &&
+ `»gŒy
+(
+´og
+, s))
+
+229 
+gÙ_™
+;
+
+233 
+phoÛy
+;
+
+237 ià(
+´og
+->
+»g¡¬t
+) {
+
+238 ià(
+´og
+->
+»gªch
+ & 2) {
+
+240
+i
+ =
+´og
+->
+»g¡¬t
+->
+¡r_±r
+[0];
+
+241 
+s
+ <
+¡»nd
+) {
+
+242 ià(*
+s
+ =ð
+i
+) {
+
+243 ià(
+ `»gŒy
+(
+´og
+,
+s
+))
+
+244 
+gÙ_™
+;
+
+245
+s
+++;
+
+246 
+s
+ <
+¡»nd
+ && * =ð
+i
+)
+
+247
+s
+++;
+
+249
+s
+++;
+
+252 ià(
+´og
+->
+»g¡¬t
+->
+¡r_pok
+ == 3) {
+
+254 #iâdeà
+lšt
+
+
+255 (
+s
+ =
+ `fbmš¡r
+((*)s,
+
+256 (*)
+¡»nd
+,
+´og
+->
+»g¡¬t
+)è!ð
+NULL
+)
+
+258 
+s
+ =
+NuÎch
+)
+
+261 ià(
+ `»gŒy
+(
+´og
+,
+s
+))
+
+262 
+gÙ_™
+;
+
+263
+s
+++;
+
+267
+c
+ =
+´og
+->
+»g¡¬t
+->
+¡r_±r
+;
+
+268 (
+s
+ =
+ `nš¡r
+(s,
+¡»nd
+,
+
+269
+c
+, c +
+´og
+->
+»g¡¬t
+->
+¡r_cur
+ )è!ð
+NULL
+) {
+
+270 ià(
+ `»gŒy
+(
+´og
+,
+s
+))
+
+271 
+gÙ_™
+;
+
+272
+s
+++;
+
+275 
+phoÛy
+;
+
+277 ià(
+c
+ =
+´og
+->
+»g¡þass
+) {
+
+278 
+dÛv”y
+ = (
+´og
+->
+»gªch
+ & 2) == 0;
+
+280 ià(
+mšËn
+)
+
+281
+dÚtbÙh”
+ =
+mšËn
+ - 1;
+
+282
+¡»nd
+ -ð
+dÚtbÙh”
+;
+
+283
+tmp
+ = 1;
+
+285 
+ `OP
+(
+c
+)) {
+
+286 
+ANYOF
+:
+
+287
+c
+ =
+ `OPERAND
+(c);
+
+288 
+s
+ <
+¡»nd
+) {
+
+289
+i
+ =
+ `UCHARAT
+(
+s
+);
+
+290 ià(!(
+c
+[
+i
+ >> 3] & (1 << (i&7)))) {
+
+291 ià(
+tmp
+ &&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+292 
+gÙ_™
+;
+
+294
+tmp
+ =
+dÛv”y
+;
+
+297
+tmp
+ = 1;
+
+298
+s
+++;
+
+301 
+BOUND
+:
+
+302 ià(
+mšËn
+)
+
+303
+dÚtbÙh”
+++,
+¡»nd
+--;
+
+304 ià(
+s
+ !ð
+¡ršg
+) {
+
+305
+i
+ =
+s
+[-1];
+
+306
+tmp
+ =
+ `isALNUM
+(
+i
+);
+
+309
+tmp
+ =
+ `isALNUM
+(
+»g´ev
+);
+
+310 
+s
+ <
+¡»nd
+) {
+
+311
+i
+ = *
+s
+;
+
+312 ià(
+tmp
+ !ð
+ `isALNUM
+(
+i
+)) {
+
+313
+tmp
+ = !tmp;
+
+314 ià(
+ `»gŒy
+(
+´og
+,
+s
+))
+
+315 
+gÙ_™
+;
+
+317
+s
+++;
+
+319 ià((
+mšËn
+ ||
+tmp
+è&&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+320 
+gÙ_™
+;
+
+322 
+NBOUND
+:
+
+323 ià(
+mšËn
+)
+
+324
+dÚtbÙh”
+++,
+¡»nd
+--;
+
+325 ià(
+s
+ !ð
+¡ršg
+) {
+
+326
+i
+ =
+s
+[-1];
+
+327
+tmp
+ =
+ `isALNUM
+(
+i
+);
+
+330
+tmp
+ =
+ `isALNUM
+(
+»g´ev
+);
+
+331 
+s
+ <
+¡»nd
+) {
+
+332
+i
+ = *
+s
+;
+
+333 ià(
+tmp
+ !ð
+ `isALNUM
+(
+i
+))
+
+334
+tmp
+ = !tmp;
+
+335 ià(
+ `»gŒy
+(
+´og
+,
+s
+))
+
+336 
+gÙ_™
+;
+
+337
+s
+++;
+
+339 ià((
+mšËn
+ || !
+tmp
+è&&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+340 
+gÙ_™
+;
+
+342 
+ALNUM
+:
+
+343 
+s
+ <
+¡»nd
+) {
+
+344
+i
+ = *
+s
+;
+
+345 ià(
+ `isALNUM
+(
+i
+)) {
+
+346 ià(
+tmp
+ &&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+347 
+gÙ_™
+;
+
+349
+tmp
+ =
+dÛv”y
+;
+
+352
+tmp
+ = 1;
+
+353
+s
+++;
+
+356 
+NALNUM
+:
+
+357 
+s
+ <
+¡»nd
+) {
+
+358
+i
+ = *
+s
+;
+
+359 ià(!
+ `isALNUM
+(
+i
+)) {
+
+360 ià(
+tmp
+ &&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+361 
+gÙ_™
+;
+
+363
+tmp
+ =
+dÛv”y
+;
+
+366
+tmp
+ = 1;
+
+367
+s
+++;
+
+370 
+SPACE
+:
+
+371 
+s
+ <
+¡»nd
+) {
+
+372 ià(
+ `isSPACE
+(*
+s
+)) {
+
+373 ià(
+tmp
+ &&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+374 
+gÙ_™
+;
+
+376
+tmp
+ =
+dÛv”y
+;
+
+379
+tmp
+ = 1;
+
+380
+s
+++;
+
+383 
+NSPACE
+:
+
+384 
+s
+ <
+¡»nd
+) {
+
+385 ià(!
+ `isSPACE
+(*
+s
+)) {
+
+386 ià(
+tmp
+ &&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+387 
+gÙ_™
+;
+
+389
+tmp
+ =
+dÛv”y
+;
+
+392
+tmp
+ = 1;
+
+393
+s
+++;
+
+396 
+DIGIT
+:
+
+397 
+s
+ <
+¡»nd
+) {
+
+398 ià(
+ `isDIGIT
+(*
+s
+)) {
+
+399 ià(
+tmp
+ &&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+400 
+gÙ_™
+;
+
+402
+tmp
+ =
+dÛv”y
+;
+
+405
+tmp
+ = 1;
+
+406
+s
+++;
+
+409 
+NDIGIT
+:
+
+410 
+s
+ <
+¡»nd
+) {
+
+411 ià(!
+ `isDIGIT
+(*
+s
+)) {
+
+412 ià(
+tmp
+ &&
+ `»gŒy
+(
+´og
+,
+s
+))
+
+413 
+gÙ_™
+;
+
+415
+tmp
+ =
+dÛv”y
+;
+
+418
+tmp
+ = 1;
+
+419
+s
+++;
+
+425 ià(
+mšËn
+)
+
+426
+dÚtbÙh”
+ =
+mšËn
+ - 1;
+
+427
+¡»nd
+ -ð
+dÚtbÙh”
+;
+
+430 ià(
+ `»gŒy
+(
+´og
+,
+s
+))
+
+431 
+gÙ_™
+;
+
+432 } 
+s
+++ <
+¡»nd
+);
+
+436 
+phoÛy
+;
+
+438
+gÙ_™
+:
+
+439 ià((!
+§ãba£
+ && (
+´og
+->
+Ŭ’s
+ ||
+§wam³r§nd
+)è||…rog->
+do_fÞdšg
+){
+
+440
+¡»nd
+ +ð
+dÚtbÙh”
+;
+
+441 ià(
+§ãba£
+)
+
+442
+s
+ =
+¡rbeg
+;
+
+443 ià(
+¡rbeg
+ !ð
+´og
+->
+subba£
+) {
+
+444
+i
+ =
+¡»nd
+ -
+¡ršg
+ + (
+¡ršg¬g
+ -
+¡rbeg
+);
+
+445
+s
+ =
+ `n§ve¡r
+(
+¡rbeg
+,
+i
+);
+
+446 ià(
+´og
+->
+subba£
+)
+
+447
+ `Saãä“
+(
+´og
+->
+subba£
+);
+
+448
+´og
+->
+subba£
+ =
+s
+;
+
+449
+´og
+->
+sub’d
+ =
+s
++
+i
+;
+
+452
+s
+ =
+´og
+->
+subba£
+;
+
+453
+s
+ +ð(
+¡ršg¬g
+ -
+¡rbeg
+);
+
+454 
+i
+ = 0; i <ð
+´og
+->
+Ŭ’s
+; i++) {
+
+455 ià(
+´og
+->
+’dp
+[
+i
+]) {
+
+456
+´og
+->
+¡¬
+[
+i
+] =
+s
+ + (´og->¡¬[i] -
+¡ršg
+);
+
+457
+´og
+->
+’dp
+[
+i
+] =
+s
+ + (´og->’dp[i] -
+¡ršg
+);
+
+460 ià(
+´og
+->
+do_fÞdšg
+)
+
+461
+ `Saãä“
+(
+¡ršg
+);
+
+465
+phoÛy
+:
+
+466 ià(
+´og
+->
+do_fÞdšg
+)
+
+467
+ `Saãä“
+(
+¡ršg
+);
+
+469
+ }
+}
+
+475
+ $»gŒy
+(
+´og
+,
+¡ršg
+)
+
+476
+»gexp
+ *
+´og
+;
+
+477 *
+¡ršg
+;
+
+479 
+i
+;
+
+480 **
+;
+
+481 **
+•
+;
+
+483
+»gšput
+ =
+¡ršg
+;
+
+484
+»g¡¬
+ =
+´og
+->
+¡¬
+;
+
+485
+»g’dp
+ =
+´og
+->
+’dp
+;
+
+486
+»gÏ¡·»n
+ = &
+´og
+->
+Ï¡·»n
+;
+
+487
+´og
+->
+Ï¡·»n
+ = 0;
+
+489
+ =
+´og
+->
+¡¬
+;
+
+490
+•
+ =
+´og
+->
+’dp
+;
+
+491 ià(
+´og
+->
+Ŭ’s
+) {
+
+492 
+i
+ =
+´og
+->
+Ŭ’s
+; i >= 0; i--) {
+
+493 *
+++ =
+NULL
+;
+
+494 *
+•
+++ =
+NULL
+;
+
+497 ià(
+ `»gm©ch
+(
+´og
+->
+´og¿m
+ + 1è&&
+»gšput
+ >ð
+»gtžl
+) {
+
+498
+´og
+->
+¡¬
+[0] =
+¡ršg
+;
+
+499
+´og
+->
+’dp
+[0] =
+»gšput
+;
+
+503
+ }
+}
+
+520
+ $»gm©ch
+(
+´og
+)
+
+521 *
+´og
+;
+
+523 *
+sÿn
+;
+
+524 *
+Ãxt
+;
+
+525 
+Ãxtch¬
+;
+
+526 
+n
+;
+
+527 
+;
+
+528 *
+s
+;
+
+529 *
+locšput
+ =
+»gšput
+;
+
+531
+Ãxtch¬
+ = *
+locšput
+;
+
+532
+sÿn
+ =
+´og
+;
+
+533 #ifdeà
+DEBUGGING
+
+
+534 ià(
+sÿn
+ !ð
+NULL
+ &&
+»gǼ©e
+)
+
+535
+ `årštf
+(
+¡d”r
+, "%s(\n",
+ `»g´Ý
+(
+sÿn
+));
+
+537 
+sÿn
+ !ð
+NULL
+) {
+
+538 #ifdeà
+DEBUGGING
+
+
+539 ià(
+»gǼ©e
+)
+
+540
+ `årštf
+(
+¡d”r
+, "%s...\n",
+ `»g´Ý
+(
+sÿn
+));
+
+543 #ifdeà
+REGALIGN
+
+
+544
+Ãxt
+ =
+sÿn
+ +
+ `NEXT
+(scan);
+
+545 ià(
+Ãxt
+ =ð
+sÿn
+)
+
+546
+Ãxt
+ =
+NULL
+;
+
+548
+Ãxt
+ =
+ `»gÃxt
+(
+sÿn
+);
+
+551 
+ `OP
+(
+sÿn
+)) {
+
+552 
+BOL
+:
+
+553 ià(
+locšput
+ =ð
+»gbÞ
+ ?
+»g´ev
+ == '\n' :
+
+554 ((
+Ãxtch¬
+ ||
+locšput
+ <
+»geÞ
+) &&
+
+555
+locšput
+[-1] == '\n') )
+
+561 
+EOL
+:
+
+562 ià((
+Ãxtch¬
+ ||
+locšput
+ <
+»geÞ
+) &&‚extchar != '\n')
+
+564 ià(!
+muÉžše
+ &&
+»geÞ
+ -
+locšput
+ > 1)
+
+568 
+ANY
+:
+
+569 ià((
+Ãxtch¬
+ =ð'\0' &&
+locšput
+ >ð
+»geÞ
+) ||
+
+570
+Ãxtch¬
+ == '\n')
+
+572
+Ãxtch¬
+ = *++
+locšput
+;
+
+574 
+EXACTLY
+:
+
+575
+s
+ =
+ `OPERAND
+(
+sÿn
+);
+
+576
+ = *
+s
+++;
+
+578 ià(*
+s
+ !ð
+Ãxtch¬
+)
+
+580 ià(
+»geÞ
+ -
+locšput
+ <
+)
+
+582 ià(
+ > 1 &&
+ `bcmp
+(
+s
+,
+locšput
+,†n) != 0)
+
+584
+locšput
+ +ð
+;
+
+585
+Ãxtch¬
+ = *
+locšput
+;
+
+587 
+ANYOF
+:
+
+588
+s
+ =
+ `OPERAND
+(
+sÿn
+);
+
+589 ià(
+Ãxtch¬
+ < 0)
+
+590
+Ãxtch¬
+ =
+ `UCHARAT
+(
+locšput
+);
+
+591 ià(
+s
+[
+Ãxtch¬
+ >> 3] & (1 << (nextchar&7)))
+
+593 ià(!
+Ãxtch¬
+ &&
+locšput
+ >ð
+»geÞ
+)
+
+595
+Ãxtch¬
+ = *++
+locšput
+;
+
+597 
+ALNUM
+:
+
+598 ià(!
+Ãxtch¬
+)
+
+600 ià(!
+ `isALNUM
+(
+Ãxtch¬
+))
+
+602
+Ãxtch¬
+ = *++
+locšput
+;
+
+604 
+NALNUM
+:
+
+605 ià(!
+Ãxtch¬
+ &&
+locšput
+ >ð
+»geÞ
+)
+
+607 ià(
+ `isALNUM
+(
+Ãxtch¬
+))
+
+609
+Ãxtch¬
+ = *++
+locšput
+;
+
+611 
+NBOUND
+:
+
+612 
+BOUND
+:
+
+613 ià(
+locšput
+ =ð
+»gbÞ
+)
+
+614
+ =
+ `isALNUM
+(
+»g´ev
+);
+
+616
+ =
+ `isALNUM
+(
+locšput
+[-1]);
+
+617
+n
+ =
+ `isALNUM
+(
+Ãxtch¬
+);
+
+618 ià((
+ =ð
+n
+è=ð(
+ `OP
+(
+sÿn
+è=ð
+BOUND
+))
+
+621 
+SPACE
+:
+
+622 ià(!
+Ãxtch¬
+ &&
+locšput
+ >ð
+»geÞ
+)
+
+624 ià(!
+ `isSPACE
+(
+Ãxtch¬
+))
+
+626
+Ãxtch¬
+ = *++
+locšput
+;
+
+628 
+NSPACE
+:
+
+629 ià(!
+Ãxtch¬
+)
+
+631 ià(
+ `isSPACE
+(
+Ãxtch¬
+))
+
+633
+Ãxtch¬
+ = *++
+locšput
+;
+
+635 
+DIGIT
+:
+
+636 ià(!
+ `isDIGIT
+(
+Ãxtch¬
+))
+
+638
+Ãxtch¬
+ = *++
+locšput
+;
+
+640 
+NDIGIT
+:
+
+641 ià(!
+Ãxtch¬
+ &&
+locšput
+ >ð
+»geÞ
+)
+
+643 ià(
+ `isDIGIT
+(
+Ãxtch¬
+))
+
+645
+Ãxtch¬
+ = *++
+locšput
+;
+
+647 
+REF
+:
+
+648
+n
+ =
+ `ARG1
+(
+sÿn
+);
+
+649
+s
+ =
+»gmy¡¬
+[
+n
+];
+
+650 ià(!
+s
+)
+
+652 ià(!
+»gmy’dp
+[
+n
+])
+
+654 ià(
+s
+ =ð
+»gmy’dp
+[
+n
+])
+
+657 ià(*
+s
+ !ð
+Ãxtch¬
+)
+
+659
+ =
+»gmy’dp
+[
+n
+] -
+s
+;
+
+660 ià(
+locšput
+ +
+ >
+»geÞ
+)
+
+662 ià(
+ > 1 &&
+ `bcmp
+(
+s
+,
+locšput
+,†n) != 0)
+
+664
+locšput
+ +ð
+;
+
+665
+Ãxtch¬
+ = *
+locšput
+;
+
+668 
+NOTHING
+:
+
+670 
+BACK
+:
+
+672 
+OPEN
+:
+
+673
+n
+ =
+ `ARG1
+(
+sÿn
+);
+
+674
+»gšput
+ =
+locšput
+;
+
+676
+»gmy¡¬
+[
+n
+] =
+locšput
+;
+
+677 ià(
+ `»gm©ch
+(
+Ãxt
+)) {
+
+683 ià(
+»g¡¬
+[
+n
+] =ð
+NULL
+)
+
+684
+»g¡¬
+[
+n
+] =
+locšput
+;
+
+689 
+CLOSE
+: {
+
+690
+n
+ =
+ `ARG1
+(
+sÿn
+);
+
+691
+»gšput
+ =
+locšput
+;
+
+693
+»gmy’dp
+[
+n
+] =
+locšput
+;
+
+694 ià(
+ `»gm©ch
+(
+Ãxt
+)) {
+
+700 ià(
+»g’dp
+[
+n
+] =ð
+NULL
+) {
+
+701
+»g’dp
+[
+n
+] =
+locšput
+;
+
+702 ià(
+n
+ > *
+»gÏ¡·»n
+)
+
+703 *
+»gÏ¡·»n
+ =
+n
+;
+
+710 
+BRANCH
+: {
+
+711 ià(
+ `OP
+(
+Ãxt
+è!ð
+BRANCH
+)
+
+712
+Ãxt
+ =
+ `NEXTOPER
+(
+sÿn
+);
+
+715
+»gšput
+ =
+locšput
+;
+
+716 ià(
+ `»gm©ch
+(
+ `NEXTOPER
+(
+sÿn
+)))
+
+718 #ifdeà
+REGALIGN
+
+
+719 ià(
+n
+ =
+ `NEXT
+(
+sÿn
+))
+
+720
+sÿn
+ +ð
+n
+;
+
+722
+sÿn
+ =
+NULL
+;
+
+724
+sÿn
+ =
+ `»gÃxt
+(scan);
+
+726 } 
+sÿn
+ !ð
+NULL
+ &&
+ `OP
+(sÿnè=ð
+BRANCH
+);
+
+732 
+CURLY
+:
+
+733
+ =
+ `ARG1
+(
+sÿn
+);
+
+734
+n
+ =
+ `ARG2
+(
+sÿn
+);
+
+735
+sÿn
+ =
+ `NEXTOPER
+(scan) + 4;
+
+736 
+»³©
+;
+
+737 
+STAR
+:
+
+738
+ = 0;
+
+739
+n
+ = 0;
+
+740
+sÿn
+ =
+ `NEXTOPER
+(scan);
+
+741 
+»³©
+;
+
+742 
+PLUS
+:
+
+747
+ = 1;
+
+748
+n
+ = 0;
+
+749
+sÿn
+ =
+ `NEXTOPER
+(scan);
+
+750
+»³©
+:
+
+751 ià(
+ `OP
+(
+Ãxt
+è=ð
+EXACTLY
+)
+
+752
+Ãxtch¬
+ = *(
+ `OPERAND
+(
+Ãxt
+)+1);
+
+754
+Ãxtch¬
+ = -1000;
+
+755
+»gšput
+ =
+locšput
+;
+
+756
+n
+ =
+ `»g»³©
+(
+sÿn
+,‚);
+
+757 ià(!
+muÉžše
+ &&
+ `OP
+(
+Ãxt
+è=ð
+EOL
+ &&
+ <
+n
+)
+
+758
+ =
+n
+;
+
+759 
+n
+ >ð
+) {
+
+761 ià(
+Ãxtch¬
+ =ð-1000 || *
+»gšput
+ ==‚extchar)
+
+762 ià(
+ `»gm©ch
+(
+Ãxt
+))
+
+765
+n
+--;
+
+766
+»gšput
+ =
+locšput
+ +
+n
+;
+
+769 
+END
+:
+
+770
+»gšput
+ =
+locšput
+;
+
+773
+ `´štf
+("%x %d\n",
+sÿn
+,scan[1]);
+
+774
+ `FAIL
+("regexp memory corruption");
+
+777
+sÿn
+ =
+Ãxt
+;
+
+784
+ `FAIL
+("corrupted„egexp…ointers");
+
+786 #ifdeà
+lšt
+
+
+789
+ }
+}
+
+800
+ $»g»³©
+(
+p
+,
+max
+)
+
+801 *
+p
+;
+
+802 
+max
+;
+
+804 *
+sÿn
+;
+
+805 *
+Ýnd
+;
+
+806 
+c
+;
+
+807 *
+loûÞ
+ =
+»geÞ
+;
+
+809
+sÿn
+ =
+»gšput
+;
+
+810 ià(
+max
+ && max <
+loûÞ
+ -
+sÿn
+)
+
+811
+loûÞ
+ =
+sÿn
+ +
+max
+;
+
+812
+Ýnd
+ =
+ `OPERAND
+(
+p
+);
+
+813 
+ `OP
+(
+p
+)) {
+
+814 
+ANY
+:
+
+815 
+sÿn
+ <
+loûÞ
+ && *scan != '\n')
+
+816
+sÿn
+++;
+
+818 
+EXACTLY
+:
+
+819
+Ýnd
+++;
+
+820 
+sÿn
+ <
+loûÞ
+ && *
+Ýnd
+ == *scan)
+
+821
+sÿn
+++;
+
+823 
+ANYOF
+:
+
+824
+c
+ =
+ `UCHARAT
+(
+sÿn
+);
+
+825 
+sÿn
+ <
+loûÞ
+ && !(
+Ýnd
+[
+c
+ >> 3] & (1 << (c & 7)))) {
+
+826
+sÿn
+++;
+
+827
+c
+ =
+ `UCHARAT
+(
+sÿn
+);
+
+830 
+ALNUM
+:
+
+831 
+sÿn
+ <
+loûÞ
+ &&
+ `isALNUM
+(*scan))
+
+832
+sÿn
+++;
+
+834 
+NALNUM
+:
+
+835 
+sÿn
+ <
+loûÞ
+ && !
+ `isALNUM
+(*scan))
+
+836
+sÿn
+++;
+
+838 
+SPACE
+:
+
+839 
+sÿn
+ <
+loûÞ
+ &&
+ `isSPACE
+(*scan))
+
+840
+sÿn
+++;
+
+842 
+NSPACE
+:
+
+843 
+sÿn
+ <
+loûÞ
+ && !
+ `isSPACE
+(*scan))
+
+844
+sÿn
+++;
+
+846 
+DIGIT
+:
+
+847 
+sÿn
+ <
+loûÞ
+ &&
+ `isDIGIT
+(*scan))
+
+848
+sÿn
+++;
+
+850 
+NDIGIT
+:
+
+851 
+sÿn
+ <
+loûÞ
+ && !
+ `isDIGIT
+(*scan))
+
+852
+sÿn
+++;
+
+855
+ `FAIL
+("internal„egexp foulup");
+
+859
+c
+ =
+sÿn
+ -
+»gšput
+;
+
+860
+»gšput
+ =
+sÿn
+;
+
+862 (
+c
+);
+
+863
+ }
+}
+
+872
+ $»gÃxt
+(
+p
+)
+
+873 *
+p
+;
+
+875 
+off£t
+;
+
+877 ià(
+p
+ =ð&
+»gdummy
+)
+
+878 (
+NULL
+);
+
+880
+off£t
+ =
+ `NEXT
+(
+p
+);
+
+881 ià(
+off£t
+ == 0)
+
+882 (
+NULL
+);
+
+884 #ifdeà
+REGALIGN
+
+
+885 (
+p
++
+off£t
+);
+
+887 ià(
+ `OP
+(
+p
+è=ð
+BACK
+)
+
+888 (
+p
+-
+off£t
+);
+
+890 (
+p
++
+off£t
+);
+
+892
+ }
+}
+
+ @regexp.h
+
+16 
+ s»gexp
+ {
+
+17 **
+ m¡¬
+;
+
+18 **
+ m’dp
+;
+
+19
+STR
+ *
+ m»g¡¬t
+;
+
+20 *
+ m»g¡þass
+;
+
+21
+STR
+ *
+ m»gmu¡
+;
+
+22 
+ m»gback
+;
+
+23 *
+ m´ecomp
+;
+
+24 *
+ msubba£
+;
+
+25 *
+ msub’d
+;
+
+26 
+ m»gªch
+;
+
+27 
+ mdo_fÞdšg
+;
+
+28 
+ mÏ¡·»n
+;
+
+29 
+ mŬ’s
+;
+
+30 
+ m´og¿m
+[1];
+
+31 }
+ t»gexp
+;
+
+33
+»gexp
+ *
+»gcomp
+();
+
+34 
+»gexec
+();
+
+ @spat.h
+
+14 
+ ssÿÅ©
+ {
+
+15
+SPAT
+ *
+ m¥©_Ãxt
+;
+
+16
+REGEXP
+ *
+ m¥©_»gexp
+;
+
+17
+ARG
+ *
+ m¥©_»¶
+;
+
+18
+ARG
+ *
+ m¥©_ruÁime
+;
+
+19
+STR
+ *
+ m¥©_shÜt
+;
+
+20
+boÞ
+
+ m¥©_æags
+;
+
+21 
+ m¥©_¦’
+;
+
+24 
+ #SPAT_USED
+ 1
+
+ )
+
+25 
+ #SPAT_ONCE
+ 2
+
+ )
+
+26 
+ #SPAT_SCANFIRST
+ 4
+
+ )
+
+27 
+ #SPAT_ALL
+ 8
+
+ )
+
+28 
+ #SPAT_SKIPWHITE
+ 16
+
+ )
+
+29 
+ #SPAT_FOLD
+ 32
+
+ )
+
+30 
+ #SPAT_CONST
+ 64
+
+ )
+
+31 
+ #SPAT_KEEP
+ 128
+
+ )
+
+33
+EXT
+
+SPAT
+ *
+ gcur¥©
+;
+
+34
+EXT
+
+SPAT
+ *
+ gÏ¡¥©
+;
+
+36
+EXT
+ *
+hšt
+
+INIT
+(
+NuÎch
+);
+
+38 
+ #Nu봩
+
+ `NuÎ
+(
+SPAT
+*)
+
+ )
+
+ @stab.c
+
+18 
+ ~"EXTERN.h
+"
+
+19 
+ ~"³¾.h
+"
+
+21 #ià!
+defšed
+(
+NSIG
+è|| defšed(
+M_UNIX
+è|| defšed(
+M_XENIX
+)
+
+22 
+ ~<sigÇl.h
+>
+
+25 *
+ gsig_Çme
+[] = {
+
+26
+SIG_NAME
+,0
+
+29 #ifdeà
+VOIDSIG
+
+
+30 
+ #hªd˹y³
+ 
+
+ )
+
+32 
+ #hªd˹y³
+ 
+
+ )
+
+35 
+hªd˹y³
+
+sighªdËr
+();
+
+37 
+ gÜig®’
+ = 0;
+
+39
+STR
+ *
+
+40
+ $¡ab_¡r
+(
+¡r
+)
+
+41
+STR
+ *
+¡r
+;
+
+43
+STAB
+ *
+¡ab
+ =
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+;
+
+44 
+·»n
+;
+
+45 *
+s
+;
+
+46 
+i
+;
+
+48 ià(
+¡r
+->
+¡r_¿»
+)
+
+49 
+ `¡ab_v®
+(
+¡ab
+);
+
+51 *
+¡ab
+->
+¡r_magic
+->
+¡r_±r
+) {
+
+53 #ifdeà
+DEBUGGING
+
+
+54
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()(
+debug
+ & 32767));
+
+58 ià(
+š¶aû
+)
+
+59
+ `¡r_£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+š¶aû
+);
+
+61
+ `¡r_s£t
+(
+ `¡ab_v®
+(
+¡ab
+),&
+¡r_undef
+);
+
+64
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+ba£time
+);
+
+67
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+dow¬n
+);
+
+71 ià(
+cur¥©
+) {
+
+72
+·»n
+ =
+ `©oi
+(
+ `¡ab_Çme
+(
+¡ab
+));
+
+73
+g‘·»n
+:
+
+74 ià(
+cur¥©
+->
+¥©_»gexp
+ &&
+
+75
+·»n
+ <ð
+cur¥©
+->
+¥©_»gexp
+->
+Ŭ’s
+ &&
+
+76 (
+s
+ =
+cur¥©
+->
+¥©_»gexp
+->
+¡¬
+[
+·»n
+]) ) {
+
+77
+i
+ =
+cur¥©
+->
+¥©_»gexp
+->
+’dp
+[
+·»n
+] -
+s
+;
+
+78 ià(
+i
+ >= 0)
+
+79
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+s
+,
+i
+);
+
+81
+ `¡r_s£t
+(
+ `¡ab_v®
+(
+¡ab
+),&
+¡r_undef
+);
+
+84
+ `¡r_s£t
+(
+ `¡ab_v®
+(
+¡ab
+),&
+¡r_undef
+);
+
+88 ià(
+cur¥©
+) {
+
+89
+·»n
+ =
+cur¥©
+->
+¥©_»gexp
+->
+Ï¡·»n
+;
+
+90 
+g‘·»n
+;
+
+94 ià(
+cur¥©
+) {
+
+95 ià(
+cur¥©
+->
+¥©_»gexp
+ &&
+
+96 (
+s
+ =
+cur¥©
+->
+¥©_»gexp
+->
+subba£
+) ) {
+
+97
+i
+ =
+cur¥©
+->
+¥©_»gexp
+->
+¡¬
+[0] -
+s
+;
+
+98 ià(
+i
+ >= 0)
+
+99
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+s
+,
+i
+);
+
+101
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+¡ab
+),"",0);
+
+104
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+¡ab
+),"",0);
+
+108 ià(
+cur¥©
+) {
+
+109 ià(
+cur¥©
+->
+¥©_»gexp
+ &&
+
+110 (
+s
+ =
+cur¥©
+->
+¥©_»gexp
+->
+’dp
+[0]) ) {
+
+111
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+s
+,
+cur¥©
+->
+¥©_»gexp
+->
+sub’d
+ - s);
+
+114
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+¡ab
+),"",0);
+
+118 #iâdeà
+lšt
+
+
+119 ià(
+Ï¡_š_¡ab
+) {
+
+120
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+lšes
+);
+
+125
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+¡©usv®ue
+);
+
+128
+s
+ =
+ `¡ab_io
+(
+curout¡ab
+)->
+tÝ_Çme
+;
+
+129
+ `¡r_£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+s
+);
+
+132
+s
+ =
+ `¡ab_io
+(
+curout¡ab
+)->
+fmt_Çme
+;
+
+133
+ `¡r_£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+s
+);
+
+135 #iâdeà
+lšt
+
+
+137
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+ `¡ab_io
+(
+curout¡ab
+)->
+·ge_Ën
+);
+
+140
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+ `¡ab_io
+(
+curout¡ab
+)->
+lšes_Ëá
+);
+
+143
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+ `¡ab_io
+(
+curout¡ab
+)->
+·ge
+);
+
+149
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+¬yba£
+);
+
+152 ià(!
+ `¡ab_io
+(
+curout¡ab
+))
+
+153
+ `¡ab_io
+(
+curout¡ab
+èð
+ `¡io_Ãw
+();
+
+154
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+
+155 ()((
+ `¡ab_io
+(
+curout¡ab
+)->
+æags
+ &
+IOF_FLUSH
+) != 0) );
+
+158
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+ofs
+,
+of¦’
+);
+
+161
+ `¡r_n£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+Üs
+,
+ܦ’
+);
+
+164
+ `¡r_£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+ofmt
+);
+
+167
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+), ()
+Ӽo
+);
+
+168
+ `¡r_£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+Ӽo
+ ?
+ `¡»¼Ü
+(errno) : "");
+
+169
+ `¡ab_v®
+(
+¡ab
+)->
+¡r_nok
+ = 1;
+
+172
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+uid
+);
+
+175
+ `¡r_num£t
+(
+ `¡ab_v®
+(
+¡ab
+),()
+euid
+);
+
+178
+s
+ =
+buf
+;
+
+179 ()
+ `¥rštf
+(
+s
+,"%d",()
+gid
+);
+
+180 
+add_groups
+;
+
+182
+s
+ =
+buf
+;
+
+183 ()
+ `¥rštf
+(
+s
+,"%d",()
+egid
+);
+
+184
+add_groups
+:
+
+185 *
+s
+) s++;
+
+186 #ifdeà
+HAS_GETGROUPS
+
+
+187 #iâdeà
+NGROUPS
+
+
+188 
+ #NGROUPS
+ 32
+
+ )
+
+191
+GROUPSTYPE
+
+g¬y
+[
+NGROUPS
+];
+
+193
+i
+ =
+ `g‘groups
+(
+NGROUPS
+,
+g¬y
+);
+
+194 --
+i
+ >= 0) {
+
+195 ()
+ `¥rštf
+(
+s
+," %ld", ()
+g¬y
+[
+i
+]);
+
+196 *
+s
+) s++;
+
+200
+ `¡r_£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+buf
+);
+
+208 
+ufuncs
+ *
+uf
+ = (ufunc *)
+¡r
+->
+¡r_±r
+;
+
+210 ià(
+uf
+ && uf->
+uf_v®
+)
+
+211 (*
+uf
+->
+uf_v®
+)(uf->
+uf_šdex
+,
+ `¡ab_v®
+(
+¡ab
+));
+
+215 
+ `¡ab_v®
+(
+¡ab
+);
+
+216
+ }
+}
+
+218
+ $¡ab£t
+(
+m¡r
+,
+¡r
+)
+
+219 
+STR
+ *
+m¡r
+;
+
+220
+STR
+ *
+¡r
+;
+
+222
+STAB
+ *
+¡ab
+ =
+m¡r
+->
+¡r_u
+.
+¡r_¡ab
+;
+
+223 *
+s
+;
+
+224 
+i
+;
+
+226 
+m¡r
+->
+¡r_¿»
+) {
+
+228
+ `my_£‹nv
+(
+m¡r
+->
+¡r_±r
+,
+ `¡r_g‘
+(
+¡r
+));
+
+231 #ifdeà
+TAINT
+
+
+232 ià(
+ `¡rEQ
+(
+m¡r
+->
+¡r_±r
+,"PATH")) {
+
+233 *
+¡»nd
+ =
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+;
+
+235
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+236 
+s
+ <
+¡»nd
+) {
+
+237
+s
+ =
+ `ýytžl
+(
+tok’buf
+,s,
+¡»nd
+,':',&
+i
+);
+
+238
+s
+++;
+
+239 ià(*
+tok’buf
+ != '/'
+
+240 || (
+ `¡©
+(
+tok’buf
+,&
+¡©buf
+è&& (¡©buf.
+¡_mode
+ & 2)) )
+
+241
+¡r
+->
+¡r_š‹d
+ = 2;
+
+247
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+248
+i
+ =
+ `whichsig
+(
+m¡r
+->
+¡r_±r
+);
+
+249 ià(
+ `¡rEQ
+(
+s
+,"IGNORE"))
+
+250 #iâdeà
+lšt
+
+
+251 ()
+ `sigÇl
+(
+i
+,
+SIG_IGN
+);
+
+255 ià(
+ `¡rEQ
+(
+s
+,"DEFAULT") || !*s)
+
+256 ()
+ `sigÇl
+(
+i
+,
+SIG_DFL
+);
+
+258 ()
+ `sigÇl
+(
+i
+,
+sighªdËr
+);
+
+259 ià(!
+ `šdex
+(
+s
+,'\'')) {
+
+260
+ `¥rštf
+(
+tok’buf
+, "maš'%s",
+s
+);
+
+261
+ `¡r_£t
+(
+¡r
+,
+tok’buf
+);
+
+265 #ifdeà
+SOME_DBM
+
+
+267
+ `hdbm¡Üe
+(
+ `¡ab_hash
+(
+¡ab
+),
+m¡r
+->
+¡r_±r
+,m¡r->
+¡r_cur
+,
+¡r
+);
+
+272
+CMD
+ *
+cmd
+;
+
+274
+i
+ =
+ `¡r_Œue
+(
+¡r
+);
+
+275
+¡r
+ =
+ `aãtch
+(
+ `¡ab_x¬¿y
+(
+¡ab
+),
+ `©oi
+(
+m¡r
+->
+¡r_±r
+),
+FALSE
+);
+
+276
+cmd
+ =
+¡r
+->
+¡r_magic
+->
+¡r_u
+.
+¡r_cmd
+;
+
+277
+cmd
+->
+c_æags
+ &ð~
+CF_OPTIMIZE
+;
+
+278
+cmd
+->
+c_æags
+ |ð
+i
+?
+CFT_D1
+ :
+CFT_D0
+;
+
+282
+ `afžl
+(
+ `¡ab_¬¿y
+(
+¡ab
+), ()
+ `¡r_gnum
+(
+¡r
+è-
+¬yba£
+);
+
+287
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+288 ià(
+ `¡rNE
+(
+s
+,"StB"è||
+¡r
+->
+¡r_cur
+ !ð(
+STBP
+)) {
+
+289 ià(!*
+s
+) {
+
+290
+STBP
+ *
+¡bp
+;
+
+292 ()
+ `§v’o¡ab
+(
+¡ab
+);
+
+293 ià(
+¡ab
+->
+¡r_Ën
+)
+
+294
+ `Saãä“
+(
+¡ab
+->
+¡r_±r
+);
+
+295
+ `Newz
+(601,
+¡bp
+, 1,
+STBP
+);
+
+296
+¡ab
+->
+¡r_±r
+ =
+¡bp
+;
+
+297
+¡ab
+->
+¡r_Ën
+ = sb->
+¡r_cur
+ = (
+STBP
+);
+
+298
+¡ab
+->
+¡r_pok
+ = 1;
+
+299
+ `¡rýy
+(
+ `¡ab_magic
+(
+¡ab
+),"StB");
+
+300
+ `¡ab_v®
+(
+¡ab
+èð
+ `SŒ_Ãw
+(70,0);
+
+301
+ `¡ab_lše
+(
+¡ab
+èð
+curcmd
+->
+c_lše
+;
+
+302
+ `¡ab_¡ash
+(
+¡ab
+èð
+curcmd
+->
+c_¡ash
+;
+
+305
+¡ab
+ =
+ `¡ab’t
+(
+s
+,
+TRUE
+);
+
+306 ià(!
+ `¡ab_x¬¿y
+(
+¡ab
+))
+
+307
+ `¯dd
+(
+¡ab
+);
+
+308 ià(!
+ `¡ab_xhash
+(
+¡ab
+))
+
+309
+ `hadd
+(
+¡ab
+);
+
+310 ià(!
+ `¡ab_io
+(
+¡ab
+))
+
+311
+ `¡ab_io
+(
+¡ab
+èð
+ `¡io_Ãw
+();
+
+313
+ `¡r_s£t
+(
+¡r
+,
+¡ab
+);
+
+317 
+l¡ršg
+ *
+l¡r
+ = (l¡ršg*)
+¡r
+;
+
+318 *
+tmps
+;
+
+320
+m¡r
+->
+¡r_¿»
+ = 0;
+
+321
+¡r
+->
+¡r_magic
+ =
+NuΡr
+;
+
+322
+tmps
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+323
+ `¡r_š£¹
+(
+m¡r
+,
+l¡r
+->
+l¡r_off£t
+,l¡r->
+l¡r_Ën
+,
+
+324
+tmps
+,
+¡r
+->
+¡r_cur
+);
+
+329
+ `do_vec£t
+(
+m¡r
+,
+¡r
+);
+
+333 *
+¡ab
+->
+¡r_magic
+->
+¡r_±r
+) {
+
+335 #ifdeà
+DEBUGGING
+
+
+336
+debug
+ = ()(
+ `¡r_gnum
+(
+¡r
+)) | 32768;
+
+340 ià(
+š¶aû
+)
+
+341
+ `Saãä“
+(
+š¶aû
+);
+
+342 ià(
+¡r
+->
+¡r_pok
+ || sŒ->
+¡r_nok
+)
+
+343
+š¶aû
+ =
+ `§ve¡r
+(
+ `¡r_g‘
+(
+¡r
+));
+
+345
+š¶aû
+ =
+NuÎch
+;
+
+348
+ba£time
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+351
+dow¬n
+ = (
+boÞ
+)
+ `¡r_gnum
+(
+¡r
+);
+
+354 ià(
+loÿlizšg
+)
+
+355
+ `§ve¥Œ
+((
+STR
+**)&
+Ï¡_š_¡ab
+);
+
+358
+ `Saãä“
+(
+ `¡ab_io
+(
+curout¡ab
+)->
+tÝ_Çme
+);
+
+359
+ `¡ab_io
+(
+curout¡ab
+)->
+tÝ_Çme
+ =
+s
+ =
+ `§ve¡r
+(
+ `¡r_g‘
+(
+¡r
+));
+
+360
+ `¡ab_io
+(
+curout¡ab
+)->
+tÝ_¡ab
+ =
+ `¡ab’t
+(
+s
+,
+TRUE
+);
+
+363
+ `Saãä“
+(
+ `¡ab_io
+(
+curout¡ab
+)->
+fmt_Çme
+);
+
+364
+ `¡ab_io
+(
+curout¡ab
+)->
+fmt_Çme
+ =
+s
+ =
+ `§ve¡r
+(
+ `¡r_g‘
+(
+¡r
+));
+
+365
+ `¡ab_io
+(
+curout¡ab
+)->
+fmt_¡ab
+ =
+ `¡ab’t
+(
+s
+,
+TRUE
+);
+
+368
+ `¡ab_io
+(
+curout¡ab
+)->
+·ge_Ën
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+371
+ `¡ab_io
+(
+curout¡ab
+)->
+lšes_Ëá
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+372 ià(
+ `¡ab_io
+(
+curout¡ab
+)->
+lšes_Ëá
+ < 0L)
+
+373
+ `¡ab_io
+(
+curout¡ab
+)->
+lšes_Ëá
+ = 0L;
+
+376
+ `¡ab_io
+(
+curout¡ab
+)->
+·ge
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+379 ià(!
+ `¡ab_io
+(
+curout¡ab
+))
+
+380
+ `¡ab_io
+(
+curout¡ab
+èð
+ `¡io_Ãw
+();
+
+381
+ `¡ab_io
+(
+curout¡ab
+)->
+æags
+ &ð~
+IOF_FLUSH
+;
+
+382 ià(
+ `¡r_gnum
+(
+¡r
+) != 0.0) {
+
+383
+ `¡ab_io
+(
+curout¡ab
+)->
+æags
+ |ð
+IOF_FLUSH
+;
+
+387
+i
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+388
+muÉžše
+ = (
+i
+ != 0);
+
+391 ià(
+¡r
+->
+¡r_pok
+) {
+
+392
+rs
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+393
+r¦’
+ =
+¡r
+->
+¡r_cur
+;
+
+394 ià(!
+r¦’
+) {
+
+395
+rs
+ = "\n\n";
+
+396
+r¦’
+ = 2;
+
+398
+rsch¬
+ =
+rs
+[
+r¦’
+ - 1];
+
+401
+rsch¬
+ = 0777;
+
+402
+r¦’
+ = 1;
+
+406 ià(
+Üs
+)
+
+407
+ `Saãä“
+(
+Üs
+);
+
+408
+Üs
+ =
+ `§ve¡r
+(
+ `¡r_g‘
+(
+¡r
+));
+
+409
+ܦ’
+ =
+¡r
+->
+¡r_cur
+;
+
+412 ià(
+ofs
+)
+
+413
+ `Saãä“
+(
+ofs
+);
+
+414
+ofs
+ =
+ `§ve¡r
+(
+ `¡r_g‘
+(
+¡r
+));
+
+415
+of¦’
+ =
+¡r
+->
+¡r_cur
+;
+
+418 ià(
+ofmt
+)
+
+419
+ `Saãä“
+(
+ofmt
+);
+
+420
+ofmt
+ =
+ `§ve¡r
+(
+ `¡r_g‘
+(
+¡r
+));
+
+423
+¬yba£
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+426
+¡©usv®ue
+ =
+ `U_S
+(
+ `¡r_gnum
+(
+¡r
+));
+
+429
+Ӽo
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+432
+uid
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+433 #ifdeà
+HAS_SETREUID
+
+
+434 ià(
+d–aymagic
+) {
+
+435
+d–aymagic
+ |ð
+DM_REUID
+;
+
+439 #ifdeà
+HAS_SETRUID
+
+
+440 ià(
+ `£Œuid
+((
+UIDTYPE
+)
+uid
+) < 0)
+
+441
+uid
+ = ()
+ `g‘uid
+();
+
+443 #ifdeà
+HAS_SETREUID
+
+
+444 ià(
+ `£Œeuid
+((
+UIDTYPE
+)
+uid
+, (UIDTYPE)-1) < 0)
+
+445
+uid
+ = ()
+ `g‘uid
+();
+
+447 ià(
+uid
+ =ð
+euid
+)
+
+448
+ `£tuid
+(
+uid
+);
+
+450
+ `çl
+("setruid()‚ot implemented");
+
+455
+euid
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+456 #ifdeà
+HAS_SETREUID
+
+
+457 ià(
+d–aymagic
+) {
+
+458
+d–aymagic
+ |ð
+DM_REUID
+;
+
+462 #ifdeà
+HAS_SETEUID
+
+
+463 ià(
+ `£‹uid
+((
+UIDTYPE
+)
+euid
+) < 0)
+
+464
+euid
+ = ()
+ `g‘euid
+();
+
+466 #ifdeà
+HAS_SETREUID
+
+
+467 ià(
+ `£Œeuid
+((
+UIDTYPE
+)-1, (UIDTYPE)
+euid
+) < 0)
+
+468
+euid
+ = ()
+ `g‘euid
+();
+
+470 ià(
+euid
+ =ð
+uid
+)
+
+471
+ `£tuid
+(
+euid
+);
+
+473
+ `çl
+("seteuid()‚ot implemented");
+
+478
+gid
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+479 #ifdeà
+HAS_SETREGID
+
+
+480 ià(
+d–aymagic
+) {
+
+481
+d–aymagic
+ |ð
+DM_REGID
+;
+
+485 #ifdeà
+HAS_SETRGID
+
+
+486 ()
+ `£Œgid
+((
+GIDTYPE
+)
+gid
+);
+
+488 #ifdeà
+HAS_SETREGID
+
+
+489 ()
+ `£Œegid
+((
+GIDTYPE
+)
+gid
+, (GIDTYPE)-1);
+
+491
+ `çl
+("setrgid()‚ot implemented");
+
+496
+egid
+ = ()
+ `¡r_gnum
+(
+¡r
+);
+
+497 #ifdeà
+HAS_SETREGID
+
+
+498 ià(
+d–aymagic
+) {
+
+499
+d–aymagic
+ |ð
+DM_REGID
+;
+
+503 #ifdeà
+HAS_SETEGID
+
+
+504 ()
+ `£‹gid
+((
+GIDTYPE
+)
+egid
+);
+
+506 #ifdeà
+HAS_SETREGID
+
+
+507 ()
+ `£Œegid
+((
+GIDTYPE
+)-1, (GIDTYPE)
+egid
+);
+
+509
+ `çl
+("setegid()‚ot implemented");
+
+514
+chݣt
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+517 ià(!
+Üig®’
+) {
+
+518
+s
+ =
+Üig¬gv
+[0];
+
+519
+s
+ +ð
+ `¡¾’
+(s);
+
+521 
+i
+ = 1; i <
+Üig¬gc
+; i++) {
+
+522 ià(
+Üig¬gv
+[
+i
+] =ð
+s
+ + 1)
+
+523
+s
+ +ð
+ `¡¾’
+(++s);
+
+525 ià(
+Üig’vœÚ
+[0] =ð
+s
+ + 1) {
+
+526
+ `my_£‹nv
+("NoNeSuCh",
+NuÎch
+);
+
+527 
+i
+ = 0;
+Üig’vœÚ
+[i]; i++)
+
+528 ià(
+Üig’vœÚ
+[
+i
+] =ð
+s
+ + 1)
+
+529
+s
+ +ð
+ `¡¾’
+(++s);
+
+531
+Üig®’
+ =
+s
+ -
+Üig¬gv
+[0];
+
+533
+s
+ =
+ `¡r_g‘
+(
+¡r
+);
+
+534
+i
+ =
+¡r
+->
+¡r_cur
+;
+
+535 ià(
+i
+ >ð
+Üig®’
+) {
+
+536
+i
+ =
+Üig®’
+;
+
+537
+¡r
+->
+¡r_cur
+ =
+i
+;
+
+538
+¡r
+->
+¡r_±r
+[
+i
+] = '\0';
+
+539
+ `bcÝy
+(
+s
+,
+Üig¬gv
+[0],
+i
+);
+
+542
+ `bcÝy
+(
+s
+,
+Üig¬gv
+[0],
+i
+);
+
+543
+s
+ =
+Üig¬gv
+[0]+
+i
+;
+
+544 *
+s
+++ = '\0';
+
+545 ++
+i
+ <
+Üig®’
+)
+
+546 *
+s
+++ = ' ';
+
+551 
+ufuncs
+ *
+uf
+ = (ufunc *)
+¡r
+->
+¡r_magic
+->
+¡r_±r
+;
+
+553 ià(
+uf
+ && uf->
+uf_£t
+)
+
+554 (*
+uf
+->
+uf_£t
+)(uf->
+uf_šdex
+,
+¡r
+);
+
+560
+ }
+}
+
+562
+ $whichsig
+(
+sig
+)
+
+563 *
+sig
+;
+
+565 **
+sigv
+;
+
+567 
+sigv
+ =
+sig_Çme
++1; *sigv; sigv++)
+
+568 ià(
+ `¡rEQ
+(
+sig
+,*
+sigv
+))
+
+569 
+sigv
+ -
+sig_Çme
+;
+
+570 #ifdeà
+SIGCLD
+
+
+571 ià(
+ `¡rEQ
+(
+sig
+,"CHLD"))
+
+572 
+SIGCLD
+;
+
+574 #ifdeà
+SIGCHLD
+
+
+575 ià(
+ `¡rEQ
+(
+sig
+,"CLD"))
+
+576 
+SIGCHLD
+;
+
+579
+ }
+}
+
+581 
+hªd˹y³
+
+
+582
+ $sighªdËr
+(
+sig
+)
+
+583 
+sig
+;
+
+585
+STAB
+ *
+¡ab
+;
+
+586
+STR
+ *
+¡r
+;
+
+587 
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+588 
+Þdtmps_ba£
+ =
+tmps_ba£
+;
+
+589 
+CSV
+ *
+csv
+;
+
+590
+SUBR
+ *
+sub
+;
+
+592 #ifdeà
+OS2
+
+
+593
+ `sigÇl
+(
+sig
+,
+SIG_ACK
+);
+
+595
+¡ab
+ =
+ `¡ab’t
+(
+
+596
+ `¡r_g‘
+(
+ `hãtch
+(
+ `¡ab_hash
+(
+sig¡ab
+),
+sig_Çme
+[
+sig
+],
+ `¡¾’
+(sig_name[sig]),
+
+597
+TRUE
+)), TRUE);
+
+598
+sub
+ =
+ `¡ab_sub
+(
+¡ab
+);
+
+599 ià(!
+sub
+ && *
+sig_Çme
+[
+sig
+] =ð'C' &&
+ `š¡r
+(sig_name[sig],"LD")) {
+
+600 ià(
+sig_Çme
+[
+sig
+][1] == 'H')
+
+601
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+ `hãtch
+(
+ `¡ab_hash
+(
+sig¡ab
+),"CLD",3,
+TRUE
+)),
+
+602
+TRUE
+);
+
+604
+¡ab
+ =
+ `¡ab’t
+(
+ `¡r_g‘
+(
+ `hãtch
+(
+ `¡ab_hash
+(
+sig¡ab
+),"CHLD",4,
+TRUE
+)),
+
+605
+TRUE
+);
+
+606
+sub
+ =
+ `¡ab_sub
+(
+¡ab
+);
+
+608 ià(!
+sub
+) {
+
+609 ià(
+dow¬n
+)
+
+610
+ `w¬n
+("SIG%s handler \"%s\"‚ot defined.\n",
+
+611
+sig_Çme
+[
+sig
+],
+ `¡ab_Çme
+(
+¡ab
+) );
+
+614
+ `§v—±r
+(&
+¡ack
+);
+
+615
+¡r
+ =
+ `SŒ_Ãw
+(15, (
+CSV
+));
+
+616
+¡r
+->
+¡r_¡©e
+ =
+SS_SCSV
+;
+
+617 ()
+ `­ush
+(
+§ve¡ack
+,
+¡r
+);
+
+618
+csv
+ = (
+CSV
+*)
+¡r
+->
+¡r_±r
+;
+
+619
+csv
+->
+sub
+ = sub;
+
+620
+csv
+->
+¡ab
+ = stab;
+
+621
+csv
+->
+curcsv
+ = curcsv;
+
+622
+csv
+->
+curcmd
+ = curcmd;
+
+623
+csv
+->
+d•th
+ =
+sub
+->depth;
+
+624
+csv
+->
+wª¼ay
+ =
+G_SCALAR
+;
+
+625
+csv
+->
+ha§rgs
+ =
+TRUE
+;
+
+626
+csv
+->
+§v—¼ay
+ =
+ `¡ab_x¬¿y
+(
+def¡ab
+);
+
+627
+csv
+->
+¬g¬¿y
+ =
+ `¡ab_x¬¿y
+(
+def¡ab
+èð
+¡ack
+ =
+ `ªew
+(defstab);
+
+628
+¡ack
+->
+¬y_æags
+ = 0;
+
+629
+curcsv
+ =
+csv
+;
+
+630
+¡r
+ =
+ `¡r_mÜl
+(&
+¡r_undef
+);
+
+631
+ `¡r_£t
+(
+¡r
+,
+sig_Çme
+[
+sig
+]);
+
+632 ()
+ `­ush
+(
+ `¡ab_x¬¿y
+(
+def¡ab
+),
+¡r
+);
+
+633
+sub
+->
+d•th
+++;
+
+634 ià(
+sub
+->
+d•th
+ >= 2) {
+
+635 ià(
+sub
+->
+d•th
+ =ð100 &&
+dow¬n
+)
+
+636
+ `w¬n
+("D“°»cursiÚ oÀsubroutš\"%s\"",
+ `¡ab_Çme
+(
+¡ab
+));
+
+637
+ `§v–i¡
+(
+sub
+->
+to§ve
+->
+¬y_¬¿y
+,sub->to§ve->
+¬y_fžl
+);
+
+640
+tmps_ba£
+ =
+tmps_max
+;
+
+641 ()
+ `cmd_exec
+(
+sub
+->
+cmd
+,
+G_SCALAR
+,0);
+
+642
+tmps_ba£
+ =
+Þdtmps_ba£
+;
+
+644
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+645
+ }
+}
+
+647
+STAB
+ *
+
+648
+ $¯dd
+(
+¡ab
+)
+
+649 
+STAB
+ *
+¡ab
+;
+
+651 ià(!
+ `¡ab_x¬¿y
+(
+¡ab
+))
+
+652
+ `¡ab_x¬¿y
+(
+¡ab
+èð
+ `ªew
+(stab);
+
+653 
+¡ab
+;
+
+654
+ }
+}
+
+656
+STAB
+ *
+
+657
+ $hadd
+(
+¡ab
+)
+
+658 
+STAB
+ *
+¡ab
+;
+
+660 ià(!
+ `¡ab_xhash
+(
+¡ab
+))
+
+661
+ `¡ab_xhash
+(
+¡ab
+èð
+ `hÃw
+(
+COEFFSIZE
+);
+
+662 
+¡ab
+;
+
+663
+ }
+}
+
+665
+STAB
+ *
+
+666
+ $f¡ab
+(
+Çme
+)
+
+667 *
+Çme
+;
+
+669 
+tmpbuf
+[1200];
+
+670
+STAB
+ *
+¡ab
+;
+
+672
+ `¥rštf
+(
+tmpbuf
+,"'_<%s",
+Çme
+);
+
+673
+¡ab
+ =
+ `¡ab’t
+(
+tmpbuf
+,
+TRUE
+);
+
+674
+ `¡r_£t
+(
+ `¡ab_v®
+(
+¡ab
+),
+Çme
+);
+
+675 ià(
+³¾db
+)
+
+676 ()
+ `hadd
+(
+ `¯dd
+(
+¡ab
+));
+
+677 
+¡ab
+;
+
+678
+ }
+}
+
+680
+STAB
+ *
+
+681
+ $¡ab’t
+(
+Çme
+,
+add
+)
+
+682 *
+Çme
+;
+
+683 
+add
+;
+
+685 
+STAB
+ *
+¡ab
+;
+
+686 
+STBP
+ *
+¡bp
+;
+
+687 
+Ën
+;
+
+688 *
+Çm’d
+;
+
+689
+HASH
+ *
+¡ash
+;
+
+690 *
+§wquÙe
+ =
+NuÎch
+;
+
+691 *
+´evquÙe
+ =
+NuÎch
+;
+
+692
+boÞ
+
+glob®
+ =
+FALSE
+;
+
+694 ià(
+ `i§scii
+(*
+Çme
+è&&
+ `isuµ”
+(*name)) {
+
+695 ià(*
+Çme
+ > 'I') {
+
+696 ià(*
+Çme
+ == 'S' && (
+
+697
+ `¡rEQ
+(
+Çme
+, "SIG") ||
+
+698
+ `¡rEQ
+(
+Çme
+, "STDIN") ||
+
+699
+ `¡rEQ
+(
+Çme
+, "STDOUT") ||
+
+700
+ `¡rEQ
+(
+Çme
+, "STDERR") ))
+
+701
+glob®
+ =
+TRUE
+;
+
+703 ià(*
+Çme
+ > 'E') {
+
+704 ià(*
+Çme
+ =ð'I' &&
+ `¡rEQ
+(name, "INC"))
+
+705
+glob®
+ =
+TRUE
+;
+
+707 ià(*
+Çme
+ > 'A') {
+
+708 ià(*
+Çme
+ =ð'E' &&
+ `¡rEQ
+(name, "ENV"))
+
+709
+glob®
+ =
+TRUE
+;
+
+711 ià(*
+Çme
+ == 'A' && (
+
+712
+ `¡rEQ
+(
+Çme
+, "ARGV") ||
+
+713
+ `¡rEQ
+(
+Çme
+, "ARGVOUT") ))
+
+714
+glob®
+ =
+TRUE
+;
+
+716 
+Çm’d
+ =
+Çme
+; *namend;‚amend++) {
+
+717 ià(*
+Çm’d
+ == '\'' &&‚amend[1])
+
+718
+´evquÙe
+ =
+§wquÙe
+, sawquÙð
+Çm’d
+;
+
+720 ià(
+§wquÙe
+ =ð
+Çme
+ &&‚ame[1]) {
+
+721
+¡ash
+ =
+def¡ash
+;
+
+722
+§wquÙe
+ =
+NuÎch
+;
+
+723
+Çme
+++;
+
+725 ià(!
+ `i§Íha
+(*
+Çme
+è||
+glob®
+)
+
+726
+¡ash
+ =
+def¡ash
+;
+
+727 ià(
+curcmd
+ =ð&
+compžšg
+)
+
+728
+¡ash
+ =
+cur¡ash
+;
+
+730
+¡ash
+ =
+curcmd
+->
+c_¡ash
+;
+
+731 ià(
+§wquÙe
+) {
+
+732 
+tmpbuf
+[256];
+
+733 *
+s
+, *
+d
+;
+
+735 *
+§wquÙe
+ = '\0';
+
+736 ià(
+s
+ =
+´evquÙe
+) {
+
+737
+ `¡ºýy
+(
+tmpbuf
+,
+Çme
+,
+s
+-name+1);
+
+738
+d
+ =
+tmpbuf
++(
+s
+-
+Çme
++1);
+
+739 *
+d
+++ = '_';
+
+740
+ `¡rýy
+(
+d
+,
+s
++1);
+
+743 *
+tmpbuf
+ = '_';
+
+744
+ `¡rýy
+(
+tmpbuf
++1,
+Çme
+);
+
+746
+¡ab
+ =
+ `¡ab’t
+(
+tmpbuf
+,
+TRUE
+);
+
+747 ià(!(
+¡ash
+ =
+ `¡ab_xhash
+(
+¡ab
+)))
+
+748
+¡ash
+ =
+ `¡ab_xhash
+(
+¡ab
+èð
+ `hÃw
+(0);
+
+749 ià(!
+¡ash
+->
+tbl_Çme
+)
+
+750
+¡ash
+->
+tbl_Çme
+ =
+ `§ve¡r
+(
+Çme
+);
+
+751
+Çme
+ =
+§wquÙe
++1;
+
+752 *
+§wquÙe
+ = '\'';
+
+754
+Ën
+ =
+Çm’d
+ -
+Çme
+;
+
+755
+¡ab
+ = (
+STAB
+*)
+ `hãtch
+(
+¡ash
+,
+Çme
+,
+Ën
+,
+add
+);
+
+756 ià(
+¡ab
+ =ð(
+STAB
+*)&
+¡r_undef
+)
+
+757 
+NuΡab
+;
+
+758 ià(
+¡ab
+->
+¡r_pok
+) {
+
+759
+¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+760 
+¡ab
+;
+
+763 ià(
+¡ab
+->
+¡r_Ën
+)
+
+764
+ `Saãä“
+(
+¡ab
+->
+¡r_±r
+);
+
+765
+ `Newz
+(602,
+¡bp
+, 1,
+STBP
+);
+
+766
+¡ab
+->
+¡r_±r
+ =
+¡bp
+;
+
+767
+¡ab
+->
+¡r_Ën
+ = sb->
+¡r_cur
+ = (
+STBP
+);
+
+768
+¡ab
+->
+¡r_pok
+ = 1;
+
+769
+ `¡rýy
+(
+ `¡ab_magic
+(
+¡ab
+),"StB");
+
+770
+ `¡ab_v®
+(
+¡ab
+èð
+ `SŒ_Ãw
+(72,0);
+
+771
+ `¡ab_lše
+(
+¡ab
+èð
+curcmd
+->
+c_lše
+;
+
+772
+ `¡r_magic
+(
+¡ab
+,¡ab,'*',
+Çme
+,
+Ën
+);
+
+773
+ `¡ab_¡ash
+(
+¡ab
+èð
+¡ash
+;
+
+774 ià(
+ `isdig™
+(*
+Çme
+) && *name != '0') {
+
+775
+ `¡ab_æags
+(
+¡ab
+èð
+SF_VMAGIC
+;
+
+776
+ `¡r_magic
+(
+ `¡ab_v®
+(
+¡ab
+), sb, 0,
+NuÎch
+, 0);
+
+778 
+¡ab
+;
+
+780
+ }
+}
+
+782
+ $¡ab_fuÎÇme
+(
+¡r
+,
+¡ab
+)
+
+783
+STR
+ *
+¡r
+;
+
+784
+STAB
+ *
+¡ab
+;
+
+786
+HASH
+ *
+tb
+ =
+ `¡ab_¡ash
+(
+¡ab
+);
+
+788 ià(!
+tb
+)
+
+790
+ `¡r_£t
+(
+¡r
+,
+tb
+->
+tbl_Çme
+);
+
+791
+ `¡r_nÿt
+(
+¡r
+,"'", 1);
+
+792
+ `¡r_sÿt
+(
+¡r
+,
+¡ab
+->
+¡r_magic
+);
+
+793
+ }
+}
+
+795
+STIO
+ *
+
+796
+ $¡io_Ãw
+()
+
+798
+STIO
+ *
+¡io
+;
+
+800
+ `Newz
+(603,
+¡io
+,1,
+STIO
+);
+
+801
+¡io
+->
+·ge_Ën
+ = 60;
+
+802 
+¡io
+;
+
+803
+ }
+}
+
+805
+ $¡ab_check
+(
+mš
+,
+max
+)
+
+806 
+mš
+;
+
+807 
+max
+;
+
+809 
+HENT
+ *
+’Œy
+;
+
+810 
+i
+;
+
+811 
+STAB
+ *
+¡ab
+;
+
+813 
+i
+ =
+mš
+; i <ð
+max
+; i++) {
+
+814 
+’Œy
+ =
+def¡ash
+->
+tbl_¬¿y
+[
+i
+];ƒÁry;ƒÁry =ƒÁry->
+h’t_Ãxt
+) {
+
+815
+¡ab
+ = (
+STAB
+*)
+’Œy
+->
+h’t_v®
+;
+
+816 ià(
+¡ab
+->
+¡r_pok
+ &
+SP_MULTI
+)
+
+818
+curcmd
+->
+c_lše
+ =
+ `¡ab_lše
+(
+¡ab
+);
+
+819
+ `w¬n
+("PossibËypo: \"%s\"",
+ `¡ab_Çme
+(
+¡ab
+));
+
+822
+ }
+}
+
+824 
+ gg’sym
+ = 0;
+
+826
+STAB
+ *
+
+827
+ $g’¡ab
+()
+
+829 ()
+ `¥rštf
+(
+tok’buf
+,"_GEN_%d",
+g’sym
+++);
+
+830 
+ `¡ab’t
+(
+tok’buf
+,
+TRUE
+);
+
+831
+ }
+}
+
+836
+ $¡ab_þ—r
+(
+¡ab
+)
+
+837 
+STAB
+ *
+¡ab
+;
+
+839
+STIO
+ *
+¡io
+;
+
+840
+SUBR
+ *
+sub
+;
+
+842
+ `aä“
+(
+ `¡ab_x¬¿y
+(
+¡ab
+));
+
+843
+ `¡ab_x¬¿y
+(
+¡ab
+èð
+ `NuÎ
+(
+ARRAY
+*);
+
+844 ()
+ `hä“
+(
+ `¡ab_xhash
+(
+¡ab
+),
+FALSE
+);
+
+845
+ `¡ab_xhash
+(
+¡ab
+èð
+ `NuÎ
+(
+HASH
+*);
+
+846
+ `¡r_ä“
+(
+ `¡ab_v®
+(
+¡ab
+));
+
+847
+ `¡ab_v®
+(
+¡ab
+èð
+NuΡr
+;
+
+848 ià(
+¡io
+ =
+ `¡ab_io
+(
+¡ab
+)) {
+
+849
+ `do_þo£
+(
+¡ab
+,
+FALSE
+);
+
+850
+ `Saãä“
+(
+¡io
+->
+tÝ_Çme
+);
+
+851
+ `Saãä“
+(
+¡io
+->
+fmt_Çme
+);
+
+853 ià(
+sub
+ =
+ `¡ab_sub
+(
+¡ab
+)) {
+
+854
+ `aä“
+(
+sub
+->
+to§ve
+);
+
+855
+ `cmd_ä“
+(
+sub
+->
+cmd
+);
+
+857
+ `Saãä“
+(
+¡ab
+->
+¡r_±r
+);
+
+858
+¡ab
+->
+¡r_±r
+ =
+ `NuÎ
+(
+STBP
+*);
+
+859
+¡ab
+->
+¡r_Ën
+ = 0;
+
+860
+¡ab
+->
+¡r_cur
+ = 0;
+
+861
+ }
+}
+
+863 #ià
+defšed
+(
+CRIPPLED_CC
+è&& (defšed(
+iAPX286
+è|| defšed(
+M_I286
+è|| defšed(
+I80286
+))
+
+864 
+ #MICROPORT
+
+
+ )
+
+867 #ifdef
+MICROPORT
+
+
+868
+ARRAY
+ *
+ $¡ab_¬¿y
+(
+¡ab
+)
+
+869 
+STAB
+ *
+¡ab
+;
+
+871 ià(((
+STBP
+*)(
+¡ab
+->
+¡r_±r
+))->
+¡bp_¬¿y
+)
+
+872  ((
+STBP
+*)(
+¡ab
+->
+¡r_±r
+))->
+¡bp_¬¿y
+;
+
+874  ((
+STBP
+*)(
+ `¯dd
+(
+¡ab
+)->
+¡r_±r
+))->
+¡bp_¬¿y
+;
+
+875
+ }
+}
+
+877
+HASH
+ *
+ $¡ab_hash
+(
+¡ab
+)
+
+878 
+STAB
+ *
+¡ab
+;
+
+880 ià(((
+STBP
+*)(
+¡ab
+->
+¡r_±r
+))->
+¡bp_hash
+)
+
+881  ((
+STBP
+*)(
+¡ab
+->
+¡r_±r
+))->
+¡bp_hash
+;
+
+883  ((
+STBP
+*)(
+ `hadd
+(
+¡ab
+)->
+¡r_±r
+))->
+¡bp_hash
+;
+
+884
+ }
+}
+
+ @stab.h
+
+14 
+ s¡ab±rs
+ {
+
+15 
+ m¡bp_magic
+[4];
+
+16
+STR
+ *
+ m¡bp_v®
+;
+
+17 
+¡io
+ *
+ m¡bp_io
+;
+
+18
+FCMD
+ *
+ m¡bp_fÜm
+;
+
+19
+ARRAY
+ *
+ m¡bp_¬¿y
+;
+
+20
+HASH
+ *
+ m¡bp_hash
+;
+
+21
+HASH
+ *
+ m¡bp_¡ash
+;
+
+22
+SUBR
+ *
+ m¡bp_sub
+;
+
+23 
+ m¡bp_Ï¡ex´
+;
+
+24
+lše_t
+
+ m¡bp_lše
+;
+
+25 
+ m¡bp_æags
+;
+
+28 #ià
+defšed
+(
+CRIPPLED_CC
+è&& (defšed(
+iAPX286
+è|| defšed(
+M_I286
+è|| defšed(
+I80286
+))
+
+29 
+ #MICROPORT
+
+
+ )
+
+32 
+ #¡ab_magic
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_magic
+)
+
+ )
+
+33 
+ #¡ab_v®
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_v®
+)
+
+ )
+
+34 
+ #¡ab_io
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_io
+)
+
+ )
+
+35 
+ #¡ab_fÜm
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_fÜm
+)
+
+ )
+
+36 
+ #¡ab_x¬¿y
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_¬¿y
+)
+
+ )
+
+37 #ifdef
+MICROPORT
+
+
+38
+ARRAY
+ *
+¡ab_¬¿y
+();
+
+40 
+ #¡ab_¬¿y
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_¬¿y
+ ? \
+
+41 ((
+STBP
+*)(
+¡ab
+->
+¡r_±r
+))->
+¡bp_¬¿y
+ : \
+
+42 ((
+STBP
+*)(
+ `¯dd
+(
+¡ab
+)->
+¡r_±r
+))->
+¡bp_¬¿y
+)
+
+ )
+
+44 
+ #¡ab_xhash
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_hash
+)
+
+ )
+
+45 #ifdef
+MICROPORT
+
+
+46
+HASH
+ *
+¡ab_hash
+();
+
+48 
+ #¡ab_hash
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_hash
+ ? \
+
+49 ((
+STBP
+*)(
+¡ab
+->
+¡r_±r
+))->
+¡bp_hash
+ : \
+
+50 ((
+STBP
+*)(
+ `hadd
+(
+¡ab
+)->
+¡r_±r
+))->
+¡bp_hash
+)
+
+ )
+
+52 
+ #¡ab_¡ash
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_¡ash
+)
+
+ )
+
+53 
+ #¡ab_sub
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_sub
+)
+
+ )
+
+54 
+ #¡ab_Ï¡ex´
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_Ï¡ex´
+)
+
+ )
+
+55 
+ #¡ab_lše
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_lše
+)
+
+ )
+
+56 
+ #¡ab_æags
+(
+¡ab
+è(((
+STBP
+*)(¡ab->
+¡r_±r
+))->
+¡bp_æags
+)
+
+ )
+
+57 
+ #¡ab_Çme
+(
+¡ab
+è(¡ab->
+¡r_magic
+->
+¡r_±r
+)
+
+ )
+
+59 
+ #SF_VMAGIC
+ 1
+
+ )
+
+60 
+ #SF_MULTI
+ 2
+
+ )
+
+62 
+ s¡io
+ {
+
+63
+FILE
+ *
+ miå
+;
+
+64
+FILE
+ *
+ moå
+;
+
+65 #ifdeà
+HAS_READDIR
+
+
+66
+DIR
+ *
+ mdœp
+;
+
+68 
+ mlšes
+;
+
+69 
+ m·ge
+;
+
+70 
+ m·ge_Ën
+;
+
+71 
+ mlšes_Ëá
+;
+
+72 *
+ mtÝ_Çme
+;
+
+73
+STAB
+ *
+ mtÝ_¡ab
+;
+
+74 *
+ mfmt_Çme
+;
+
+75
+STAB
+ *
+ mfmt_¡ab
+;
+
+76 
+ msub´oûss
+;
+
+77 
+ mty³
+;
+
+78 
+ mæags
+;
+
+81 
+ #IOF_ARGV
+ 1
+
+ )
+
+82 
+ #IOF_START
+ 2
+
+ )
+
+83 
+ #IOF_FLUSH
+ 4
+
+ )
+
+85 
+ ssub
+ {
+
+86
+CMD
+ *
+ mcmd
+;
+
+87 (*
+ mu£rsub
+)();
+
+88 
+ mu£ršdex
+;
+
+89
+STAB
+ *
+ mfže¡ab
+;
+
+90 
+ md•th
+;
+
+91
+ARRAY
+ *
+ mto§ve
+;
+
+94 
+ #NuΡab
+
+ `NuÎ
+(
+STAB
+*)
+
+ )
+
+96 
+ #STAB_STR
+(
+s
+è(
+tmp¡ab
+ = (s),
+ `¡ab_æags
+Ñmp¡abè&
+SF_VMAGIC
+ ?
+ `¡ab_¡r
+(
+ `¡ab_v®
+Ñmp¡ab)->
+¡r_magic
+è: sb_v®Ñmp¡ab))
+
+ )
+
+97 
+ #STAB_GET
+(
+s
+è(
+tmp¡ab
+ = (s),
+ `¡r_g‘
+(
+ `¡ab_æags
+Ñmp¡abè&
+SF_VMAGIC
+ ?
+ `¡ab_¡r
+Ñmp¡ab->
+¡r_magic
+è:
+ `¡ab_v®
+Ñmp¡ab)))
+
+ )
+
+98 
+ #STAB_GNUM
+(
+s
+è(
+tmp¡ab
+ = (s),
+ `¡r_gnum
+(
+ `¡ab_æags
+Ñmp¡abè&
+SF_VMAGIC
+ ?
+ `¡ab_¡r
+Ñmp¡ab->
+¡r_magic
+è:
+ `¡ab_v®
+Ñmp¡ab)))
+
+ )
+
+100
+EXT
+
+STAB
+ *
+ gtmp¡ab
+;
+
+102
+EXT
+
+STAB
+ *
+ g¡ab_šdex
+[128];
+
+104
+EXT
+ 
+ g¡©usv®ue
+;
+
+106
+EXT
+ 
+d–aymagic
+
+INIT
+(0);
+
+107 
+ #DM_DELAY
+ 1
+
+ )
+
+108 
+ #DM_REUID
+ 2
+
+ )
+
+109 
+ #DM_REGID
+ 4
+
+ )
+
+111
+STAB
+ *
+¯dd
+();
+
+112
+STAB
+ *
+hadd
+();
+
+113
+STAB
+ *
+f¡ab
+();
+
+ @str.c
+
+19 
+ ~"EXTERN.h
+"
+
+20 
+ ~"³¾.h
+"
+
+21 
+ ~"³¾y.h
+"
+
+23 #iâdeà
+¡r_g‘
+
+
+25
+ $¡r_g‘
+(
+¡r
+)
+
+26
+STR
+ *
+¡r
+;
+
+28 #ifdeà
+TAINT
+
+
+29
+š‹d
+ |ð
+¡r
+->
+¡r_š‹d
+;
+
+31 
+¡r
+->
+¡r_pok
+ ? sŒ->
+¡r_±r
+ :
+ `¡r_2±r
+(str);
+
+32
+ }
+}
+
+38 #iâdeà
+¡r_Œue
+
+
+39
+ $¡r_Œue
+(
+SŒ
+)
+
+40
+STR
+ *
+SŒ
+;
+
+42 ià(
+SŒ
+->
+¡r_pok
+) {
+
+43 ià(*
+SŒ
+->
+¡r_±r
+ > '0' ||
+
+44
+SŒ
+->
+¡r_cur
+ > 1 ||
+
+45 (
+SŒ
+->
+¡r_cur
+ && *SŒ->
+¡r_±r
+ != '0'))
+
+49 ià(
+SŒ
+->
+¡r_nok
+)
+
+50  (
+SŒ
+->
+¡r_u
+.
+¡r_nv®
+ != 0.0);
+
+52
+ }
+}
+
+55 #iâdeà
+¡r_gnum
+
+
+56 
+ $¡r_gnum
+(
+SŒ
+)
+
+57
+STR
+ *
+SŒ
+;
+
+59 #ifdeà
+TAINT
+
+
+60
+š‹d
+ |ð
+SŒ
+->
+¡r_š‹d
+;
+
+62 ià(
+SŒ
+->
+¡r_nok
+)
+
+63 
+SŒ
+->
+¡r_u
+.
+¡r_nv®
+;
+
+64 
+ `¡r_2num
+(
+SŒ
+);
+
+65
+ }
+}
+
+70
+ $¡r_grow
+(
+¡r
+,
+ÃwËn
+)
+
+71 
+STR
+ *
+¡r
+;
+
+72 #iâdeà
+MSDOS
+
+
+73 
+ÃwËn
+;
+
+75 
+ÃwËn
+;
+
+78 *
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+80 #ifdeà
+MSDOS
+
+
+81 ià(
+ÃwËn
+ >= 0x10000) {
+
+82
+ `årštf
+(
+¡d”r
+, "AÎoÿtiÚoØÏrge: %lx\n",
+ÃwËn
+);
+
+83
+ `ex™
+(1);
+
+86 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+) {
+
+87
+¡r
+->
+¡r_Ën
+ +ð¡r->
+¡r_u
+.
+¡r_u£ful
+;
+
+88
+¡r
+->
+¡r_±r
+ -ð¡r->
+¡r_u
+.
+¡r_u£ful
+;
+
+89
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+ = 0L;
+
+90
+ `bcÝy
+(
+s
+,
+¡r
+->
+¡r_±r
+, sŒ->
+¡r_cur
++1);
+
+91
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+92
+¡r
+->
+¡r_¡©e
+ =
+SS_NORM
+;
+
+93 ià(
+ÃwËn
+ >
+¡r
+->
+¡r_Ën
+)
+
+94
+ÃwËn
+ +ð10 * (ÃwËÀ-
+¡r
+->
+¡r_cur
+);
+
+96 ià(
+ÃwËn
+ >
+¡r
+->
+¡r_Ën
+) {
+
+97 ià(
+¡r
+->
+¡r_Ën
+)
+
+98
+ `R’ew
+(
+s
+,
+ÃwËn
+,);
+
+100
+ `New
+(703,
+s
+,
+ÃwËn
+,);
+
+101
+¡r
+->
+¡r_±r
+ =
+s
+;
+
+102
+¡r
+->
+¡r_Ën
+ =
+ÃwËn
+;
+
+104 
+s
+;
+
+105
+ }
+}
+
+107
+ $¡r_num£t
+(
+¡r
+,
+num
+)
+
+108 
+STR
+ *
+¡r
+;
+
+109 
+num
+;
+
+111 ià(
+¡r
+->
+¡r_pok
+) {
+
+112
+¡r
+->
+¡r_pok
+ = 0;
+
+113 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+)
+
+114
+ `SŒ_Grow
+(
+¡r
+,0);
+
+116
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ =
+num
+;
+
+117
+¡r
+->
+¡r_¡©e
+ =
+SS_NORM
+;
+
+118
+¡r
+->
+¡r_nok
+ = 1;
+
+119 #ifdeà
+TAINT
+
+
+120
+¡r
+->
+¡r_š‹d
+ =
+š‹d
+;
+
+122
+ }
+}
+
+125
+ $¡r_2±r
+(
+¡r
+)
+
+126 
+STR
+ *
+¡r
+;
+
+128 *
+s
+;
+
+129 
+Þd”ºo
+;
+
+131 ià(!
+¡r
+)
+
+133 ià(
+¡r
+->
+¡r_nok
+) {
+
+134
+ `STR_GROW
+(
+¡r
+, 30);
+
+135
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+136
+Þd”ºo
+ =
+Ӽo
+;
+
+137 #ià
+ `defšed
+(
+scs
+è&& defšed(
+ns32000
+)
+
+138
+ `gcvt
+(
+¡r
+->
+¡r_u
+.
+¡r_nv®
+,20,
+s
+);
+
+140 #ifdeà
+­Þlo
+
+
+141 ià(
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ == 0.0)
+
+142 ()
+ `¡rýy
+(
+s
+,"0");
+
+145 ()
+ `¥rštf
+(
+s
+,"%.20g",
+¡r
+->
+¡r_u
+.
+¡r_nv®
+);
+
+147
+Ӽo
+ =
+Þd”ºo
+;
+
+148 *
+s
+) s++;
+
+149 #ifdeà
+hcx
+
+
+150 ià(
+s
+[-1] == '.')
+
+151
+s
+--;
+
+155 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+156 
+No
+;
+
+157 ià(
+dow¬n
+)
+
+158
+ `w¬n
+("Use of uninitialized variable");
+
+159
+ `STR_GROW
+(
+¡r
+, 30);
+
+160
+s
+ =
+¡r
+->
+¡r_±r
+;
+
+162 *
+s
+ = '\0';
+
+163
+¡r
+->
+¡r_cur
+ =
+s
+ - sŒ->
+¡r_±r
+;
+
+164
+¡r
+->
+¡r_pok
+ = 1;
+
+165 #ifdeà
+DEBUGGING
+
+
+166 ià(
+debug
+ & 32)
+
+167
+ `årštf
+(
+¡d”r
+,"0x%lx…Œ(%s)\n",
+¡r
+,¡r->
+¡r_±r
+);
+
+169 
+¡r
+->
+¡r_±r
+;
+
+170
+ }
+}
+
+173
+ $¡r_2num
+(
+¡r
+)
+
+174 
+STR
+ *
+¡r
+;
+
+176 ià(!
+¡r
+)
+
+178 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+)
+
+179
+ `SŒ_Grow
+(
+¡r
+,0);
+
+180
+¡r
+->
+¡r_¡©e
+ =
+SS_NORM
+;
+
+181 ià(
+¡r
+->
+¡r_Ën
+ && sŒ->
+¡r_pok
+)
+
+182
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ =
+ `©of
+(¡r->
+¡r_±r
+);
+
+184 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+186 ià(
+dow¬n
+)
+
+187
+ `w¬n
+("Use of uninitialized variable");
+
+188
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ = 0.0;
+
+190
+¡r
+->
+¡r_nok
+ = 1;
+
+191 #ifdeà
+DEBUGGING
+
+
+192 ià(
+debug
+ & 32)
+
+193
+ `årštf
+(
+¡d”r
+,"0x%lx‚um(%g)\n",
+¡r
+,¡r->
+¡r_u
+.
+¡r_nv®
+);
+
+195 
+¡r
+->
+¡r_u
+.
+¡r_nv®
+;
+
+196
+ }
+}
+
+203
+ $¡r_s£t
+(
+d¡r
+,
+s¡r
+)
+
+204
+STR
+ *
+d¡r
+;
+
+205 
+STR
+ *
+s¡r
+;
+
+207 #ifdeà
+TAINT
+
+
+208 ià(
+s¡r
+)
+
+209
+š‹d
+ |ð
+s¡r
+->
+¡r_š‹d
+;
+
+211 ià(
+s¡r
+ =ð
+d¡r
+ || d¡¸=ð&
+¡r_undef
+)
+
+213 ià(!
+s¡r
+)
+
+214
+d¡r
+->
+¡r_pok
+ = d¡r->
+¡r_nok
+ = 0;
+
+215 ià(
+s¡r
+->
+¡r_pok
+) {
+
+224 ià(
+s¡r
+->
+¡r_pok
+ &
+SP_TEMP
+) {
+
+225 ià(
+d¡r
+->
+¡r_±r
+) {
+
+226 ià(
+d¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+)
+
+227
+d¡r
+->
+¡r_±r
+ -ðd¡r->
+¡r_u
+.
+¡r_u£ful
+;
+
+228
+ `Saãä“
+(
+d¡r
+->
+¡r_±r
+);
+
+230
+d¡r
+->
+¡r_±r
+ =
+s¡r
+->str_ptr;
+
+231
+d¡r
+->
+¡r_Ën
+ =
+s¡r
+->str_len;
+
+232
+d¡r
+->
+¡r_cur
+ =
+s¡r
+->str_cur;
+
+233
+d¡r
+->
+¡r_¡©e
+ =
+s¡r
+->str_state;
+
+234
+d¡r
+->
+¡r_pok
+ =
+s¡r
+->¡r_pok & ~
+SP_TEMP
+;
+
+235 #ifdeà
+TAINT
+
+
+236
+d¡r
+->
+¡r_š‹d
+ =
+s¡r
+->str_tainted;
+
+238
+s¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+239
+s¡r
+->
+¡r_Ën
+ = 0;
+
+240
+s¡r
+->
+¡r_pok
+ = 0;
+
+241
+s¡r
+->
+¡r_¡©e
+ = 0;
+
+244 ià(
+d¡r
+->
+¡r_±r
+) {
+
+245 ià(
+d¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+) {
+
+246
+ `SŒ_Grow
+(
+d¡r
+,0);
+
+249
+ `¡r_n£t
+(
+d¡r
+,
+s¡r
+->
+¡r_±r
+,s¡r->
+¡r_cur
+);
+
+251 ià(
+d¡r
+->
+¡r_nok
+ =
+s¡r
+->str_nok)
+
+252
+d¡r
+->
+¡r_u
+.
+¡r_nv®
+ =
+s¡r
+->str_u.str_nval;
+
+254 #ifdeà
+STRUCTCOPY
+
+
+255
+d¡r
+->
+¡r_u
+ =
+s¡r
+->str_u;
+
+257
+d¡r
+->
+¡r_u
+.
+¡r_nv®
+ =
+s¡r
+->str_u.str_nval;
+
+259 ià(
+d¡r
+->
+¡r_cur
+ =ð(
+STBP
+)) {
+
+260 *
+tmps
+ =
+d¡r
+->
+¡r_±r
+;
+
+262 ià(*
+tmps
+ =ð'S' &&
+ `bcmp
+(tmps,"StB",4) == 0) {
+
+263 ià(!
+d¡r
+->
+¡r_magic
+) {
+
+264
+d¡r
+->
+¡r_magic
+ =
+ `¡r_smake
+(
+s¡r
+->str_magic);
+
+265
+d¡r
+->
+¡r_magic
+->
+¡r_¿»
+ = 'X';
+
+271 ià(
+s¡r
+->
+¡r_nok
+)
+
+272
+ `¡r_num£t
+(
+d¡r
+,
+s¡r
+->
+¡r_u
+.
+¡r_nv®
+);
+
+274 ià(
+d¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+)
+
+275
+ `SŒ_Grow
+(
+d¡r
+,0);
+
+277 #ifdeà
+STRUCTCOPY
+
+
+278
+d¡r
+->
+¡r_u
+ =
+s¡r
+->str_u;
+
+280
+d¡r
+->
+¡r_u
+.
+¡r_nv®
+ =
+s¡r
+->str_u.str_nval;
+
+282
+d¡r
+->
+¡r_pok
+ = d¡r->
+¡r_nok
+ = 0;
+
+284
+ }
+}
+
+286
+ $¡r_n£t
+(
+¡r
+,
+±r
+,
+Ën
+)
+
+287 
+STR
+ *
+¡r
+;
+
+288 *
+±r
+;
+
+289 
+STRLEN
+
+Ën
+;
+
+291 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+293
+ `STR_GROW
+(
+¡r
+,
+Ën
+ + 1);
+
+294 ià(
+±r
+)
+
+295 ()
+ `bcÝy
+(
+±r
+,
+¡r
+->
+¡r_±r
+,
+Ën
+);
+
+296
+¡r
+->
+¡r_cur
+ =
+Ën
+;
+
+297 *(
+¡r
+->
+¡r_±r
++¡r->
+¡r_cur
+) = '\0';
+
+298
+¡r
+->
+¡r_nok
+ = 0;
+
+299
+¡r
+->
+¡r_pok
+ = 1;
+
+300 #ifdeà
+TAINT
+
+
+301
+¡r
+->
+¡r_š‹d
+ =
+š‹d
+;
+
+303
+ }
+}
+
+305
+ $¡r_£t
+(
+¡r
+,
+±r
+)
+
+306 
+STR
+ *
+¡r
+;
+
+307 *
+±r
+;
+
+309 
+STRLEN
+
+Ën
+;
+
+311 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+313 ià(!
+±r
+)
+
+314
+±r
+ = "";
+
+315
+Ën
+ =
+ `¡¾’
+(
+±r
+);
+
+316
+ `STR_GROW
+(
+¡r
+,
+Ën
+ + 1);
+
+317 ()
+ `bcÝy
+(
+±r
+,
+¡r
+->
+¡r_±r
+,
+Ën
++1);
+
+318
+¡r
+->
+¡r_cur
+ =
+Ën
+;
+
+319
+¡r
+->
+¡r_nok
+ = 0;
+
+320
+¡r
+->
+¡r_pok
+ = 1;
+
+321 #ifdeà
+TAINT
+
+
+322
+¡r
+->
+¡r_š‹d
+ =
+š‹d
+;
+
+324
+ }
+}
+
+326
+ $¡r_chÝ
+(
+¡r
+,
+±r
+)
+
+327 
+STR
+ *
+¡r
+;
+
+328 *
+±r
+;
+
+330 
+STRLEN
+
+d–
+;
+
+332 ià(!
+±r
+ || !(
+¡r
+->
+¡r_pok
+))
+
+334
+d–
+ =
+±r
+ -
+¡r
+->
+¡r_±r
+;
+
+335
+¡r
+->
+¡r_Ën
+ -ð
+d–
+;
+
+336
+¡r
+->
+¡r_cur
+ -ð
+d–
+;
+
+337
+¡r
+->
+¡r_±r
+ +ð
+d–
+;
+
+338 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+)
+
+339
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+ +ð
+d–
+;
+
+341
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+ =
+d–
+;
+
+342
+¡r
+->
+¡r_¡©e
+ =
+SS_INCR
+;
+
+344
+¡r
+->
+¡r_nok
+ = 0;
+
+345
+¡r
+->
+¡r_pok
+ = 1;
+
+346
+ }
+}
+
+348
+ $¡r_nÿt
+(
+¡r
+,
+±r
+,
+Ën
+)
+
+349 
+STR
+ *
+¡r
+;
+
+350 *
+±r
+;
+
+351 
+STRLEN
+
+Ën
+;
+
+353 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+355 ià(!(
+¡r
+->
+¡r_pok
+))
+
+356 ()
+ `¡r_2±r
+(
+¡r
+);
+
+357
+ `STR_GROW
+(
+¡r
+, sŒ->
+¡r_cur
+ +
+Ën
+ + 1);
+
+358 ()
+ `bcÝy
+(
+±r
+,
+¡r
+->
+¡r_±r
++¡r->
+¡r_cur
+,
+Ën
+);
+
+359
+¡r
+->
+¡r_cur
+ +ð
+Ën
+;
+
+360 *(
+¡r
+->
+¡r_±r
++¡r->
+¡r_cur
+) = '\0';
+
+361
+¡r
+->
+¡r_nok
+ = 0;
+
+362
+¡r
+->
+¡r_pok
+ = 1;
+
+363 #ifdeà
+TAINT
+
+
+364
+¡r
+->
+¡r_š‹d
+ |ð
+š‹d
+;
+
+366
+ }
+}
+
+368
+ $¡r_sÿt
+(
+d¡r
+,
+s¡r
+)
+
+369
+STR
+ *
+d¡r
+;
+
+370 
+STR
+ *
+s¡r
+;
+
+372 #ifdeà
+TAINT
+
+
+373
+š‹d
+ |ð
+s¡r
+->
+¡r_š‹d
+;
+
+375 ià(!
+s¡r
+)
+
+377 ià(!(
+s¡r
+->
+¡r_pok
+))
+
+378 ()
+ `¡r_2±r
+(
+s¡r
+);
+
+379 ià(
+s¡r
+)
+
+380
+ `¡r_nÿt
+(
+d¡r
+,
+s¡r
+->
+¡r_±r
+,s¡r->
+¡r_cur
+);
+
+381
+ }
+}
+
+383
+ $¡r_ÿt
+(
+¡r
+,
+±r
+)
+
+384 
+STR
+ *
+¡r
+;
+
+385 *
+±r
+;
+
+387 
+STRLEN
+
+Ën
+;
+
+389 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+391 ià(!
+±r
+)
+
+393 ià(!(
+¡r
+->
+¡r_pok
+))
+
+394 ()
+ `¡r_2±r
+(
+¡r
+);
+
+395
+Ën
+ =
+ `¡¾’
+(
+±r
+);
+
+396
+ `STR_GROW
+(
+¡r
+, sŒ->
+¡r_cur
+ +
+Ën
+ + 1);
+
+397 ()
+ `bcÝy
+(
+±r
+,
+¡r
+->
+¡r_±r
++¡r->
+¡r_cur
+,
+Ën
++1);
+
+398
+¡r
+->
+¡r_cur
+ +ð
+Ën
+;
+
+399
+¡r
+->
+¡r_nok
+ = 0;
+
+400
+¡r
+->
+¡r_pok
+ = 1;
+
+401 #ifdeà
+TAINT
+
+
+402
+¡r
+->
+¡r_š‹d
+ |ð
+š‹d
+;
+
+404
+ }
+}
+
+407
+ $¡r_­³nd_tžl
+(
+¡r
+,
+äom
+,
+äom’d
+,
+d–im
+,
+k“¶i¡
+)
+
+408 
+STR
+ *
+¡r
+;
+
+409 *
+äom
+;
+
+410 *
+äom’d
+;
+
+411 
+d–im
+;
+
+412 *
+k“¶i¡
+;
+
+414 *
+to
+;
+
+415 
+STRLEN
+
+Ën
+;
+
+417 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+418 
+NuÎch
+;
+
+419 ià(!
+äom
+)
+
+420 
+NuÎch
+;
+
+421
+Ën
+ =
+äom’d
+ -
+äom
+;
+
+422
+ `STR_GROW
+(
+¡r
+, sŒ->
+¡r_cur
+ +
+Ën
+ + 1);
+
+423
+¡r
+->
+¡r_nok
+ = 0;
+
+424
+¡r
+->
+¡r_pok
+ = 1;
+
+425
+to
+ =
+¡r
+->
+¡r_±r
++¡r->
+¡r_cur
+;
+
+426 ;
+äom
+ <
+äom’d
+; from++,
+to
+++) {
+
+427 ià(*
+äom
+ =ð'\\' && from+1 <
+äom’d
+ &&
+d–im
+ != '\\') {
+
+428 ià(!
+k“¶i¡
+) {
+
+429 ià(
+äom
+[1] =ð
+d–im
+ || from[1] == '\\')
+
+430
+äom
+++;
+
+432 *
+to
+++ = *
+äom
+++;
+
+434 ià(
+äom
+[1] &&
+ `šdex
+(
+k“¶i¡
+,from[1]))
+
+435 *
+to
+++ = *
+äom
+++;
+
+437
+äom
+++;
+
+439 ià(*
+äom
+ =ð
+d–im
+)
+
+441 *
+to
+ = *
+äom
+;
+
+443 *
+to
+ = '\0';
+
+444
+¡r
+->
+¡r_cur
+ =
+to
+ - sŒ->
+¡r_±r
+;
+
+445 
+äom
+;
+
+446
+ }
+}
+
+448
+ gSTR
+ *
+
+449 #ifdeà
+LEAKTEST
+
+
+450
+ $¡r_Ãw
+(
+x
+,
+Ën
+)
+
+451 
+x
+;
+
+453
+ $¡r_Ãw
+(
+Ën
+)
+
+455
+STRLEN
+
+Ën
+;
+
+457 
+STR
+ *
+¡r
+;
+
+459 #ià
+ `defšed
+(
+NOMEMOPT
+)
+
+460
+ `Newz
+(700+
+x
+,
+¡r
+,1,
+STR
+);
+
+462 ià(
+ä“¡¼oÙ
+) {
+
+463
+¡r
+ =
+ä“¡¼oÙ
+;
+
+464
+ä“¡¼oÙ
+ =
+¡r
+->
+¡r_magic
+;
+
+465
+¡r
+->
+¡r_magic
+ =
+NuΡr
+;
+
+466
+¡r
+->
+¡r_¡©e
+ =
+SS_NORM
+;
+
+469
+ `Newz
+(700+
+x
+,
+¡r
+,1,
+STR
+);
+
+472 ià(
+Ën
+)
+
+473
+ `STR_GROW
+(
+¡r
+,
+Ën
+ + 1);
+
+474 
+¡r
+;
+
+475
+ }
+}
+
+478
+ $¡r_magic
+(
+¡r
+,
+¡ab
+,
+how
+,
+Çme
+,
+ÇmËn
+)
+
+479 
+STR
+ *
+¡r
+;
+
+480
+STAB
+ *
+¡ab
+;
+
+481 
+how
+;
+
+482 *
+Çme
+;
+
+483
+STRLEN
+
+ÇmËn
+;
+
+485 ià(
+¡r
+ =ð&
+¡r_undef
+ || sŒ->
+¡r_magic
+)
+
+487
+¡r
+->
+¡r_magic
+ =
+ `SŒ_Ãw
+(75,
+ÇmËn
+);
+
+488
+¡r
+ = sŒ->
+¡r_magic
+;
+
+489
+¡r
+->
+¡r_u
+.
+¡r_¡ab
+ =
+¡ab
+;
+
+490
+¡r
+->
+¡r_¿»
+ =
+how
+;
+
+491 ià(
+Çme
+)
+
+492
+ `¡r_n£t
+(
+¡r
+,
+Çme
+,
+ÇmËn
+);
+
+493
+ }
+}
+
+496
+ $¡r_š£¹
+(
+big¡r
+,
+off£t
+,
+Ën
+,
+l™Že
+,
+l™Ž–’
+)
+
+497
+STR
+ *
+big¡r
+;
+
+498
+STRLEN
+
+off£t
+;
+
+499
+STRLEN
+
+Ën
+;
+
+500 *
+l™Že
+;
+
+501
+STRLEN
+
+l™Ž–’
+;
+
+503 *
+big
+;
+
+504 *
+mid
+;
+
+505 *
+mid’d
+;
+
+506 *
+big’d
+;
+
+507 
+i
+;
+
+509 ià(
+big¡r
+ =ð&
+¡r_undef
+)
+
+511
+big¡r
+->
+¡r_nok
+ = 0;
+
+512
+big¡r
+->
+¡r_pok
+ =
+SP_VALID
+;
+
+514
+i
+ =
+l™Ž–’
+ -
+Ën
+;
+
+515 ià(
+i
+ > 0) {
+
+516
+ `STR_GROW
+(
+big¡r
+, big¡r->
+¡r_cur
+ +
+i
+ + 1);
+
+517
+big
+ =
+big¡r
+->
+¡r_±r
+;
+
+518
+mid
+ =
+big
+ +
+off£t
+ +
+Ën
+;
+
+519
+mid’d
+ =
+big’d
+ =
+big
+ +
+big¡r
+->
+¡r_cur
+;
+
+520
+big’d
+ +ð
+i
+;
+
+521 *
+big’d
+ = '\0';
+
+522 
+mid’d
+ >
+mid
+)
+
+523 *--
+big’d
+ = *--
+mid’d
+;
+
+524 ()
+ `bcÝy
+(
+l™Že
+,
+big
++
+off£t
+,
+l™Ž–’
+);
+
+525
+big¡r
+->
+¡r_cur
+ +ð
+i
+;
+
+526
+ `STABSET
+(
+big¡r
+);
+
+529 ià(
+i
+ == 0) {
+
+530 ()
+ `bcÝy
+(
+l™Že
+,
+big¡r
+->
+¡r_±r
++
+off£t
+,
+Ën
+);
+
+531
+ `STABSET
+(
+big¡r
+);
+
+535
+big
+ =
+big¡r
+->
+¡r_±r
+;
+
+536
+mid
+ =
+big
+ +
+off£t
+;
+
+537
+mid’d
+ =
+mid
+ +
+Ën
+;
+
+538
+big’d
+ =
+big
+ +
+big¡r
+->
+¡r_cur
+;
+
+540 ià(
+mid’d
+ >
+big’d
+)
+
+541
+ `çl
+("panic: str_insert");
+
+543 ià(
+mid
+ -
+big
+ >
+big’d
+ -
+mid’d
+) {
+
+544 ià(
+l™Ž–’
+) {
+
+545 ()
+ `bcÝy
+(
+l™Že
+,
+mid
+,
+l™Ž–’
+);
+
+546
+mid
+ +ð
+l™Ž–’
+;
+
+548
+i
+ =
+big’d
+ -
+mid’d
+;
+
+549 ià(
+i
+ > 0) {
+
+550 ()
+ `bcÝy
+(
+mid’d
+,
+mid
+,
+i
+);
+
+551
+mid
+ +ð
+i
+;
+
+553 *
+mid
+ = '\0';
+
+554
+big¡r
+->
+¡r_cur
+ =
+mid
+ -
+big
+;
+
+556 ià(
+i
+ =
+mid
+ -
+big
+) {
+
+557
+mid’d
+ -ð
+l™Ž–’
+;
+
+558
+mid
+ =
+mid’d
+;
+
+559
+ `¡r_chÝ
+(
+big¡r
+,
+mid’d
+-
+i
+);
+
+560
+big
+ +ð
+i
+;
+
+561 
+i
+--)
+
+562 *--
+mid’d
+ = *--
+big
+;
+
+563 ià(
+l™Ž–’
+)
+
+564 ()
+ `bcÝy
+(
+l™Že
+,
+mid
+,
+l™Ž–’
+);
+
+566 ià(
+l™Ž–’
+) {
+
+567
+mid’d
+ -ð
+l™Ž–’
+;
+
+568
+ `¡r_chÝ
+(
+big¡r
+,
+mid’d
+);
+
+569 ()
+ `bcÝy
+(
+l™Že
+,
+mid’d
+,
+l™Ž–’
+);
+
+572
+ `¡r_chÝ
+(
+big¡r
+,
+mid’d
+);
+
+574
+ `STABSET
+(
+big¡r
+);
+
+575
+ }
+}
+
+580
+ $¡r_»¶aû
+(
+¡r
+,
+n¡r
+)
+
+581 
+STR
+ *
+¡r
+;
+
+582 
+STR
+ *
+n¡r
+;
+
+584 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+586 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+)
+
+587
+ `SŒ_Grow
+(
+¡r
+,0);
+
+588 ià(
+n¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+)
+
+589
+ `SŒ_Grow
+(
+n¡r
+,0);
+
+590 ià(
+¡r
+->
+¡r_±r
+)
+
+591
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+592
+¡r
+->
+¡r_±r
+ =
+n¡r
+->str_ptr;
+
+593
+¡r
+->
+¡r_Ën
+ =
+n¡r
+->str_len;
+
+594
+¡r
+->
+¡r_cur
+ =
+n¡r
+->str_cur;
+
+595
+¡r
+->
+¡r_pok
+ =
+n¡r
+->str_pok;
+
+596
+¡r
+->
+¡r_nok
+ =
+n¡r
+->str_nok;
+
+597 #ifdeà
+STRUCTCOPY
+
+
+598
+¡r
+->
+¡r_u
+ =
+n¡r
+->str_u;
+
+600
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ =
+n¡r
+->str_u.str_nval;
+
+602 #ifdeà
+TAINT
+
+
+603
+¡r
+->
+¡r_š‹d
+ =
+n¡r
+->str_tainted;
+
+605 ià(
+n¡r
+->
+¡r_magic
+)
+
+606
+ `¡r_ä“
+(
+n¡r
+->
+¡r_magic
+);
+
+607
+ `Saãä“
+(
+n¡r
+);
+
+608
+ }
+}
+
+611
+ $¡r_ä“
+(
+¡r
+)
+
+612 
+STR
+ *
+¡r
+;
+
+614 ià(!
+¡r
+ || sŒ =ð&
+¡r_undef
+)
+
+616 ià(
+¡r
+->
+¡r_¡©e
+) {
+
+617 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_FREE
+)
+
+619 ià(
+¡r
+->
+¡r_¡©e
+ =ð
+SS_INCR
+ && !(¡r->
+¡r_pok
+ & 2)) {
+
+620
+¡r
+->
+¡r_±r
+ -ð¡r->
+¡r_u
+.
+¡r_u£ful
+;
+
+621
+¡r
+->
+¡r_Ën
+ +ð¡r->
+¡r_u
+.
+¡r_u£ful
+;
+
+624 ià(
+¡r
+->
+¡r_magic
+)
+
+625
+ `¡r_ä“
+(
+¡r
+->
+¡r_magic
+);
+
+626
+¡r
+->
+¡r_magic
+ =
+ä“¡¼oÙ
+;
+
+627 #ià
+ `defšed
+(
+LEAKTEST
+è|| defšed(
+NOMEMOPT
+)
+
+628 ià(
+¡r
+->
+¡r_Ën
+) {
+
+629
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+630
+¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+632 ià((
+¡r
+->
+¡r_pok
+ &
+SP_INTRP
+è&& sŒ->
+¡r_u
+.
+¡r_¬gs
+)
+
+633
+ `¬g_ä“
+(
+¡r
+->
+¡r_u
+.
+¡r_¬gs
+);
+
+634
+ `Saãä“
+(
+¡r
+);
+
+636 ià(
+¡r
+->
+¡r_Ën
+) {
+
+637 ià(
+¡r
+->
+¡r_Ën
+ > 127) {
+
+638
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+639
+¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+640
+¡r
+->
+¡r_Ën
+ = 0;
+
+643
+¡r
+->
+¡r_±r
+[0] = '\0';
+
+645 ià((
+¡r
+->
+¡r_pok
+ &
+SP_INTRP
+è&& sŒ->
+¡r_u
+.
+¡r_¬gs
+)
+
+646
+ `¬g_ä“
+(
+¡r
+->
+¡r_u
+.
+¡r_¬gs
+);
+
+647
+¡r
+->
+¡r_cur
+ = 0;
+
+648
+¡r
+->
+¡r_nok
+ = 0;
+
+649
+¡r
+->
+¡r_pok
+ = 0;
+
+650
+¡r
+->
+¡r_¡©e
+ =
+SS_FREE
+;
+
+651 #ifdeà
+TAINT
+
+
+652
+¡r
+->
+¡r_š‹d
+ = 0;
+
+654
+ä“¡¼oÙ
+ =
+¡r
+;
+
+656
+ }
+}
+
+658
+STRLEN
+
+
+659
+ $¡r_Ën
+(
+¡r
+)
+
+660 
+STR
+ *
+¡r
+;
+
+662 ià(!
+¡r
+)
+
+664 ià(!(
+¡r
+->
+¡r_pok
+))
+
+665 ()
+ `¡r_2±r
+(
+¡r
+);
+
+666 ià(
+¡r
+->
+¡r_±r
+)
+
+667 
+¡r
+->
+¡r_cur
+;
+
+670
+ }
+}
+
+672
+ $¡r_eq
+(
+¡r1
+,
+¡r2
+)
+
+673 
+STR
+ *
+¡r1
+;
+
+674 
+STR
+ *
+¡r2
+;
+
+676 ià(!
+¡r1
+ || sŒ1 =ð&
+¡r_undef
+)
+
+677  (
+¡r2
+ =ð
+NuΡr
+ || sŒ2 =ð&
+¡r_undef
+ || !¡r2->
+¡r_cur
+);
+
+678 ià(!
+¡r2
+ || sŒ2 =ð&
+¡r_undef
+)
+
+679  !
+¡r1
+->
+¡r_cur
+;
+
+681 ià(!
+¡r1
+->
+¡r_pok
+)
+
+682 ()
+ `¡r_2±r
+(
+¡r1
+);
+
+683 ià(!
+¡r2
+->
+¡r_pok
+)
+
+684 ()
+ `¡r_2±r
+(
+¡r2
+);
+
+686 ià(
+¡r1
+->
+¡r_cur
+ !ð
+¡r2
+->str_cur)
+
+689  !
+ `bcmp
+(
+¡r1
+->
+¡r_±r
+,
+¡r2
+->¡r_±r, sŒ1->
+¡r_cur
+);
+
+690
+ }
+}
+
+692
+ $¡r_cmp
+(
+¡r1
+,
+¡r2
+)
+
+693 
+STR
+ *
+¡r1
+;
+
+694 
+STR
+ *
+¡r2
+;
+
+696 
+»tv®
+;
+
+698 ià(!
+¡r1
+ || sŒ1 =ð&
+¡r_undef
+)
+
+699  (
+¡r2
+ =ð
+NuΡr
+ || sŒ2 =ð&
+¡r_undef
+ || !¡r2->
+¡r_cur
+)?0:-1;
+
+700 ià(!
+¡r2
+ || sŒ2 =ð&
+¡r_undef
+)
+
+701 
+¡r1
+->
+¡r_cur
+ != 0;
+
+703 ià(!
+¡r1
+->
+¡r_pok
+)
+
+704 ()
+ `¡r_2±r
+(
+¡r1
+);
+
+705 ià(!
+¡r2
+->
+¡r_pok
+)
+
+706 ()
+ `¡r_2±r
+(
+¡r2
+);
+
+708 ià(
+¡r1
+->
+¡r_cur
+ <
+¡r2
+->str_cur) {
+
+709 ià(
+»tv®
+ =
+ `memcmp
+(
+¡r1
+->
+¡r_±r
+,
+¡r2
+->¡r_±r, sŒ1->
+¡r_cur
+))
+
+710 
+»tv®
+ < 0 ? -1 : 1;
+
+714 ià(
+»tv®
+ =
+ `memcmp
+(
+¡r1
+->
+¡r_±r
+,
+¡r2
+->¡r_±r, sŒ2->
+¡r_cur
+))
+
+715 
+»tv®
+ < 0 ? -1 : 1;
+
+716 ià(
+¡r1
+->
+¡r_cur
+ =ð
+¡r2
+->str_cur)
+
+720
+ }
+}
+
+723
+ $¡r_g‘s
+(
+¡r
+,
+,
+­³nd
+)
+
+724 
+STR
+ *
+¡r
+;
+
+725 
+FILE
+ *
+;
+
+726 
+­³nd
+;
+
+728 *
+bp
+;
+
+729 
+út
+;
+
+730 
+STDCHAR
+ *
+±r
+;
+
+731 
+Ãwlše
+ =
+rsch¬
+;
+
+732 
+i
+;
+
+733
+STRLEN
+
+bpx
+;
+
+734 
+shÜtbufã»d
+;
+
+736 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+737 
+NuÎch
+;
+
+738 #ifdeà
+STDSTDIO
+
+
+739
+út
+ =
+->
+_út
+;
+
+740
+¡r
+->
+¡r_nok
+ = 0;
+
+741
+¡r
+->
+¡r_pok
+ = 1;
+
+742 ià(
+¡r
+->
+¡r_Ën
+ <ð
+út
+ + 1) {
+
+743 ià(
+út
+ > 80 &&
+¡r
+->
+¡r_Ën
+ >
+­³nd
+) {
+
+744
+shÜtbufã»d
+ =
+út
+ -
+¡r
+->
+¡r_Ën
+ +
+­³nd
+ + 1;
+
+745
+út
+ -ð
+shÜtbufã»d
+;
+
+748
+shÜtbufã»d
+ = 0;
+
+749
+ `STR_GROW
+(
+¡r
+,
+­³nd
++
+út
++2);
+
+753
+shÜtbufã»d
+ = 0;
+
+754
+bp
+ =
+¡r
+->
+¡r_±r
+ +
+­³nd
+;
+
+755
+±r
+ =
+->
+_±r
+;
+
+757
+sü—m”
+:
+
+758 --
+út
+ >= 0) {
+
+759 ià((*
+bp
+++ = *
+±r
+++è=ð
+Ãwlše
+)
+
+760 
+th©s_®l_fÞks
+;
+
+763 ià(
+shÜtbufã»d
+) {
+
+764
+út
+ =
+shÜtbufã»d
+;
+
+765
+shÜtbufã»d
+ = 0;
+
+766
+bpx
+ =
+bp
+ -
+¡r
+->
+¡r_±r
+;
+
+767
+¡r
+->
+¡r_cur
+ =
+bpx
+;
+
+768
+ `STR_GROW
+(
+¡r
+, sŒ->
+¡r_Ën
+ +
+­³nd
+ +
+út
+ + 2);
+
+769
+bp
+ =
+¡r
+->
+¡r_±r
+ +
+bpx
+;
+
+773
+->
+_út
+ =
+út
+;
+
+774
+->
+_±r
+ =
+±r
+;
+
+775
+i
+ =
+ `_fžbuf
+(
+);
+
+776
+út
+ =
+->
+_út
+;
+
+777
+±r
+ =
+->
+_±r
+;
+
+779
+bpx
+ =
+bp
+ -
+¡r
+->
+¡r_±r
+;
+
+780
+¡r
+->
+¡r_cur
+ =
+bpx
+;
+
+781
+ `STR_GROW
+(
+¡r
+,
+bpx
+ +
+út
+ + 2);
+
+782
+bp
+ =
+¡r
+->
+¡r_±r
+ +
+bpx
+;
+
+784 ià(
+i
+ =ð
+Ãwlše
+) {
+
+785 *
+bp
+++ =
+i
+;
+
+786 
+th©s_®l_fÞks
+;
+
+788 ià(
+i
+ =ð
+EOF
+)
+
+789 
+th©s_»®ly_®l_fÞks
+;
+
+790 *
+bp
+++ =
+i
+;
+
+793
+th©s_®l_fÞks
+:
+
+794 ià(
+r¦’
+ > 1 && (
+bp
+ -
+¡r
+->
+¡r_±r
+ <„¦’ ||
+ `bcmp
+(b°-„¦’,
+rs
+,„slen)))
+
+795 
+sü—m”
+;
+
+796
+th©s_»®ly_®l_fÞks
+:
+
+797 ià(
+shÜtbufã»d
+)
+
+798
+út
+ +ð
+shÜtbufã»d
+;
+
+799
+->
+_út
+ =
+út
+;
+
+800
+->
+_±r
+ =
+±r
+;
+
+801 *
+bp
+ = '\0';
+
+802
+¡r
+->
+¡r_cur
+ =
+bp
+ - sŒ->
+¡r_±r
+;
+
+807 
+buf
+[8192];
+
+808 *
+b³
+ =
+buf
+ + (buf) - 3;
+
+810
+sü—m”
+:
+
+811
+bp
+ =
+buf
+;
+
+812 (
+i
+ =
+ `g‘c
+(
+)è!ð
+EOF
+ && (*
+bp
+++ = iè!ð
+Ãwlše
+ && b°<
+b³
+) ;
+
+814 *
+bp
+ = '\0';
+
+815 ià(
+­³nd
+)
+
+816
+ `¡r_ÿt
+(
+¡r
+,
+buf
+);
+
+818
+ `¡r_£t
+(
+¡r
+,
+buf
+);
+
+819 ià(
+i
+ !ð
+EOF
+
+
+821 (
+i
+ !ð
+Ãwlše
+
+
+823 (
+r¦’
+ > 1
+
+825 (
+¡r
+->
+¡r_cur
+ <
+r¦’
+
+
+827
+ `bcmp
+(
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+ -
+r¦’
+,
+rs
+,„slen)
+
+833
+­³nd
+ = -1;
+
+834 
+sü—m”
+;
+
+840 
+¡r
+->
+¡r_cur
+ -
+­³nd
+ ? sŒ->
+¡r_±r
+ :
+NuÎch
+;
+
+841
+ }
+}
+
+843
+ARG
+ *
+
+844
+ $·r£li¡
+(
+¡r
+)
+
+845
+STR
+ *
+¡r
+;
+
+847 
+CMD
+ *
+cmd
+;
+
+848 
+ARG
+ *
+¬g
+;
+
+849
+CMD
+ *
+Þdcurcmd
+ =
+curcmd
+;
+
+850 
+Þd³¾db
+ =
+³¾db
+;
+
+851 
+»tv®
+;
+
+853
+³¾db
+ = 0;
+
+854
+ `¡r_s£t
+(
+lše¡r
+,
+¡r
+);
+
+855
+š_ev®
+++;
+
+856
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+buåŒ
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+857
+buãnd
+ =
+buåŒ
+ +
+lše¡r
+->
+¡r_cur
+;
+
+858 ià(++
+loÝ_±r
+ >ð
+loÝ_max
+) {
+
+859
+loÝ_max
+ += 128;
+
+860
+ `R’ew
+(
+loÝ_¡ack
+,
+loÝ_max
+, 
+loÝ
+);
+
+862
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+ = "_EVAL_";
+
+863
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_¥
+ = 0;
+
+864 #ifdeà
+DEBUGGING
+
+
+865 ià(
+debug
+ & 4) {
+
+866
+ `deb
+("(Pushšg†ab– #%d _EVAL_)\n",
+loÝ_±r
+);
+
+869 ià(
+ `£tjmp
+(
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_’v
+)) {
+
+870
+š_ev®
+--;
+
+871
+loÝ_±r
+--;
+
+872
+³¾db
+ =
+Þd³¾db
+;
+
+873
+ `çl
+("%s\n",
+ `¡ab_v®
+(
+ `¡ab’t
+("@",
+TRUE
+))->
+¡r_±r
+);
+
+875 #ifdeà
+DEBUGGING
+
+
+876 ià(
+debug
+ & 4) {
+
+877 *
+tmps
+ =
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+;
+
+878
+ `deb
+("(PÝpšg†ab– #%d %s)\n",
+loÝ_±r
+,
+
+879
+tmps
+ ?mps : "" );
+
+882
+loÝ_±r
+--;
+
+883
+”rÜ_couÁ
+ = 0;
+
+884
+curcmd
+ = &
+compžšg
+;
+
+885
+curcmd
+->
+c_lše
+ =
+Þdcurcmd
+->c_line;
+
+886
+»tv®
+ =
+ `yy·r£
+();
+
+887
+curcmd
+ =
+Þdcurcmd
+;
+
+888
+³¾db
+ =
+Þd³¾db
+;
+
+889
+š_ev®
+--;
+
+890 ià(
+»tv®
+ ||
+”rÜ_couÁ
+)
+
+891
+ `çl
+("Invalid component in string or format");
+
+892
+cmd
+ =
+ev®_roÙ
+;
+
+893
+¬g
+ =
+cmd
+->
+c_ex´
+;
+
+894 ià(
+cmd
+->
+c_ty³
+ !ð
+C_EXPR
+ || cmd->
+c_Ãxt
+ ||
+¬g
+->
+¬g_ty³
+ !ð
+O_LIST
+)
+
+895
+ `çl
+("·nic:ƒ¼Ü iÀ·r£li¡ %d %x %d",
+cmd
+->
+c_ty³
+,
+
+896
+cmd
+->
+c_Ãxt
+,
+¬g
+ ?‡rg->
+¬g_ty³
+ : -1);
+
+897
+ `Saãä“
+(
+cmd
+);
+
+898
+ev®_roÙ
+ =
+NuÎcmd
+;
+
+899 
+¬g
+;
+
+900
+ }
+}
+
+903
+ $šŒpcompže
+(
+¤c
+)
+
+904
+STR
+ *
+¤c
+;
+
+906 *
+s
+ =
+ `¡r_g‘
+(
+¤c
+);
+
+907 *
+£nd
+ =
+s
+ +
+¤c
+->
+¡r_cur
+;
+
+908 
+STR
+ *
+¡r
+;
+
+909 *
+t
+;
+
+910
+STR
+ *
+tݬ£
+;
+
+911
+STRLEN
+
+Ën
+;
+
+912 
+b¿ck‘s
+;
+
+913 *
+d
+;
+
+914
+STAB
+ *
+¡ab
+;
+
+915 *
+checkpošt
+;
+
+916 
+§wÿ£
+ = 0;
+
+918
+tݬ£
+ =
+ `SŒ_Ãw
+(76,0);
+
+919
+¡r
+ =
+ `SŒ_Ãw
+(77,0);
+
+921
+ `¡r_n£t
+(
+¡r
+,"",0);
+
+922
+ `¡r_n£t
+(
+tݬ£
+,"",0);
+
+923
+t
+ =
+s
+;
+
+924 
+s
+ <
+£nd
+) {
+
+925 ià(*
+s
+ =ð'\\' && s[1] &&
+ `šdex
+("$@[{\\]}lLuUE",s[1])) {
+
+926
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+ -);
+
+927 ++
+s
+;
+
+928 ià(
+ `i§Íha
+(*
+s
+)) {
+
+929
+ `¡r_nÿt
+(
+¡r
+, "$c", 2);
+
+930
+§wÿ£
+ = (*
+s
+ != 'E');
+
+933 ià(*
+nošŒp
+ &&
+s
++1 <
+£nd
+)
+
+934 ià(*
+s
+ !ð'@' && (* !ð'$' ||
+ `šdex
+(
+nošŒp
+,s[1])))
+
+935
+ `¡r_nÿt
+(
+¡r
+,
+s
+-1,1);
+
+936
+ `¡r_nÿt
+(
+¡r
+, "$b", 2);
+
+938
+ `¡r_nÿt
+(
+¡r
+,
+s
+, 1);
+
+939 ++
+s
+;
+
+940
+t
+ =
+s
+;
+
+942 ià((*
+s
+ =ð'@' || (* =ð'$' && !
+ `šdex
+(
+nošŒp
+,s[1]))) &&
+
+943
+s
++1 <
+£nd
+) {
+
+944
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+-t);
+
+945
+t
+ =
+s
+;
+
+946 ià(*
+s
+ =ð'$' && s[1] =ð'#' && (
+ `i§Íha
+(s[2]) || s[2] == '_'))
+
+947
+s
+++;
+
+948
+s
+ =
+ `sÿnid’t
+(s,
+£nd
+,
+tok’buf
+);
+
+949 ià(*
+t
+ == '@' &&
+
+950 (!(
+¡ab
+ =
+ `¡ab’t
+(
+tok’buf
+,
+FALSE
+)) ||
+
+951 (*
+s
+ =ð'{' ? !
+ `¡ab_xhash
+(
+¡ab
+è: !
+ `¡ab_x¬¿y
+(stab)) )) {
+
+952
+ `¡r_nÿt
+(
+¡r
+,"@",1);
+
+953
+s
+ = ++
+t
+;
+
+956
+ `¡r_nÿt
+(
+¡r
+,"$a",2);
+
+957
+ `¡r_nÿt
+(
+tݬ£
+,",",1);
+
+958 ià(
+t
+[1] !ð'{' && (*
+s
+ == '[' || *s == '{' ) &&
+
+959 (
+¡ab
+ =
+ `¡ab’t
+(
+tok’buf
+,
+FALSE
+)) &&
+
+960 ((*
+s
+ =ð'['è? (
+ `¡ab_x¬¿y
+(
+¡ab
+è!ð0è: (
+ `¡ab_xhash
+(stab) != 0)) ) {
+
+961
+b¿ck‘s
+ = 0;
+
+962
+checkpošt
+ =
+s
+;
+
+964 *
+s
+) {
+
+966 ià(
+s
+[-1] != '$')
+
+967
+b¿ck‘s
+++;
+
+970
+b¿ck‘s
+++;
+
+973 ià(
+s
+[-1] != '$')
+
+974
+b¿ck‘s
+--;
+
+977
+b¿ck‘s
+--;
+
+981 ià(
+s
+[-1] != '$') {
+
+982
+s
+ =
+ `ýytžl
+(
+tok’buf
+,s+1,
+£nd
+,*s,&
+Ën
+);
+
+983 ià(
+s
+ >ð
+£nd
+)
+
+984
+ `çl
+("Unterminated string");
+
+988
+s
+++;
+
+989 } 
+b¿ck‘s
+ > 0 &&
+s
+ <
+£nd
+);
+
+990 ià(
+s
+ >
+£nd
+)
+
+991
+ `çl
+("Unmatched brackets in string");
+
+992 ià(*
+nošŒp
+) {
+
+993
+d
+ =
+checkpošt
+;
+
+994 ià(*
+d
+ =ð'{' &&
+s
+[-1] == '}') {
+
+995 ++
+d
+;
+
+996 ià(
+ `isdig™
+(*
+d
+)) {
+
+997 ià(*++
+d
+ == ',')
+
+998 ++
+d
+;
+
+999 
+ `isdig™
+(*
+d
+))
+
+1000
+d
+++;
+
+1001 ià(
+d
+ =ð
+s
+ - 1)
+
+1002
+s
+ =
+checkpošt
+;
+
+1005 ià(*
+d
+ =ð'[' &&
+s
+[-1] == ']') {
+
+1006 
+weight
+ = 2;
+
+1007 
+£’
+[256];
+
+1008 
+un_ch¬
+ = 0,
+Ï¡_un_ch¬
+;
+
+1010
+ `Z”o
+(
+£’
+,256,);
+
+1011 *--
+s
+ = '\0';
+
+1012 ià(
+d
+[1] == '^')
+
+1013
+weight
+ += 150;
+
+1014 ià(
+d
+[1] == '$')
+
+1015
+weight
+ -= 3;
+
+1016 ià(
+ `isdig™
+(
+d
+[1])) {
+
+1017 ià(
+d
+[2]) {
+
+1018 ià(
+ `isdig™
+(
+d
+[2]) && !d[3])
+
+1019
+weight
+ -= 10;
+
+1022
+weight
+ -= 100;
+
+1024 
+d
+++; d <
+s
+; d++) {
+
+1025
+Ï¡_un_ch¬
+ =
+un_ch¬
+;
+
+1026
+un_ch¬
+ = ()*
+d
+;
+
+1027 *
+d
+) {
+
+1030
+weight
+ -ð
+£’
+[
+un_ch¬
+] * 10;
+
+1031 ià(
+ `i§Íha
+(
+d
+[1]è||
+ `isdig™
+(d[1]) ||
+
+1032
+d
+[1] == '_') {
+
+1033
+d
+ =
+ `sÿnid’t
+(d,
+s
+,
+tok’buf
+);
+
+1034 ià(
+ `¡ab’t
+(
+tok’buf
+,
+FALSE
+))
+
+1035
+weight
+ -= 100;
+
+1037
+weight
+ -= 10;
+
+1039 ià(*
+d
+ == '$' && d[1] &&
+
+1040
+ `šdex
+("[#!%*<>()-=",
+d
+[1])) {
+
+1041 ià(!
+d
+[2] ||
+ `šdex
+("])} =",d[2]))
+
+1042
+weight
+ -= 10;
+
+1044
+weight
+ -= 1;
+
+1048
+un_ch¬
+ = 254;
+
+1049 ià(
+d
+[1]) {
+
+1050 ià(
+ `šdex
+("wds",
+d
+[1]))
+
+1051
+weight
+ += 100;
+
+1052 ià(
+£’
+['\''] || seen['"'])
+
+1053
+weight
+ += 1;
+
+1054 ià(
+ `šdex
+("ºáb",
+d
+[1]))
+
+1055
+weight
+ += 40;
+
+1056 ià(
+ `isdig™
+(
+d
+[1])) {
+
+1057
+weight
+ += 40;
+
+1058 
+d
+[1] &&
+ `isdig™
+(d[1]))
+
+1059
+d
+++;
+
+1063
+weight
+ += 100;
+
+1066 ià(
+Ï¡_un_ch¬
+ < (è
+d
+[1]
+
+1067 ||
+d
+[1] == '\\') {
+
+1068 ià(
+ `šdex
+("aA01! ",
+Ï¡_un_ch¬
+))
+
+1069
+weight
+ += 30;
+
+1070 ià(
+ `šdex
+("zZ79~",
+d
+[1]))
+
+1071
+weight
+ += 30;
+
+1074
+weight
+ -= 1;
+
+1076 ià(
+ `i§Íha
+(*
+d
+) && d[1] && isalpha(d[1])) {
+
+1077
+buåŒ
+ =
+d
+;
+
+1078 ià(
+ `yyËx
+(è!ð
+WORD
+)
+
+1079
+weight
+ -= 150;
+
+1080
+d
+ =
+buåŒ
+;
+
+1082 ià(
+un_ch¬
+ =ð
+Ï¡_un_ch¬
+ + 1)
+
+1083
+weight
+ += 5;
+
+1084
+weight
+ -ð
+£’
+[
+un_ch¬
+];
+
+1087
+£’
+[
+un_ch¬
+]++;
+
+1089 #ifdeà
+DEBUGGING
+
+
+1090 ià(
+debug
+ & 512)
+
+1091
+ `årštf
+(
+¡d”r
+,"[%s] weight %d\n",
+
+1092
+checkpošt
++1,
+weight
+);
+
+1094 *
+s
+++ = ']';
+
+1095 ià(
+weight
+ >= 0)
+
+1096
+s
+ =
+checkpošt
+;
+
+1100 ià(*
+t
+ == '@')
+
+1101
+ `¡r_nÿt
+(
+tݬ£
+, "join($\",", 8);
+
+1102 ià(
+t
+[1] =ð'{' &&
+s
+[-1] == '}') {
+
+1103
+ `¡r_nÿt
+(
+tݬ£
+,
+t
+, 1);
+
+1104
+ `¡r_nÿt
+(
+tݬ£
+,
+t
++2,
+s
+ - - 3);
+
+1107
+ `¡r_nÿt
+(
+tݬ£
+,
+t
+,
+s
+ -);
+
+1108 ià(*
+t
+ == '@')
+
+1109
+ `¡r_nÿt
+(
+tݬ£
+, ")", 1);
+
+1110
+t
+ =
+s
+;
+
+1113
+s
+++;
+
+1115
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+-t);
+
+1116 ià(
+§wÿ£
+)
+
+1117
+ `¡r_nÿt
+(
+¡r
+, "$cE", 3);
+
+1118 ià(
+tݬ£
+->
+¡r_±r
+ && *toparse->str_ptr == ',') {
+
+1119 *
+tݬ£
+->
+¡r_±r
+ = '(';
+
+1120
+ `¡r_nÿt
+(
+tݬ£
+,",$$);",5);
+
+1121
+¡r
+->
+¡r_u
+.
+¡r_¬gs
+ =
+ `·r£li¡
+(
+tݬ£
+);
+
+1122
+¡r
+->
+¡r_u
+.
+¡r_¬gs
+->
+¬g_Ën
+--;
+
+1125
+¡r
+->
+¡r_u
+.
+¡r_¬gs
+ =
+Nuάg
+;
+
+1126
+ `¡r_ä“
+(
+tݬ£
+);
+
+1127
+¡r
+->
+¡r_pok
+ |ð
+SP_INTRP
+;
+
+1128
+¡r
+->
+¡r_nok
+ = 0;
+
+1129
+ `¡r_»¶aû
+(
+¤c
+,
+¡r
+);
+
+1130
+ }
+}
+
+1132
+STR
+ *
+
+1133
+ $š‹½
+(
+¡r
+,
+¤c
+,
+)
+
+1134 
+STR
+ *
+¡r
+;
+
+1135
+STR
+ *
+¤c
+;
+
+1136 
+;
+
+1138 *
+s
+;
+
+1139 *
+t
+;
+
+1140 *
+£nd
+;
+
+1141 
+STR
+ **
+–em
+;
+
+1142 
+doÿ£
+ = 0;
+
+1143 
+l
+ = 0;
+
+1144 
+u
+ = 0;
+
+1145 
+L
+ = 0;
+
+1146 
+U
+ = 0;
+
+1148 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+1149 
+NuΡr
+;
+
+1150 ià(!(
+¤c
+->
+¡r_pok
+ &
+SP_INTRP
+)) {
+
+1151 
+Þd§ve
+ =
+§ve¡ack
+->
+¬y_fžl
+;
+
+1153 ()
+ `§veh±r
+(&
+cur¡ash
+);
+
+1154
+cur¡ash
+ =
+curcmd
+->
+c_¡ash
+;
+
+1155
+ `šŒpcompže
+(
+¤c
+);
+
+1156
+ `»¡Ü–i¡
+(
+Þd§ve
+);
+
+1158
+s
+ =
+¤c
+->
+¡r_±r
+;
+
+1159
+t
+ =
+s
+;
+
+1160
+£nd
+ =
+s
+ +
+¤c
+->
+¡r_cur
+;
+
+1162 ià(
+¤c
+->
+¡r_u
+.
+¡r_¬gs
+) {
+
+1163 ()
+ `ev®
+(
+¤c
+->
+¡r_u
+.
+¡r_¬gs
+,
+G_ARRAY
+,
+);
+
+1165
+–em
+ =
+¡ack
+->
+¬y_¬¿y
+ +
+;
+
+1168
+ `¡r_n£t
+(
+¡r
+,"",0);
+
+1169 
+s
+ <
+£nd
+) {
+
+1170 ià(*
+s
+ =ð'$' && s+1 <
+£nd
+) {
+
+1171 ià(
+s
+-
+t
+ > 0)
+
+1172
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+-t);
+
+1173 *++
+s
+) {
+
+1175
+ `¡r_sÿt
+(
+¡r
+,*++
+–em
+);
+
+1178
+ `¡r_nÿt
+(
+¡r
+,++
+s
+,1);
+
+1181 ià(
+doÿ£
+ &&
+¡r
+->
+¡r_cur
+ >= docase) {
+
+1182 *
+b
+ =
+¡r
+->
+¡r_±r
+ + --
+doÿ£
+;
+
+1184 ià(
+L
+)
+
+1185
+ `lÿ£
+(
+b
+,
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+);
+
+1186 ià(
+U
+)
+
+1187
+ `uÿ£
+(
+b
+,
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+);
+
+1189 ià(
+u
+)
+
+1190
+ `uÿ£
+(
+b
+, b+1);
+
+1191 ià(
+l
+)
+
+1192
+ `lÿ£
+(
+b
+, b+1);
+
+1193
+l
+ =
+u
+ = 0;
+
+1195
+doÿ£
+ =
+¡r
+->
+¡r_cur
+ + 1;
+
+1196 *++
+s
+) {
+
+1198
+u
+ = 1;
+
+1199
+l
+ = 0;
+
+1202
+U
+ = 1;
+
+1203
+L
+ = 0;
+
+1206
+l
+ = 1;
+
+1207
+u
+ = 0;
+
+1210
+L
+ = 1;
+
+1211
+U
+ = 0;
+
+1214
+doÿ£
+ =
+L
+ =
+U
+ =
+l
+ =
+u
+ = 0;
+
+1219
+t
+ = ++
+s
+;
+
+1222
+s
+++;
+
+1224 ià(
+s
+-
+t
+ > 0)
+
+1225
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+-t);
+
+1226 
+¡r
+;
+
+1227
+ }
+}
+
+1229
+ $uÿ£
+(
+s
+,
+£nd
+)
+
+1230 *
+s
+;
+
+1231 *
+£nd
+;
+
+1233 
+s
+ <
+£nd
+) {
+
+1234 ià(
+ `i§scii
+(*
+s
+è&&
+ `i¦ow”
+(*s))
+
+1235 *
+s
+ =
+ `touµ”
+(*s);
+
+1236
+s
+++;
+
+1238
+ }
+}
+
+1240
+ $lÿ£
+(
+s
+,
+£nd
+)
+
+1241 *
+s
+;
+
+1242 *
+£nd
+;
+
+1244 
+s
+ <
+£nd
+) {
+
+1245 ià(
+ `i§scii
+(*
+s
+è&&
+ `isuµ”
+(*s))
+
+1246 *
+s
+ =
+ `tÞow”
+(*s);
+
+1247
+s
+++;
+
+1249
+ }
+}
+
+1252
+ $¡r_šc
+(
+¡r
+)
+
+1253 
+STR
+ *
+¡r
+;
+
+1255 *
+d
+;
+
+1257 ià(!
+¡r
+ || sŒ =ð&
+¡r_undef
+)
+
+1259 ià(
+¡r
+->
+¡r_nok
+) {
+
+1260
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ += 1.0;
+
+1261
+¡r
+->
+¡r_pok
+ = 0;
+
+1264 ià(!
+¡r
+->
+¡r_pok
+ || !*¡r->
+¡r_±r
+) {
+
+1265
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ = 1.0;
+
+1266
+¡r
+->
+¡r_nok
+ = 1;
+
+1267
+¡r
+->
+¡r_pok
+ = 0;
+
+1270
+d
+ =
+¡r
+->
+¡r_±r
+;
+
+1271 
+ `i§Íha
+(*
+d
+)) d++;
+
+1272 
+ `isdig™
+(*
+d
+)) d++;
+
+1273 ià(*
+d
+) {
+
+1274
+ `¡r_num£t
+(
+¡r
+,
+ `©of
+(¡r->
+¡r_±r
+) + 1.0);
+
+1277
+d
+--;
+
+1278 
+d
+ >ð
+¡r
+->
+¡r_±r
+) {
+
+1279 ià(
+ `isdig™
+(*
+d
+)) {
+
+1280 ià(++*
+d
+ <= '9')
+
+1282 *(
+d
+--) = '0';
+
+1285 ++*
+d
+;
+
+1286 ià(
+ `i§Íha
+(*
+d
+))
+
+1288 *(
+d
+--) -= 'z' - 'a' + 1;
+
+1292
+ `STR_GROW
+(
+¡r
+, sŒ->
+¡r_cur
+ + 2);
+
+1293
+¡r
+->
+¡r_cur
+++;
+
+1294 
+d
+ =
+¡r
+->
+¡r_±r
+ + sŒ->
+¡r_cur
+; d > str->str_ptr; d--)
+
+1295 *
+d
+ = d[-1];
+
+1296 ià(
+ `isdig™
+(
+d
+[1]))
+
+1297 *
+d
+ = '1';
+
+1299 *
+d
+ = d[1];
+
+1300
+ }
+}
+
+1303
+ $¡r_dec
+(
+¡r
+)
+
+1304 
+STR
+ *
+¡r
+;
+
+1306 ià(!
+¡r
+ || sŒ =ð&
+¡r_undef
+)
+
+1308 ià(
+¡r
+->
+¡r_nok
+) {
+
+1309
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ -= 1.0;
+
+1310
+¡r
+->
+¡r_pok
+ = 0;
+
+1313 ià(!
+¡r
+->
+¡r_pok
+) {
+
+1314
+¡r
+->
+¡r_u
+.
+¡r_nv®
+ = -1.0;
+
+1315
+¡r
+->
+¡r_nok
+ = 1;
+
+1318
+ `¡r_num£t
+(
+¡r
+,
+ `©of
+(¡r->
+¡r_±r
+) - 1.0);
+
+1319
+ }
+}
+
+1326 
+ gtmps_size
+ = -1;
+
+1328
+STR
+ *
+
+1329
+ $¡r_mÜl
+(
+Þd¡r
+)
+
+1330
+STR
+ *
+Þd¡r
+;
+
+1332 
+STR
+ *
+¡r
+ =
+ `SŒ_Ãw
+(78,0);
+
+1334
+ `¡r_s£t
+(
+¡r
+,
+Þd¡r
+);
+
+1335 ià(++
+tmps_max
+ >
+tmps_size
+) {
+
+1336
+tmps_size
+ =
+tmps_max
+;
+
+1337 ià(!(
+tmps_size
+ & 127)) {
+
+1338 ià(
+tmps_size
+)
+
+1339
+ `R’ew
+(
+tmps_li¡
+,
+tmps_size
+ + 128,
+STR
+*);
+
+1341
+ `New
+(702,
+tmps_li¡
+, 128,
+STR
+*);
+
+1344
+tmps_li¡
+[
+tmps_max
+] =
+¡r
+;
+
+1345 ià(
+¡r
+->
+¡r_pok
+)
+
+1346
+¡r
+->
+¡r_pok
+ |ð
+SP_TEMP
+;
+
+1347 
+¡r
+;
+
+1348
+ }
+}
+
+1352
+STR
+ *
+
+1353
+ $¡r_2mÜl
+(
+¡r
+)
+
+1354 
+STR
+ *
+¡r
+;
+
+1356 ià(
+¡r
+ =ð&
+¡r_undef
+)
+
+1357 
+¡r
+;
+
+1358 ià(++
+tmps_max
+ >
+tmps_size
+) {
+
+1359
+tmps_size
+ =
+tmps_max
+;
+
+1360 ià(!(
+tmps_size
+ & 127)) {
+
+1361 ià(
+tmps_size
+)
+
+1362
+ `R’ew
+(
+tmps_li¡
+,
+tmps_size
+ + 128,
+STR
+*);
+
+1364
+ `New
+(704,
+tmps_li¡
+, 128,
+STR
+*);
+
+1367
+tmps_li¡
+[
+tmps_max
+] =
+¡r
+;
+
+1368 ià(
+¡r
+->
+¡r_pok
+)
+
+1369
+¡r
+->
+¡r_pok
+ |ð
+SP_TEMP
+;
+
+1370 
+¡r
+;
+
+1371
+ }
+}
+
+1373
+STR
+ *
+
+1374
+ $¡r_make
+(
+s
+,
+Ën
+)
+
+1375 *
+s
+;
+
+1376
+STRLEN
+
+Ën
+;
+
+1378 
+STR
+ *
+¡r
+ =
+ `SŒ_Ãw
+(79,0);
+
+1380 ià(!
+Ën
+)
+
+1381
+Ën
+ =
+ `¡¾’
+(
+s
+);
+
+1382
+ `¡r_n£t
+(
+¡r
+,
+s
+,
+Ën
+);
+
+1383 
+¡r
+;
+
+1384
+ }
+}
+
+1386
+STR
+ *
+
+1387
+ $¡r_nmake
+(
+n
+)
+
+1388 
+n
+;
+
+1390 
+STR
+ *
+¡r
+ =
+ `SŒ_Ãw
+(80,0);
+
+1392
+ `¡r_num£t
+(
+¡r
+,
+n
+);
+
+1393 
+¡r
+;
+
+1394
+ }
+}
+
+1398
+STR
+ *
+
+1399
+ $¡r_smake
+(
+Þd
+)
+
+1400 
+STR
+ *
+Þd
+;
+
+1402 
+STR
+ *
+Ãw
+ =
+ `SŒ_Ãw
+(81,0);
+
+1404 ià(!
+Þd
+)
+
+1405 
+NuΡr
+;
+
+1406 ià(
+Þd
+->
+¡r_¡©e
+ =ð
+SS_FREE
+) {
+
+1407
+ `w¬n
+("semi-panic:‡ttempto dup freed string");
+
+1408 
+NuΡr
+;
+
+1410 ià(
+Þd
+->
+¡r_¡©e
+ =ð
+SS_INCR
+ && !(Þd->
+¡r_pok
+ & 2))
+
+1411
+ `SŒ_Grow
+(
+Þd
+,0);
+
+1412 ià(
+Ãw
+->
+¡r_±r
+)
+
+1413
+ `Saãä“
+(
+Ãw
+->
+¡r_±r
+);
+
+1414
+ `CÝy
+(
+Þd
+,
+Ãw
+,1,
+STR
+);
+
+1415 ià(
+Þd
+->
+¡r_±r
+) {
+
+1416
+Ãw
+->
+¡r_±r
+ =
+ `n§ve¡r
+(
+Þd
+->¡r_±r,Þd->
+¡r_Ën
+);
+
+1417
+Ãw
+->
+¡r_pok
+ &ð~
+SP_TEMP
+;
+
+1419 
+Ãw
+;
+
+1420
+ }
+}
+
+1422
+ $¡r_»£t
+(
+s
+,
+¡ash
+)
+
+1423 *
+s
+;
+
+1424
+HASH
+ *
+¡ash
+;
+
+1426 
+HENT
+ *
+’Œy
+;
+
+1427 
+STAB
+ *
+¡ab
+;
+
+1428 
+STR
+ *
+¡r
+;
+
+1429 
+i
+;
+
+1430 
+SPAT
+ *
+¥©
+;
+
+1431 
+max
+;
+
+1433 ià(!*
+s
+) {
+
+1434 
+¥©
+ =
+¡ash
+->
+tbl_¥©roÙ
+;
+
+1435
+¥©
+ !ð
+Nu봩
+;
+
+1436
+¥©
+ = s·t->
+¥©_Ãxt
+) {
+
+1437
+¥©
+->
+¥©_æags
+ &ð~
+SPAT_USED
+;
+
+1444 ià(!
+¡ash
+->
+tbl_¬¿y
+)
+
+1446 *
+s
+) {
+
+1447
+i
+ = *
+s
+;
+
+1448 ià(
+s
+[1] == '-') {
+
+1449
+s
+ += 2;
+
+1451
+max
+ = *
+s
+++;
+
+1452  ;
+i
+ <ð
+max
+; i++) {
+
+1453 
+’Œy
+ =
+¡ash
+->
+tbl_¬¿y
+[
+i
+];
+
+1454
+’Œy
+;
+
+1455
+’Œy
+ =ƒÁry->
+h’t_Ãxt
+) {
+
+1456
+¡ab
+ = (
+STAB
+*)
+’Œy
+->
+h’t_v®
+;
+
+1457
+¡r
+ =
+ `¡ab_v®
+(
+¡ab
+);
+
+1458
+¡r
+->
+¡r_cur
+ = 0;
+
+1459
+¡r
+->
+¡r_nok
+ = 0;
+
+1460 #ifdeà
+TAINT
+
+
+1461
+¡r
+->
+¡r_š‹d
+ =
+š‹d
+;
+
+1463 ià(
+¡r
+->
+¡r_±r
+ !ð
+NuÎch
+)
+
+1464
+¡r
+->
+¡r_±r
+[0] = '\0';
+
+1465 ià(
+ `¡ab_x¬¿y
+(
+¡ab
+)) {
+
+1466
+ `aþ—r
+(
+ `¡ab_x¬¿y
+(
+¡ab
+));
+
+1468 ià(
+ `¡ab_xhash
+(
+¡ab
+)) {
+
+1469
+ `hþ—r
+(
+ `¡ab_xhash
+(
+¡ab
+),
+FALSE
+);
+
+1470 ià(
+¡ab
+ =ð
+’v¡ab
+)
+
+1471
+’vœÚ
+[0] =
+NuÎch
+;
+
+1476
+ }
+}
+
+1478 #ifdeà
+TAINT
+
+
+1479
+ $šrÝ”
+(
+s
+)
+
+1480 *
+s
+;
+
+1482 #ifdeà
+DEBUGGING
+
+
+1483 ià(
+debug
+ & 2048)
+
+1484
+ `årštf
+(
+¡d”r
+,"% %d %d %d\n",
+s
+,
+š‹d
+,
+uid
+,
+euid
+);
+
+1486 ià(
+š‹d
+ && (!
+euid
+ ||ƒuid !ð
+uid
+ ||
+egid
+ !ð
+gid
+)) {
+
+1487 ià(!
+un§ã
+)
+
+1488
+ `çl
+("%s",
+s
+);
+
+1489 ià(
+dow¬n
+)
+
+1490
+ `w¬n
+("%s",
+s
+);
+
+1492
+ }
+}
+
+1494
+ $š‹nv
+()
+
+1496 
+STR
+ *
+’v¡r
+;
+
+1498
+’v¡r
+ =
+ `hãtch
+(
+ `¡ab_hash
+(
+’v¡ab
+),"PATH",4,
+FALSE
+);
+
+1499 ià(
+’v¡r
+ =ð&
+¡r_undef
+ ||ƒnv¡r->
+¡r_š‹d
+) {
+
+1500
+š‹d
+ = 1;
+
+1501 ià(
+’v¡r
+->
+¡r_š‹d
+ == 2)
+
+1502
+ `šrÝ”
+("Insecure directory in PATH");
+
+1504
+ `šrÝ”
+("Insecure PATH");
+
+1506
+’v¡r
+ =
+ `hãtch
+(
+ `¡ab_hash
+(
+’v¡ab
+),"IFS",3,
+FALSE
+);
+
+1507 ià(
+’v¡r
+ !ð&
+¡r_undef
+ &&ƒnv¡r->
+¡r_š‹d
+) {
+
+1508
+š‹d
+ = 1;
+
+1509
+ `šrÝ”
+("Insecure IFS");
+
+1511
+ }
+}
+
+ @str.h
+
+17 
+ s¡ršg
+ {
+
+18 *
+ m¡r_±r
+;
+
+19
+STRLEN
+
+ m¡r_Ën
+;
+
+21 
+ m¡r_nv®
+;
+
+22
+STAB
+ *
+ m¡r_¡ab
+;
+
+23 
+ m¡r_u£ful
+;
+
+24
+ARG
+ *
+ m¡r_¬gs
+;
+
+25
+HASH
+ *
+ m¡r_hash
+;
+
+26
+ARRAY
+ *
+ m¡r_¬¿y
+;
+
+27
+CMD
+ *
+ m¡r_cmd
+;
+
+28 }
+ m¡r_u
+;
+
+29
+STRLEN
+
+ m¡r_cur
+;
+
+30
+STR
+ *
+ m¡r_magic
+;
+
+32 
+ m¡r_pok
+;
+
+33 
+ m¡r_nok
+;
+
+34 
+ m¡r_¿»
+;
+
+35 
+ m¡r_¡©e
+;
+
+37 #ifdeà
+TAINT
+
+
+38
+boÞ
+
+ m¡r_š‹d
+;
+
+42 
+ s¡ab
+ {
+
+43
+STBP
+ *
+ m¡r_±r
+;
+
+44
+STRLEN
+
+ m¡r_Ën
+;
+
+46 
+ m¡r_nv®
+;
+
+47
+STAB
+ *
+ m¡r_¡ab
+;
+
+48 
+ m¡r_u£ful
+;
+
+49
+ARG
+ *
+ m¡r_¬gs
+;
+
+50
+HASH
+ *
+ m¡r_hash
+;
+
+51
+ARRAY
+ *
+ m¡r_¬¿y
+;
+
+52
+CMD
+ *
+ m¡r_cmd
+;
+
+53 }
+ m¡r_u
+;
+
+54
+STRLEN
+
+ m¡r_cur
+;
+
+55
+STR
+ *
+ m¡r_magic
+;
+
+57 
+ m¡r_pok
+;
+
+58 
+ m¡r_nok
+;
+
+59 
+ m¡r_¿»
+;
+
+60 
+ m¡r_¡©e
+;
+
+62 #ifdeà
+TAINT
+
+
+63
+boÞ
+
+ m¡r_š‹d
+;
+
+69 
+ sl¡ršg
+ {
+
+70 
+¡ršg
+
+ ml¡r
+;
+
+71
+STRLEN
+
+ ml¡r_off£t
+;
+
+72
+STRLEN
+
+ ml¡r_Ën
+;
+
+76 
+ #SP_VALID
+ 1
+
+ )
+
+77 
+ #SP_FBM
+ 2
+
+ )
+
+78 
+ #SP_STUDIED
+ 4
+
+ )
+
+79 
+ #SP_CASEFOLD
+ 8
+
+ )
+
+80 
+ #SP_INTRP
+ 16
+
+ )
+
+81 
+ #SP_TAIL
+ 32
+
+ )
+
+82 
+ #SP_MULTI
+ 64
+
+ )
+
+83 
+ #SP_TEMP
+ 128
+
+ )
+
+85 
+ #NuΡr
+
+ `NuÎ
+(
+STR
+*)
+
+ )
+
+88 
+ #SS_NORM
+ 0
+
+ )
+
+89 
+ #SS_INCR
+ 1
+
+ )
+
+90 
+ #SS_SARY
+ 2
+
+ )
+
+91 
+ #SS_SHASH
+ 3
+
+ )
+
+92 
+ #SS_SINT
+ 4
+
+ )
+
+93 
+ #SS_SLONG
+ 5
+
+ )
+
+94 
+ #SS_SSTRP
+ 6
+
+ )
+
+95 
+ #SS_SHPTR
+ 7
+
+ )
+
+96 
+ #SS_SNSTAB
+ 8
+
+ )
+
+97 
+ #SS_SCSV
+ 9
+
+ )
+
+98 
+ #SS_SAPTR
+ 10
+
+ )
+
+99 
+ #SS_HASH
+ 253
+
+ )
+
+100 
+ #SS_ARY
+ 254
+
+ )
+
+101 
+ #SS_FREE
+ 255
+
+ )
+
+107 #ifdeà
+TAINT
+
+
+108 
+ #STABSET
+(
+x
+) \
+
+109 (
+x
+)->
+¡r_š‹d
+ |ð
+š‹d
+; \
+
+110 ià((
+x
+)->
+¡r_magic
+) \
+
+111
+ `¡ab£t
+((
+x
+)->
+¡r_magic
+,(x))
+
+ )
+
+113 
+ #STABSET
+(
+x
+) \
+
+114 ià((
+x
+)->
+¡r_magic
+) \
+
+115
+ `¡ab£t
+((
+x
+)->
+¡r_magic
+,(x))
+
+ )
+
+118 
+ #STR_SSET
+(
+d¡
+,
+¤c
+èià(d¡ !ð¤cè
+ `¡r_s£t
+(d¡,¤c)
+
+ )
+
+120
+EXT
+
+STR
+ **
+ gtmps_li¡
+;
+
+121
+EXT
+ 
+tmps_max
+
+INIT
+(-1);
+
+122
+EXT
+ 
+tmps_ba£
+
+INIT
+(-1);
+
+124 *
+¡r_2±r
+();
+
+125 
+¡r_2num
+();
+
+126
+STR
+ *
+¡r_mÜl
+();
+
+127
+STR
+ *
+¡r_2mÜl
+();
+
+128
+STR
+ *
+¡r_make
+();
+
+129
+STR
+ *
+¡r_nmake
+();
+
+130
+STR
+ *
+¡r_smake
+();
+
+131 
+¡r_cmp
+();
+
+132 
+¡r_eq
+();
+
+133 
+¡r_magic
+();
+
+134 
+¡r_š£¹
+();
+
+135
+STRLEN
+
+¡r_Ën
+();
+
+ @toke.c
+
+17 
+ ~"EXTERN.h
+"
+
+18 
+ ~"³¾.h
+"
+
+19 
+ ~"³¾y.h
+"
+
+21 #ifdeà
+I_FCNTL
+
+
+22 
+ ~<fúŽ.h
+>
+
+24 #ifdeà
+I_SYS_FILE
+
+
+25 
+ ~<sys/fže.h
+>
+
+30 *
+ g·Ž—ve
+ = "\\.^$@dDwWsSbB+*?|()-nrtf0123456789[{]}";
+
+32 *
+ g»·r£
+;
+
+34 
+checkcomma
+();
+
+36 #ifdeà
+CLINE
+
+
+37 #undeà
+CLINE
+
+
+39 
+ #CLINE
+ (
+cmdlše
+ = (
+curcmd
+->
+c_lše
+ < cmdlš? curcmd->c_lš: cmdlše))
+
+ )
+
+41 
+ #META
+(
+c
+è((cè| 128)
+
+ )
+
+43 
+ #RETURN
+(
+»tv®
+è (
+buåŒ
+ =
+s
+,(ì‘v®)
+
+ )
+
+44 
+ #OPERATOR
+(
+»tv®
+è (
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,(ì‘v®)
+
+ )
+
+45 
+ #TERM
+(
+»tv®
+è (
+CLINE
+,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,(ì‘v®)
+
+ )
+
+46 
+ #LOOPX
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+LOOPEX
+)
+
+ )
+
+47 
+ #FTST
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+FILETEST
+)
+
+ )
+
+48 
+ #FUN0
+(
+f
+è(
+yylv®
+.
+iv®
+ = f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FUNC0
+)
+
+ )
+
+49 
+ #FUN1
+(
+f
+è(
+yylv®
+.
+iv®
+ = f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FUNC1
+)
+
+ )
+
+50 
+ #FUN2
+(
+f
+è(
+yylv®
+.
+iv®
+ = f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FUNC2
+)
+
+ )
+
+51 
+ #FUN2x
+(
+f
+è(
+yylv®
+.
+iv®
+ = f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FUNC2x
+)
+
+ )
+
+52 
+ #FUN3
+(
+f
+è(
+yylv®
+.
+iv®
+ = f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FUNC3
+)
+
+ )
+
+53 
+ #FUN4
+(
+f
+è(
+yylv®
+.
+iv®
+ = f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FUNC4
+)
+
+ )
+
+54 
+ #FUN5
+(
+f
+è(
+yylv®
+.
+iv®
+ = f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FUNC5
+)
+
+ )
+
+55 
+ #FL
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FLIST
+)
+
+ )
+
+56 
+ #FL2
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FLIST2
+)
+
+ )
+
+57 
+ #HFUN
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+HSHFUN
+)
+
+ )
+
+58 
+ #HFUN3
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+HSHFUN3
+)
+
+ )
+
+59 
+ #LFUN
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+LVALFUN
+)
+
+ )
+
+60 
+ #AOP
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+ADDOP
+)
+
+ )
+
+61 
+ #MOP
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+MULOP
+)
+
+ )
+
+62 
+ #EOP
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+EQOP
+)
+
+ )
+
+63 
+ #ROP
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+RELOP
+)
+
+ )
+
+64 
+ #FOP
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FILOP
+)
+
+ )
+
+65 
+ #FOP2
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FILOP2
+)
+
+ )
+
+66 
+ #FOP3
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FILOP3
+)
+
+ )
+
+67 
+ #FOP4
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FILOP4
+)
+
+ )
+
+68 
+ #FOP22
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FILOP22
+)
+
+ )
+
+69 
+ #FOP25
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+FALSE
+,
+buåŒ
+ =
+s
+,()
+FILOP25
+)
+
+ )
+
+74 
+ #UNI
+(
+f
+è(
+yylv®
+.
+iv®
+ = f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+, \
+
+75 (*
+s
+ =ð'(' || ( ð
+ `sk¥aû
+(s), * =ð'('è? ()
+FUNC1
+ : ()
+UNIOP
+è)
+
+ )
+
+80 
+ #LOP
+(
+f
+è(
+CLINE
+, *
+s
+ =ð'(' || ( ð
+ `sk¥aû
+(s), *s == '(') ? \
+
+81 (*
+s
+ =
+ `META
+('('),
+buåŒ
+ =
+ÞdbuåŒ
+, '(') : \
+
+82 (
+yylv®
+.
+iv®
+=
+f
+,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+LISTOP
+))
+
+ )
+
+84 
+ #OLDLOP
+(
+f
+è(
+yylv®
+.
+iv®
+=f,
+ex³ù‹rm
+ =
+TRUE
+,
+buåŒ
+ =
+s
+,()
+LISTOP
+)
+
+ )
+
+87
+ $sk¥aû
+(
+s
+)
+
+88 *
+s
+;
+
+90 
+s
+ <
+buãnd
+ &&
+ `i§scii
+(*sè&&
+ `is¥aû
+(*s))
+
+91
+s
+++;
+
+92 
+s
+;
+
+93
+ }
+}
+
+95 #ifdeà
+CRIPPLED_CC
+
+
+97 #undeà
+UNI
+
+
+98 #undeà
+LOP
+
+
+99 
+ #UNI
+(
+f
+è
+ `uni
+(f,
+s
+)
+
+ )
+
+100 
+ #LOP
+(
+f
+è
+ `lÝ
+(f,
+s
+)
+
+ )
+
+103
+ $uni
+(
+f
+,
+s
+)
+
+104 
+f
+;
+
+105 *
+s
+;
+
+107
+yylv®
+.
+iv®
+ =
+f
+;
+
+108
+ex³ù‹rm
+ =
+TRUE
+;
+
+109
+buåŒ
+ =
+s
+;
+
+110 ià(*
+s
+ == '(')
+
+111 
+FUNC1
+;
+
+112
+s
+ =
+ `sk¥aû
+(s);
+
+113 ià(*
+s
+ == '(')
+
+114 
+FUNC1
+;
+
+116 
+UNIOP
+;
+
+117
+ }
+}
+
+120
+ $lÝ
+(
+f
+,
+s
+)
+
+121 
+f
+;
+
+122 *
+s
+;
+
+124
+CLINE
+;
+
+125 ià(*
+s
+ != '(')
+
+126
+s
+ =
+ `sk¥aû
+(s);
+
+127 ià(*
+s
+ == '(') {
+
+128 *
+s
+ =
+ `META
+('(');
+
+129
+buåŒ
+ =
+ÞdbuåŒ
+;
+
+133
+yylv®
+.
+iv®
+=
+f
+;
+
+134
+ex³ù‹rm
+ =
+TRUE
+;
+
+135
+buåŒ
+ =
+s
+;
+
+136 
+LISTOP
+;
+
+138
+ }
+}
+
+142
+ $yyËx
+()
+
+144 *
+s
+ =
+buåŒ
+;
+
+145 *
+d
+;
+
+146 
+tmp
+;
+
+147 
+boÞ
+
+š_fÜm©
+ =
+FALSE
+;
+
+148 
+boÞ
+
+fœ¡lše
+ =
+TRUE
+;
+
+149
+
+yych¬
+;
+
+151
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+;
+
+152
+ÞdbuåŒ
+ =
+s
+;
+
+154
+»Œy
+:
+
+155 #ifdeà
+YYDEBUG
+
+
+156 ià(
+debug
+ & 1)
+
+157 ià(
+ `šdex
+(
+s
+,'\n'))
+
+158
+ `årštf
+(
+¡d”r
+,"Tok’”‡ˆ%s",
+s
+);
+
+160
+ `årštf
+(
+¡d”r
+,"Tok’”‡ˆ%s\n",
+s
+);
+
+162 #ifdeà
+BADSWITCH
+
+
+163 ià(*
+s
+ & 128) {
+
+164 ià((*
+s
+ & 127) == '(')
+
+165 *
+s
+++ = '(';
+
+167
+ `w¬n
+("UÄecognized ch¬aù” \\%03ØignÜed", *
+s
+++ & 255);
+
+168 
+»Œy
+;
+
+171 *
+s
+) {
+
+173 ià((*
+s
+ & 127) == '(')
+
+174 *
+s
+++ = '(';
+
+176
+ `w¬n
+("UÄecognized ch¬aù” \\%03ØignÜed", *
+s
+++ & 255);
+
+177 
+»Œy
+;
+
+180 
+çke_eof
+;
+
+182 ià(!
+rså
+)
+
+183
+ `RETURN
+(0);
+
+184 ià(
+s
+++ <
+buãnd
+)
+
+185 
+»Œy
+;
+
+186 ià(
+fœ¡lše
+) {
+
+187
+fœ¡lše
+ =
+FALSE
+;
+
+188 ià(
+mšus_n
+ ||
+mšus_p
+ ||
+³¾db
+) {
+
+189
+ `¡r_£t
+(
+lše¡r
+,"");
+
+190 ià(
+³¾db
+) {
+
+191 *
+ `g‘’v
+();
+
+192 *
+pdb
+ =
+ `g‘’v
+("PERLDB");
+
+194
+ `¡r_ÿt
+(
+lše¡r
+,
+pdb
+ ?…db : "require 'perldb.pl'");
+
+195
+ `¡r_ÿt
+(
+lše¡r
+, ";");
+
+197 ià(
+mšus_n
+ ||
+mšus_p
+) {
+
+198
+ `¡r_ÿt
+(
+lše¡r
+,"line: while (<>) {");
+
+199 ià(
+mšus_l
+)
+
+200
+ `¡r_ÿt
+(
+lše¡r
+,"chop;");
+
+201 ià(
+mšus_a
+)
+
+202
+ `¡r_ÿt
+(
+lše¡r
+,"@F=split(' ');");
+
+204
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+s
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+205
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+206 
+»Œy
+;
+
+209 ià(
+š_fÜm©
+) {
+
+210
+buåŒ
+ =
+buãnd
+;
+
+211
+yylv®
+.
+fÜmv®
+ =
+ `lßd_fÜm©
+();
+
+212
+š_fÜm©
+ =
+FALSE
+;
+
+213
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+s
+ =
+ `¡r_g‘
+(
+lše¡r
+) + 1;
+
+214
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+215
+ `OPERATOR
+(
+FORMLIST
+);
+
+217
+curcmd
+->
+c_lše
+++;
+
+218 #ifdeà
+CRYPTSCRIPT
+
+
+219
+ `üy±sw™ch
+();
+
+222 ià((
+s
+ =
+ `¡r_g‘s
+(
+lše¡r
+,
+rså
+, 0)è=ð
+NuÎch
+) {
+
+223
+çke_eof
+:
+
+224 ià(
+rså
+) {
+
+225 ià(
+´•roûss
+)
+
+226 ()
+ `mypþo£
+(
+rså
+);
+
+227 ià(
+rså
+ =ð
+¡dš
+)
+
+228
+ `þ—»¼
+(
+¡dš
+);
+
+230 ()
+ `fþo£
+(
+rså
+);
+
+231
+rså
+ =
+NuÎå
+;
+
+233 ià(
+mšus_n
+ ||
+mšus_p
+) {
+
+234
+ `¡r_£t
+(
+lše¡r
+,
+mšus_p
+ ? ";}continue{print" : "");
+
+235
+ `¡r_ÿt
+(
+lše¡r
+,";}");
+
+236
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+s
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+237
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+238
+mšus_n
+ =
+mšus_p
+ = 0;
+
+239 
+»Œy
+;
+
+241
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+s
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+242
+ `¡r_£t
+(
+lše¡r
+,"");
+
+243
+ `RETURN
+(';');
+
+245 ià(
+dÛxŒaù
+ && *
+lše¡r
+->
+¡r_±r
+ == '#')
+
+246
+dÛxŒaù
+ =
+FALSE
+;
+
+247 } 
+dÛxŒaù
+);
+
+248
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+buåŒ
+ =
+s
+;
+
+249 ià(
+³¾db
+) {
+
+250
+STR
+ *
+¡r
+ =
+ `SŒ_Ãw
+(85,0);
+
+252
+ `¡r_s£t
+(
+¡r
+,
+lše¡r
+);
+
+253
+ `a¡Üe
+(
+ `¡ab_x¬¿y
+(
+curcmd
+->
+c_fže¡ab
+),()curcmd->
+c_lše
+,
+¡r
+);
+
+255 #ifdeà
+DEBUG
+
+
+256 ià(
+fœ¡lše
+) {
+
+257 *
+ `showšput
+();
+
+258
+s
+ =
+ `showšput
+();
+
+261
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+262 ià(
+curcmd
+->
+c_lše
+ == 1) {
+
+263 ià(*
+s
+ == '#' && s[1] == '!') {
+
+264 ià(!
+š_ev®
+ && !
+ `š¡r
+(
+s
+,"³¾"è&& in¡r(
+Üig¬gv
+[0],"perl")) {
+
+265 **
+Ãw¬gv
+;
+
+266 *
+cmd
+;
+
+268
+s
+ += 2;
+
+269 ià(*
+s
+ == ' ')
+
+270
+s
+++;
+
+271
+cmd
+ =
+s
+;
+
+272 
+s
+ <
+buãnd
+ && !
+ `is¥aû
+(*s))
+
+273
+s
+++;
+
+274 *
+s
+++ = '\0';
+
+275 
+s
+ <
+buãnd
+ &&
+ `is¥aû
+(*s))
+
+276
+s
+++;
+
+277 ià(
+s
+ <
+buãnd
+) {
+
+278
+ `Newz
+(899,
+Ãw¬gv
+,
+Üig¬gc
++3,*);
+
+279
+Ãw¬gv
+[1] =
+s
+;
+
+280 
+s
+ <
+buãnd
+ && !
+ `is¥aû
+(*s))
+
+281
+s
+++;
+
+282 *
+s
+ = '\0';
+
+283
+ `CÝy
+(
+Üig¬gv
++1,
+Ãw¬gv
++2,
+Üig¬gc
++1, *);
+
+286
+Ãw¬gv
+ =
+Üig¬gv
+;
+
+287
+Ãw¬gv
+[0] =
+cmd
+;
+
+288
+ `execv
+(
+cmd
+,
+Ãw¬gv
+);
+
+289
+ `çl
+("Cª'ˆexeø%s",
+cmd
+);
+
+293 
+s
+ <
+buãnd
+ &&
+ `is¥aû
+(*s))
+
+294
+s
+++;
+
+295 ià(*
+s
+ == ':')
+
+296
+s
+++;
+
+299 
+»Œy
+;
+
+301
+s
+++;
+
+302 
+»Œy
+;
+
+304 ià(
+´•roûss
+ &&
+s
+ =ð
+ `¡r_g‘
+(
+lše¡r
+) &&
+
+305
+s
+[1] =ð' ' &&
+ `isdig™
+(s[2])) {
+
+306
+curcmd
+->
+c_lše
+ =
+ `©oi
+(
+s
++2)-1;
+
+307 
+s
+ +ð2;
+ `isdig™
+(*s); s++) ;
+
+308
+d
+ =
+buãnd
+;
+
+309 
+s
+ <
+d
+ &&
+ `is¥aû
+(*s)) s++;
+
+310
+s
+[
+ `¡¾’
+(s)-1] = '\0';
+
+311 ià(*
+s
+ == '"') {
+
+312
+s
+++;
+
+313
+s
+[
+ `¡¾’
+(s)-1] = '\0';
+
+315 ià(*
+s
+)
+
+316
+curcmd
+->
+c_fže¡ab
+ =
+ `f¡ab
+(
+s
+);
+
+318
+curcmd
+->
+c_fže¡ab
+ =
+ `f¡ab
+(
+Üigfž’ame
+);
+
+319
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+s
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+323 ià(
+š_ev®
+ && !
+rså
+) {
+
+324
+d
+ =
+buãnd
+;
+
+325 
+s
+ <
+d
+ && *s != '\n')
+
+326
+s
+++;
+
+327 ià(
+s
+ <
+d
+)
+
+328
+s
+++;
+
+329 ià(
+³¾db
+) {
+
+330
+STR
+ *
+¡r
+ =
+ `SŒ_Ãw
+(85,0);
+
+332
+ `¡r_n£t
+(
+¡r
+,
+lše¡r
+->
+¡r_±r
+,
+s
+ -†inestr->str_ptr);
+
+333
+ `a¡Üe
+(
+ `¡ab_x¬¿y
+(
+curcmd
+->
+c_fže¡ab
+),()curcmd->
+c_lše
+,
+¡r
+);
+
+334
+ `¡r_chÝ
+(
+lše¡r
+,
+s
+);
+
+336 ià(
+š_fÜm©
+) {
+
+337
+buåŒ
+ =
+s
+;
+
+338
+yylv®
+.
+fÜmv®
+ =
+ `lßd_fÜm©
+();
+
+339
+š_fÜm©
+ =
+FALSE
+;
+
+340
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+s
+ =
+buåŒ
+ + 1;
+
+341
+ `TERM
+(
+FORMLIST
+);
+
+343
+curcmd
+->
+c_lše
+++;
+
+346 *
+s
+ = '\0';
+
+347
+buãnd
+ =
+s
+;
+
+349 
+»Œy
+;
+
+351 ià(
+s
+[1] &&
+ `i§Íha
+(s[1]) && !isalpha(s[2])) {
+
+352
+s
+++;
+
+353 *
+s
+++) {
+
+354 'r':
+ `FTST
+(
+O_FTEREAD
+);
+
+355 'w':
+ `FTST
+(
+O_FTEWRITE
+);
+
+356 'x':
+ `FTST
+(
+O_FTEEXEC
+);
+
+357 'o':
+ `FTST
+(
+O_FTEOWNED
+);
+
+358 'R':
+ `FTST
+(
+O_FTRREAD
+);
+
+359 'W':
+ `FTST
+(
+O_FTRWRITE
+);
+
+360 'X':
+ `FTST
+(
+O_FTREXEC
+);
+
+361 'O':
+ `FTST
+(
+O_FTROWNED
+);
+
+362 'e':
+ `FTST
+(
+O_FTIS
+);
+
+363 'z':
+ `FTST
+(
+O_FTZERO
+);
+
+364 's':
+ `FTST
+(
+O_FTSIZE
+);
+
+365 'f':
+ `FTST
+(
+O_FTFILE
+);
+
+366 'd':
+ `FTST
+(
+O_FTDIR
+);
+
+367 'l':
+ `FTST
+(
+O_FTLINK
+);
+
+368 'p':
+ `FTST
+(
+O_FTPIPE
+);
+
+369 'S':
+ `FTST
+(
+O_FTSOCK
+);
+
+370 'u':
+ `FTST
+(
+O_FTSUID
+);
+
+371 'g':
+ `FTST
+(
+O_FTSGID
+);
+
+372 'k':
+ `FTST
+(
+O_FTSVTX
+);
+
+373 'b':
+ `FTST
+(
+O_FTBLK
+);
+
+374 'c':
+ `FTST
+(
+O_FTCHR
+);
+
+375 't':
+ `FTST
+(
+O_FTTTY
+);
+
+376 'T':
+ `FTST
+(
+O_FTTEXT
+);
+
+377 'B':
+ `FTST
+(
+O_FTBINARY
+);
+
+378 'M':
+ `¡ab’t
+("\024",
+TRUE
+);
+ `FTST
+(
+O_FTMTIME
+);
+
+379 'A':
+ `¡ab’t
+("\024",
+TRUE
+);
+ `FTST
+(
+O_FTATIME
+);
+
+380 'C':
+ `¡ab’t
+("\024",
+TRUE
+);
+ `FTST
+(
+O_FTCTIME
+);
+
+382
+s
+ -= 2;
+
+386
+tmp
+ = *
+s
+++;
+
+387 ià(*
+s
+ =ð
+tmp
+) {
+
+388
+s
+++;
+
+389
+ `RETURN
+(
+DEC
+);
+
+391 ià(
+ex³ù‹rm
+)
+
+392
+ `OPERATOR
+('-');
+
+394
+ `AOP
+(
+O_SUBTRACT
+);
+
+396
+tmp
+ = *
+s
+++;
+
+397 ià(*
+s
+ =ð
+tmp
+) {
+
+398
+s
+++;
+
+399
+ `RETURN
+(
+INC
+);
+
+401 ià(
+ex³ù‹rm
+)
+
+402
+ `OPERATOR
+('+');
+
+404
+ `AOP
+(
+O_ADD
+);
+
+407 ià(
+ex³ù‹rm
+) {
+
+408
+s
+ =
+ `sÿnid’t
+(s,
+buãnd
+,
+tok’buf
+);
+
+409
+yylv®
+.
+¡abv®
+ =
+ `¡ab’t
+(
+tok’buf
+,
+TRUE
+);
+
+410
+ `TERM
+(
+STAR
+);
+
+412
+tmp
+ = *
+s
+++;
+
+413 ià(*
+s
+ =ð
+tmp
+) {
+
+414
+s
+++;
+
+415
+ `OPERATOR
+(
+POW
+);
+
+417
+ `MOP
+(
+O_MULTIPLY
+);
+
+419 ià(
+ex³ù‹rm
+) {
+
+420
+s
+ =
+ `sÿnid’t
+(s,
+buãnd
+,
+tok’buf
+);
+
+421
+yylv®
+.
+¡abv®
+ =
+ `hadd
+(
+ `¡ab’t
+(
+tok’buf
+,
+TRUE
+));
+
+422
+ `TERM
+(
+HSH
+);
+
+424
+s
+++;
+
+425
+ `MOP
+(
+O_MODULO
+);
+
+433
+tmp
+ = *
+s
+++;
+
+434
+ `OPERATOR
+(
+tmp
+);
+
+436
+tmp
+ = *
+s
+++;
+
+437 ià(
+ `is¥aû
+(*
+s
+) || *s == '#')
+
+438
+cmdlše
+ =
+NOLINE
+;
+
+439
+ `OPERATOR
+(
+tmp
+);
+
+441 ià(
+curcmd
+->
+c_lše
+ <
+cmdlše
+)
+
+442
+cmdlše
+ =
+curcmd
+->
+c_lše
+;
+
+443
+tmp
+ = *
+s
+++;
+
+444
+ `OPERATOR
+(
+tmp
+);
+
+447
+tmp
+ = *
+s
+++;
+
+448
+ `TERM
+(
+tmp
+);
+
+450
+tmp
+ = *
+s
+++;
+
+451
+ `RETURN
+(
+tmp
+);
+
+453
+s
+++;
+
+454
+tmp
+ = *
+s
+++;
+
+455 ià(
+tmp
+ == '&')
+
+456
+ `OPERATOR
+(
+ANDAND
+);
+
+457
+s
+--;
+
+458 ià(
+ex³ù‹rm
+) {
+
+459
+d
+ =
+buãnd
+;
+
+460 
+s
+ <
+d
+ &&
+ `is¥aû
+(*s))
+
+461
+s
+++;
+
+462 ià(
+ `i§Íha
+(*
+s
+) || *s == '_' || *s == '\'')
+
+463 *(--
+s
+) = '\\';
+
+464
+ `OPERATOR
+(
+AMPER
+);
+
+466
+ `OPERATOR
+('&');
+
+468
+s
+++;
+
+469
+tmp
+ = *
+s
+++;
+
+470 ià(
+tmp
+ == '|')
+
+471
+ `OPERATOR
+(
+OROR
+);
+
+472
+s
+--;
+
+473
+ `OPERATOR
+('|');
+
+475
+s
+++;
+
+476
+tmp
+ = *
+s
+++;
+
+477 ià(
+tmp
+ == '=')
+
+478
+ `EOP
+(
+O_EQ
+);
+
+479 ià(
+tmp
+ == '~')
+
+480
+ `OPERATOR
+(
+MATCH
+);
+
+481
+s
+--;
+
+482
+ `OPERATOR
+('=');
+
+484
+s
+++;
+
+485
+tmp
+ = *
+s
+++;
+
+486 ià(
+tmp
+ == '=')
+
+487
+ `EOP
+(
+O_NE
+);
+
+488 ià(
+tmp
+ == '~')
+
+489
+ `OPERATOR
+(
+NMATCH
+);
+
+490
+s
+--;
+
+491
+ `OPERATOR
+('!');
+
+493 ià(
+ex³ù‹rm
+) {
+
+494
+s
+ =
+ `sÿn¡r
+(s);
+
+495
+ `TERM
+(
+RSTRING
+);
+
+497
+s
+++;
+
+498
+tmp
+ = *
+s
+++;
+
+499 ià(
+tmp
+ == '<')
+
+500
+ `OPERATOR
+(
+LS
+);
+
+501 ià(
+tmp
+ == '=') {
+
+502
+tmp
+ = *
+s
+++;
+
+503 ià(
+tmp
+ == '>')
+
+504
+ `EOP
+(
+O_NCMP
+);
+
+505
+s
+--;
+
+506
+ `ROP
+(
+O_LE
+);
+
+508
+s
+--;
+
+509
+ `ROP
+(
+O_LT
+);
+
+511
+s
+++;
+
+512
+tmp
+ = *
+s
+++;
+
+513 ià(
+tmp
+ == '>')
+
+514
+ `OPERATOR
+(
+RS
+);
+
+515 ià(
+tmp
+ == '=')
+
+516
+ `ROP
+(
+O_GE
+);
+
+517
+s
+--;
+
+518
+ `ROP
+(
+O_GT
+);
+
+520 
+ #SNARFWORD
+ \
+
+521
+d
+ =
+tok’buf
+; \
+
+522 
+ `i§scii
+(*
+s
+) && \
+
+523 (
+ `i§Íha
+(*
+s
+è||
+ `isdig™
+(*s) || *s == '_' || *s == '\'')) \
+
+524 *
+d
+++ = *
+s
+++; \
+
+525 
+d
+[-1] == '\'') \
+
+526
+d
+--,
+s
+--; \
+
+527 *
+d
+ = '\0'; \
+
+528
+d
+ =
+tok’buf
+;
+
+ )
+
+531 ià(
+s
+[1] =ð'#' && (
+ `i§Íha
+(s[2]) || s[2] == '_')) {
+
+532
+s
+++;
+
+533
+s
+ =
+ `sÿnid’t
+(s,
+buãnd
+,
+tok’buf
+);
+
+534
+yylv®
+.
+¡abv®
+ =
+ `¯dd
+(
+ `¡ab’t
+(
+tok’buf
+,
+TRUE
+));
+
+535
+ `TERM
+(
+ARYLEN
+);
+
+537
+d
+ =
+s
+;
+
+538
+s
+ =
+ `sÿnid’t
+(s,
+buãnd
+,
+tok’buf
+);
+
+539 ià(
+»·r£
+) {
+
+540
+do_»·r£
+:
+
+541
+s
+[-1] = ')';
+
+542
+s
+ =
+d
+;
+
+543
+s
+[1] = s[0];
+
+544
+s
+[0] = '(';
+
+545 
+»Œy
+;
+
+547
+yylv®
+.
+¡abv®
+ =
+ `¡ab’t
+(
+tok’buf
+,
+TRUE
+);
+
+548
+ `TERM
+(
+REG
+);
+
+551
+d
+ =
+s
+;
+
+552
+s
+ =
+ `sÿnid’t
+(s,
+buãnd
+,
+tok’buf
+);
+
+553 ià(
+»·r£
+)
+
+554 
+do_»·r£
+;
+
+555
+yylv®
+.
+¡abv®
+ =
+ `¯dd
+(
+ `¡ab’t
+(
+tok’buf
+,
+TRUE
+));
+
+556
+ `TERM
+(
+ARY
+);
+
+560 ià(
+ex³ù‹rm
+) {
+
+561
+s
+ =
+ `sÿÅ©
+(s);
+
+562
+ `TERM
+(
+PATTERN
+);
+
+564
+tmp
+ = *
+s
+++;
+
+565 ià(
+tmp
+ == '/')
+
+566
+ `MOP
+(
+O_DIVIDE
+);
+
+567
+ `OPERATOR
+(
+tmp
+);
+
+570 ià(!
+ex³ù‹rm
+ || !
+ `isdig™
+(
+s
+[1])) {
+
+571
+tmp
+ = *
+s
+++;
+
+572 ià(*
+s
+ =ð
+tmp
+) {
+
+573
+s
+++;
+
+574
+ `OPERATOR
+(
+DOTDOT
+);
+
+576
+ `AOP
+(
+O_CONCAT
+);
+
+582
+s
+ =
+ `sÿn¡r
+(s);
+
+583
+ `TERM
+(
+RSTRING
+);
+
+586
+s
+++;
+
+589
+SNARFWORD
+;
+
+590 ià(
+d
+[1] == '_') {
+
+591 ià(
+ `¡rEQ
+(
+d
+,"__LINE__") || strEQ(d,"__FILE__")) {
+
+592
+ARG
+ *
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+594
+yylv®
+.
+¬g
+ =‡rg;
+
+595
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+596 ià(
+d
+[2] == 'L')
+
+597 ()
+ `¥rštf
+(
+tok’buf
+,"%ld",()
+curcmd
+->
+c_lše
+);
+
+599
+ `¡rýy
+(
+tok’buf
+,
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+);
+
+600
+¬g
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+601
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+ `¡r_make
+(
+tok’buf
+,
+ `¡¾’
+(tokenbuf));
+
+602
+ `TERM
+(
+RSTRING
+);
+
+604 ià(
+ `¡rEQ
+(
+d
+,"__END__")) {
+
+605 #iâdeà
+TAINT
+
+
+606
+STAB
+ *
+¡ab
+;
+
+607 
+fd
+;
+
+609 ià(
+¡ab
+ =
+ `¡ab’t
+("DATA",
+FALSE
+)) {
+
+610
+¡ab
+->
+¡r_pok
+ |ð
+SP_MULTI
+;
+
+611
+ `¡ab_io
+(
+¡ab
+èð
+ `¡io_Ãw
+();
+
+612
+ `¡ab_io
+(
+¡ab
+)->
+iå
+ =
+rså
+;
+
+613 #ià
+ `defšed
+(
+HAS_FCNTL
+è&& defšed(
+F_SETFD
+)
+
+614
+fd
+ =
+ `fž’o
+(
+rså
+);
+
+615
+ `fúŽ
+(
+fd
+,
+F_SETFD
+,fd >= 3);
+
+617 ià(
+´•roûss
+)
+
+618
+ `¡ab_io
+(
+¡ab
+)->
+ty³
+ = '|';
+
+619 ià(
+rså
+ =ð
+¡dš
+)
+
+620
+ `¡ab_io
+(
+¡ab
+)->
+ty³
+ = '-';
+
+622
+ `¡ab_io
+(
+¡ab
+)->
+ty³
+ = '<';
+
+623
+rså
+ =
+NuÎå
+;
+
+626 
+çke_eof
+;
+
+631
+SNARFWORD
+;
+
+632 ià(
+ `¡rEQ
+(
+d
+,"alarm"))
+
+633
+ `UNI
+(
+O_ALARM
+);
+
+634 ià(
+ `¡rEQ
+(
+d
+,"accept"))
+
+635
+ `FOP22
+(
+O_ACCEPT
+);
+
+636 ià(
+ `¡rEQ
+(
+d
+,"atan2"))
+
+637
+ `FUN2
+(
+O_ATAN2
+);
+
+640
+SNARFWORD
+;
+
+641 ià(
+ `¡rEQ
+(
+d
+,"bind"))
+
+642
+ `FOP2
+(
+O_BIND
+);
+
+643 ià(
+ `¡rEQ
+(
+d
+,"binmode"))
+
+644
+ `FOP
+(
+O_BINMODE
+);
+
+647
+SNARFWORD
+;
+
+648 ià(
+ `¡rEQ
+(
+d
+,"chop"))
+
+649
+ `LFUN
+(
+O_CHOP
+);
+
+650 ià(
+ `¡rEQ
+(
+d
+,"continue"))
+
+651
+ `OPERATOR
+(
+CONTINUE
+);
+
+652 ià(
+ `¡rEQ
+(
+d
+,"chdir")) {
+
+653 ()
+ `¡ab’t
+("ENV",
+TRUE
+);
+
+654
+ `UNI
+(
+O_CHDIR
+);
+
+656 ià(
+ `¡rEQ
+(
+d
+,"close"))
+
+657
+ `FOP
+(
+O_CLOSE
+);
+
+658 ià(
+ `¡rEQ
+(
+d
+,"closedir"))
+
+659
+ `FOP
+(
+O_CLOSEDIR
+);
+
+660 ià(
+ `¡rEQ
+(
+d
+,"cmp"))
+
+661
+ `EOP
+(
+O_SCMP
+);
+
+662 ià(
+ `¡rEQ
+(
+d
+,"caller"))
+
+663
+ `UNI
+(
+O_CALLER
+);
+
+664 ià(
+ `¡rEQ
+(
+d
+,"crypt")) {
+
+665 #ifdeà
+FCRYPT
+
+
+666
+ `š™_des
+();
+
+668
+ `FUN2
+(
+O_CRYPT
+);
+
+670 ià(
+ `¡rEQ
+(
+d
+,"chmod"))
+
+671
+ `LOP
+(
+O_CHMOD
+);
+
+672 ià(
+ `¡rEQ
+(
+d
+,"chown"))
+
+673
+ `LOP
+(
+O_CHOWN
+);
+
+674 ià(
+ `¡rEQ
+(
+d
+,"connect"))
+
+675
+ `FOP2
+(
+O_CONNECT
+);
+
+676 ià(
+ `¡rEQ
+(
+d
+,"cos"))
+
+677
+ `UNI
+(
+O_COS
+);
+
+678 ià(
+ `¡rEQ
+(
+d
+,"chroot"))
+
+679
+ `UNI
+(
+O_CHROOT
+);
+
+682
+SNARFWORD
+;
+
+683 ià(
+ `¡rEQ
+(
+d
+,"do")) {
+
+684
+d
+ =
+buãnd
+;
+
+685 
+s
+ <
+d
+ &&
+ `is¥aû
+(*s))
+
+686
+s
+++;
+
+687 ià(
+ `i§Íha
+(*
+s
+) || *s == '_')
+
+688 *(--
+s
+) = '\\';
+
+689
+ `OPERATOR
+(
+DO
+);
+
+691 ià(
+ `¡rEQ
+(
+d
+,"die"))
+
+692
+ `LOP
+(
+O_DIE
+);
+
+693 ià(
+ `¡rEQ
+(
+d
+,"defined"))
+
+694
+ `LFUN
+(
+O_DEFINED
+);
+
+695 ià(
+ `¡rEQ
+(
+d
+,"delete"))
+
+696
+ `OPERATOR
+(
+DELETE
+);
+
+697 ià(
+ `¡rEQ
+(
+d
+,"dbmopen"))
+
+698
+ `HFUN3
+(
+O_DBMOPEN
+);
+
+699 ià(
+ `¡rEQ
+(
+d
+,"dbmclose"))
+
+700
+ `HFUN
+(
+O_DBMCLOSE
+);
+
+701 ià(
+ `¡rEQ
+(
+d
+,"dump"))
+
+702
+ `LOOPX
+(
+O_DUMP
+);
+
+705
+SNARFWORD
+;
+
+706 ià(
+ `¡rEQ
+(
+d
+,"else"))
+
+707
+ `OPERATOR
+(
+ELSE
+);
+
+708 ià(
+ `¡rEQ
+(
+d
+,"elsif")) {
+
+709
+yylv®
+.
+iv®
+ =
+curcmd
+->
+c_lše
+;
+
+710
+ `OPERATOR
+(
+ELSIF
+);
+
+712 ià(
+ `¡rEQ
+(
+d
+,"eq") || strEQ(d,"EQ"))
+
+713
+ `EOP
+(
+O_SEQ
+);
+
+714 ià(
+ `¡rEQ
+(
+d
+,"exit"))
+
+715
+ `UNI
+(
+O_EXIT
+);
+
+716 ià(
+ `¡rEQ
+(
+d
+,"eval")) {
+
+717
+®l¡abs
+ =
+TRUE
+;
+
+718
+ `UNI
+(
+O_EVAL
+);
+
+720 ià(
+ `¡rEQ
+(
+d
+,"eof"))
+
+721
+ `FOP
+(
+O_EOF
+);
+
+722 ià(
+ `¡rEQ
+(
+d
+,"exp"))
+
+723
+ `UNI
+(
+O_EXP
+);
+
+724 ià(
+ `¡rEQ
+(
+d
+,"each"))
+
+725
+ `HFUN
+(
+O_EACH
+);
+
+726 ià(
+ `¡rEQ
+(
+d
+,"exec")) {
+
+727
+ `£t_csh
+();
+
+728
+ `LOP
+(
+O_EXEC_OP
+);
+
+730 ià(
+ `¡rEQ
+(
+d
+,"endhostent"))
+
+731
+ `FUN0
+(
+O_EHOSTENT
+);
+
+732 ià(
+ `¡rEQ
+(
+d
+,"endnetent"))
+
+733
+ `FUN0
+(
+O_ENETENT
+);
+
+734 ià(
+ `¡rEQ
+(
+d
+,"endservent"))
+
+735
+ `FUN0
+(
+O_ESERVENT
+);
+
+736 ià(
+ `¡rEQ
+(
+d
+,"endprotoent"))
+
+737
+ `FUN0
+(
+O_EPROTOENT
+);
+
+738 ià(
+ `¡rEQ
+(
+d
+,"endpwent"))
+
+739
+ `FUN0
+(
+O_EPWENT
+);
+
+740 ià(
+ `¡rEQ
+(
+d
+,"endgrent"))
+
+741
+ `FUN0
+(
+O_EGRENT
+);
+
+744
+SNARFWORD
+;
+
+745 ià(
+ `¡rEQ
+(
+d
+,"for") || strEQ(d,"foreach")) {
+
+746
+yylv®
+.
+iv®
+ =
+curcmd
+->
+c_lše
+;
+
+747
+ `OPERATOR
+(
+FOR
+);
+
+749 ià(
+ `¡rEQ
+(
+d
+,"format")) {
+
+750
+d
+ =
+buãnd
+;
+
+751 
+s
+ <
+d
+ &&
+ `is¥aû
+(*s))
+
+752
+s
+++;
+
+753 ià(
+ `i§Íha
+(*
+s
+) || *s == '_')
+
+754 *(--
+s
+) = '\\';
+
+755
+š_fÜm©
+ =
+TRUE
+;
+
+756
+®l¡abs
+ =
+TRUE
+;
+
+757
+ `OPERATOR
+(
+FORMAT
+);
+
+759 ià(
+ `¡rEQ
+(
+d
+,"fork"))
+
+760
+ `FUN0
+(
+O_FORK
+);
+
+761 ià(
+ `¡rEQ
+(
+d
+,"fcntl"))
+
+762
+ `FOP3
+(
+O_FCNTL
+);
+
+763 ià(
+ `¡rEQ
+(
+d
+,"fileno"))
+
+764
+ `FOP
+(
+O_FILENO
+);
+
+765 ià(
+ `¡rEQ
+(
+d
+,"flock"))
+
+766
+ `FOP2
+(
+O_FLOCK
+);
+
+769
+SNARFWORD
+;
+
+770 ià(
+ `¡rEQ
+(
+d
+,"gt") || strEQ(d,"GT"))
+
+771
+ `ROP
+(
+O_SGT
+);
+
+772 ià(
+ `¡rEQ
+(
+d
+,"ge") || strEQ(d,"GE"))
+
+773
+ `ROP
+(
+O_SGE
+);
+
+774 ià(
+ `¡rEQ
+(
+d
+,"grep"))
+
+775
+ `FL2
+(
+O_GREP
+);
+
+776 ià(
+ `¡rEQ
+(
+d
+,"goto"))
+
+777
+ `LOOPX
+(
+O_GOTO
+);
+
+778 ià(
+ `¡rEQ
+(
+d
+,"gmtime"))
+
+779
+ `UNI
+(
+O_GMTIME
+);
+
+780 ià(
+ `¡rEQ
+(
+d
+,"getc"))
+
+781
+ `FOP
+(
+O_GETC
+);
+
+782 ià(
+ `¡ºEQ
+(
+d
+,"get",3)) {
+
+783
+d
+ += 3;
+
+784 ià(*
+d
+ == 'p') {
+
+785 ià(
+ `¡rEQ
+(
+d
+,"ppid"))
+
+786
+ `FUN0
+(
+O_GETPPID
+);
+
+787 ià(
+ `¡rEQ
+(
+d
+,"pgrp"))
+
+788
+ `UNI
+(
+O_GETPGRP
+);
+
+789 ià(
+ `¡rEQ
+(
+d
+,"priority"))
+
+790
+ `FUN2
+(
+O_GETPRIORITY
+);
+
+791 ià(
+ `¡rEQ
+(
+d
+,"protobyname"))
+
+792
+ `UNI
+(
+O_GPBYNAME
+);
+
+793 ià(
+ `¡rEQ
+(
+d
+,"protobynumber"))
+
+794
+ `FUN1
+(
+O_GPBYNUMBER
+);
+
+795 ià(
+ `¡rEQ
+(
+d
+,"protoent"))
+
+796
+ `FUN0
+(
+O_GPROTOENT
+);
+
+797 ià(
+ `¡rEQ
+(
+d
+,"pwent"))
+
+798
+ `FUN0
+(
+O_GPWENT
+);
+
+799 ià(
+ `¡rEQ
+(
+d
+,"pwnam"))
+
+800
+ `FUN1
+(
+O_GPWNAM
+);
+
+801 ià(
+ `¡rEQ
+(
+d
+,"pwuid"))
+
+802
+ `FUN1
+(
+O_GPWUID
+);
+
+803 ià(
+ `¡rEQ
+(
+d
+,"peername"))
+
+804
+ `FOP
+(
+O_GETPEERNAME
+);
+
+806 ià(*
+d
+ == 'h') {
+
+807 ià(
+ `¡rEQ
+(
+d
+,"hostbyname"))
+
+808
+ `UNI
+(
+O_GHBYNAME
+);
+
+809 ià(
+ `¡rEQ
+(
+d
+,"hostbyaddr"))
+
+810
+ `FUN2
+(
+O_GHBYADDR
+);
+
+811 ià(
+ `¡rEQ
+(
+d
+,"hostent"))
+
+812
+ `FUN0
+(
+O_GHOSTENT
+);
+
+814 ià(*
+d
+ == 'n') {
+
+815 ià(
+ `¡rEQ
+(
+d
+,"netbyname"))
+
+816
+ `UNI
+(
+O_GNBYNAME
+);
+
+817 ià(
+ `¡rEQ
+(
+d
+,"netbyaddr"))
+
+818
+ `FUN2
+(
+O_GNBYADDR
+);
+
+819 ià(
+ `¡rEQ
+(
+d
+,"netent"))
+
+820
+ `FUN0
+(
+O_GNETENT
+);
+
+822 ià(*
+d
+ == 's') {
+
+823 ià(
+ `¡rEQ
+(
+d
+,"servbyname"))
+
+824
+ `FUN2
+(
+O_GSBYNAME
+);
+
+825 ià(
+ `¡rEQ
+(
+d
+,"servbyport"))
+
+826
+ `FUN2
+(
+O_GSBYPORT
+);
+
+827 ià(
+ `¡rEQ
+(
+d
+,"servent"))
+
+828
+ `FUN0
+(
+O_GSERVENT
+);
+
+829 ià(
+ `¡rEQ
+(
+d
+,"sockname"))
+
+830
+ `FOP
+(
+O_GETSOCKNAME
+);
+
+831 ià(
+ `¡rEQ
+(
+d
+,"sockopt"))
+
+832
+ `FOP3
+(
+O_GSOCKOPT
+);
+
+834 ià(*
+d
+ == 'g') {
+
+835 ià(
+ `¡rEQ
+(
+d
+,"grent"))
+
+836
+ `FUN0
+(
+O_GGRENT
+);
+
+837 ià(
+ `¡rEQ
+(
+d
+,"grnam"))
+
+838
+ `FUN1
+(
+O_GGRNAM
+);
+
+839 ià(
+ `¡rEQ
+(
+d
+,"grgid"))
+
+840
+ `FUN1
+(
+O_GGRGID
+);
+
+842 ià(*
+d
+ == 'l') {
+
+843 ià(
+ `¡rEQ
+(
+d
+,"login"))
+
+844
+ `FUN0
+(
+O_GETLOGIN
+);
+
+846
+d
+ -= 3;
+
+850
+SNARFWORD
+;
+
+851 ià(
+ `¡rEQ
+(
+d
+,"hex"))
+
+852
+ `UNI
+(
+O_HEX
+);
+
+855
+SNARFWORD
+;
+
+856 ià(
+ `¡rEQ
+(
+d
+,"if")) {
+
+857
+yylv®
+.
+iv®
+ =
+curcmd
+->
+c_lše
+;
+
+858
+ `OPERATOR
+(
+IF
+);
+
+860 ià(
+ `¡rEQ
+(
+d
+,"index"))
+
+861
+ `FUN2x
+(
+O_INDEX
+);
+
+862 ià(
+ `¡rEQ
+(
+d
+,"int"))
+
+863
+ `UNI
+(
+O_INT
+);
+
+864 ià(
+ `¡rEQ
+(
+d
+,"ioctl"))
+
+865
+ `FOP3
+(
+O_IOCTL
+);
+
+868
+SNARFWORD
+;
+
+869 ià(
+ `¡rEQ
+(
+d
+,"join"))
+
+870
+ `FL2
+(
+O_JOIN
+);
+
+873
+SNARFWORD
+;
+
+874 ià(
+ `¡rEQ
+(
+d
+,"keys"))
+
+875
+ `HFUN
+(
+O_KEYS
+);
+
+876 ià(
+ `¡rEQ
+(
+d
+,"kill"))
+
+877
+ `LOP
+(
+O_KILL
+);
+
+880
+SNARFWORD
+;
+
+881 ià(
+ `¡rEQ
+(
+d
+,"last"))
+
+882
+ `LOOPX
+(
+O_LAST
+);
+
+883 ià(
+ `¡rEQ
+(
+d
+,"local"))
+
+884
+ `OPERATOR
+(
+LOCAL
+);
+
+885 ià(
+ `¡rEQ
+(
+d
+,"length"))
+
+886
+ `UNI
+(
+O_LENGTH
+);
+
+887 ià(
+ `¡rEQ
+(
+d
+,"lt") || strEQ(d,"LT"))
+
+888
+ `ROP
+(
+O_SLT
+);
+
+889 ià(
+ `¡rEQ
+(
+d
+,"le") || strEQ(d,"LE"))
+
+890
+ `ROP
+(
+O_SLE
+);
+
+891 ià(
+ `¡rEQ
+(
+d
+,"localtime"))
+
+892
+ `UNI
+(
+O_LOCALTIME
+);
+
+893 ià(
+ `¡rEQ
+(
+d
+,"log"))
+
+894
+ `UNI
+(
+O_LOG
+);
+
+895 ià(
+ `¡rEQ
+(
+d
+,"link"))
+
+896
+ `FUN2
+(
+O_LINK
+);
+
+897 ià(
+ `¡rEQ
+(
+d
+,"listen"))
+
+898
+ `FOP2
+(
+O_LISTEN
+);
+
+899 ià(
+ `¡rEQ
+(
+d
+,"lstat"))
+
+900
+ `FOP
+(
+O_LSTAT
+);
+
+903 ià(
+s
+[1] == '\'') {
+
+904
+d
+ = "m";
+
+905
+s
+++;
+
+908
+SNARFWORD
+;
+
+910 ià(
+ `¡rEQ
+(
+d
+,"m")) {
+
+911
+s
+ =
+ `sÿÅ©
+(s-1);
+
+912 ià(
+yylv®
+.
+¬g
+)
+
+913
+ `TERM
+(
+PATTERN
+);
+
+915
+ `RETURN
+(1);
+
+917 
+d
+[1]) {
+
+919 ià(
+ `¡rEQ
+(
+d
+,"mkdir"))
+
+920
+ `FUN2
+(
+O_MKDIR
+);
+
+923 ià(
+ `¡rEQ
+(
+d
+,"msgctl"))
+
+924
+ `FUN3
+(
+O_MSGCTL
+);
+
+925 ià(
+ `¡rEQ
+(
+d
+,"msgget"))
+
+926
+ `FUN2
+(
+O_MSGGET
+);
+
+927 ià(
+ `¡rEQ
+(
+d
+,"msgrcv"))
+
+928
+ `FUN5
+(
+O_MSGRCV
+);
+
+929 ià(
+ `¡rEQ
+(
+d
+,"msgsnd"))
+
+930
+ `FUN3
+(
+O_MSGSND
+);
+
+935
+SNARFWORD
+;
+
+936 ià(
+ `¡rEQ
+(
+d
+,"next"))
+
+937
+ `LOOPX
+(
+O_NEXT
+);
+
+938 ià(
+ `¡rEQ
+(
+d
+,"ne") || strEQ(d,"NE"))
+
+939
+ `EOP
+(
+O_SNE
+);
+
+942
+SNARFWORD
+;
+
+943 ià(
+ `¡rEQ
+(
+d
+,"open"))
+
+944
+ `OPERATOR
+(
+OPEN
+);
+
+945 ià(
+ `¡rEQ
+(
+d
+,"ord"))
+
+946
+ `UNI
+(
+O_ORD
+);
+
+947 ià(
+ `¡rEQ
+(
+d
+,"oct"))
+
+948
+ `UNI
+(
+O_OCT
+);
+
+949 ià(
+ `¡rEQ
+(
+d
+,"opendir"))
+
+950
+ `FOP2
+(
+O_OPENDIR
+);
+
+953
+SNARFWORD
+;
+
+954 ià(
+ `¡rEQ
+(
+d
+,"print")) {
+
+955
+ `checkcomma
+(
+s
+,"filehandle");
+
+956
+ `LOP
+(
+O_PRINT
+);
+
+958 ià(
+ `¡rEQ
+(
+d
+,"printf")) {
+
+959
+ `checkcomma
+(
+s
+,"filehandle");
+
+960
+ `LOP
+(
+O_PRTF
+);
+
+962 ià(
+ `¡rEQ
+(
+d
+,"push")) {
+
+963
+yylv®
+.
+iv®
+ =
+O_PUSH
+;
+
+964
+ `OPERATOR
+(
+PUSH
+);
+
+966 ià(
+ `¡rEQ
+(
+d
+,"pop"))
+
+967
+ `OPERATOR
+(
+POP
+);
+
+968 ià(
+ `¡rEQ
+(
+d
+,"pack"))
+
+969
+ `FL2
+(
+O_PACK
+);
+
+970 ià(
+ `¡rEQ
+(
+d
+,"package"))
+
+971
+ `OPERATOR
+(
+PACKAGE
+);
+
+972 ià(
+ `¡rEQ
+(
+d
+,"pipe"))
+
+973
+ `FOP22
+(
+O_PIPE
+);
+
+976
+SNARFWORD
+;
+
+977 ià(
+ `¡rEQ
+(
+d
+,"q")) {
+
+978
+s
+ =
+ `sÿn¡r
+(s-1);
+
+979
+ `TERM
+(
+RSTRING
+);
+
+981 ià(
+ `¡rEQ
+(
+d
+,"qq")) {
+
+982
+s
+ =
+ `sÿn¡r
+(s-2);
+
+983
+ `TERM
+(
+RSTRING
+);
+
+985 ià(
+ `¡rEQ
+(
+d
+,"qx")) {
+
+986
+s
+ =
+ `sÿn¡r
+(s-2);
+
+987
+ `TERM
+(
+RSTRING
+);
+
+991
+SNARFWORD
+;
+
+992 ià(
+ `¡rEQ
+(
+d
+,"return"))
+
+993
+ `OLDLOP
+(
+O_RETURN
+);
+
+994 ià(
+ `¡rEQ
+(
+d
+,"require")) {
+
+995
+®l¡abs
+ =
+TRUE
+;
+
+996
+ `UNI
+(
+O_REQUIRE
+);
+
+998 ià(
+ `¡rEQ
+(
+d
+,"reset"))
+
+999
+ `UNI
+(
+O_RESET
+);
+
+1000 ià(
+ `¡rEQ
+(
+d
+,"redo"))
+
+1001
+ `LOOPX
+(
+O_REDO
+);
+
+1002 ià(
+ `¡rEQ
+(
+d
+,"rename"))
+
+1003
+ `FUN2
+(
+O_RENAME
+);
+
+1004 ià(
+ `¡rEQ
+(
+d
+,"rand"))
+
+1005
+ `UNI
+(
+O_RAND
+);
+
+1006 ià(
+ `¡rEQ
+(
+d
+,"rmdir"))
+
+1007
+ `UNI
+(
+O_RMDIR
+);
+
+1008 ià(
+ `¡rEQ
+(
+d
+,"rindex"))
+
+1009
+ `FUN2x
+(
+O_RINDEX
+);
+
+1010 ià(
+ `¡rEQ
+(
+d
+,"read"))
+
+1011
+ `FOP3
+(
+O_READ
+);
+
+1012 ià(
+ `¡rEQ
+(
+d
+,"readdir"))
+
+1013
+ `FOP
+(
+O_READDIR
+);
+
+1014 ià(
+ `¡rEQ
+(
+d
+,"rewinddir"))
+
+1015
+ `FOP
+(
+O_REWINDDIR
+);
+
+1016 ià(
+ `¡rEQ
+(
+d
+,"recv"))
+
+1017
+ `FOP4
+(
+O_RECV
+);
+
+1018 ià(
+ `¡rEQ
+(
+d
+,"reverse"))
+
+1019
+ `LOP
+(
+O_REVERSE
+);
+
+1020 ià(
+ `¡rEQ
+(
+d
+,"readlink"))
+
+1021
+ `UNI
+(
+O_READLINK
+);
+
+1024 ià(
+s
+[1] == '\'') {
+
+1025
+d
+ = "s";
+
+1026
+s
+++;
+
+1029
+SNARFWORD
+;
+
+1031 ià(
+ `¡rEQ
+(
+d
+,"s")) {
+
+1032
+s
+ =
+ `sÿnsub¡
+(s);
+
+1033 ià(
+yylv®
+.
+¬g
+)
+
+1034
+ `TERM
+(
+SUBST
+);
+
+1036
+ `RETURN
+(1);
+
+1038 
+d
+[1]) {
+
+1043 ià(
+ `¡rEQ
+(
+d
+,"scalar"))
+
+1044
+ `UNI
+(
+O_SCALAR
+);
+
+1049 ià(
+ `¡rEQ
+(
+d
+,"select"))
+
+1050
+ `OPERATOR
+(
+SSELECT
+);
+
+1051 ià(
+ `¡rEQ
+(
+d
+,"seek"))
+
+1052
+ `FOP3
+(
+O_SEEK
+);
+
+1053 ià(
+ `¡rEQ
+(
+d
+,"semctl"))
+
+1054
+ `FUN4
+(
+O_SEMCTL
+);
+
+1055 ià(
+ `¡rEQ
+(
+d
+,"semget"))
+
+1056
+ `FUN3
+(
+O_SEMGET
+);
+
+1057 ià(
+ `¡rEQ
+(
+d
+,"semop"))
+
+1058
+ `FUN2
+(
+O_SEMOP
+);
+
+1059 ià(
+ `¡rEQ
+(
+d
+,"send"))
+
+1060
+ `FOP3
+(
+O_SEND
+);
+
+1061 ià(
+ `¡rEQ
+(
+d
+,"setpgrp"))
+
+1062
+ `FUN2
+(
+O_SETPGRP
+);
+
+1063 ià(
+ `¡rEQ
+(
+d
+,"setpriority"))
+
+1064
+ `FUN3
+(
+O_SETPRIORITY
+);
+
+1065 ià(
+ `¡rEQ
+(
+d
+,"sethostent"))
+
+1066
+ `FUN1
+(
+O_SHOSTENT
+);
+
+1067 ià(
+ `¡rEQ
+(
+d
+,"setnetent"))
+
+1068
+ `FUN1
+(
+O_SNETENT
+);
+
+1069 ià(
+ `¡rEQ
+(
+d
+,"setservent"))
+
+1070
+ `FUN1
+(
+O_SSERVENT
+);
+
+1071 ià(
+ `¡rEQ
+(
+d
+,"setprotoent"))
+
+1072
+ `FUN1
+(
+O_SPROTOENT
+);
+
+1073 ià(
+ `¡rEQ
+(
+d
+,"setpwent"))
+
+1074
+ `FUN0
+(
+O_SPWENT
+);
+
+1075 ià(
+ `¡rEQ
+(
+d
+,"setgrent"))
+
+1076
+ `FUN0
+(
+O_SGRENT
+);
+
+1077 ià(
+ `¡rEQ
+(
+d
+,"seekdir"))
+
+1078
+ `FOP2
+(
+O_SEEKDIR
+);
+
+1079 ià(
+ `¡rEQ
+(
+d
+,"setsockopt"))
+
+1080
+ `FOP4
+(
+O_SSOCKOPT
+);
+
+1086 ià(
+ `¡rEQ
+(
+d
+,"shift"))
+
+1087
+ `TERM
+(
+SHIFT
+);
+
+1088 ià(
+ `¡rEQ
+(
+d
+,"shmctl"))
+
+1089
+ `FUN3
+(
+O_SHMCTL
+);
+
+1090 ià(
+ `¡rEQ
+(
+d
+,"shmget"))
+
+1091
+ `FUN3
+(
+O_SHMGET
+);
+
+1092 ià(
+ `¡rEQ
+(
+d
+,"shmread"))
+
+1093
+ `FUN4
+(
+O_SHMREAD
+);
+
+1094 ià(
+ `¡rEQ
+(
+d
+,"shmwrite"))
+
+1095
+ `FUN4
+(
+O_SHMWRITE
+);
+
+1096 ià(
+ `¡rEQ
+(
+d
+,"shutdown"))
+
+1097
+ `FOP2
+(
+O_SHUTDOWN
+);
+
+1100 ià(
+ `¡rEQ
+(
+d
+,"sin"))
+
+1101
+ `UNI
+(
+O_SIN
+);
+
+1107 ià(
+ `¡rEQ
+(
+d
+,"sleep"))
+
+1108
+ `UNI
+(
+O_SLEEP
+);
+
+1114 ià(
+ `¡rEQ
+(
+d
+,"socket"))
+
+1115
+ `FOP4
+(
+O_SOCKET
+);
+
+1116 ià(
+ `¡rEQ
+(
+d
+,"socketpair"))
+
+1117
+ `FOP25
+(
+O_SOCKPAIR
+);
+
+1118 ià(
+ `¡rEQ
+(
+d
+,"sort")) {
+
+1119
+ `checkcomma
+(
+s
+,"subroutine‚ame");
+
+1120
+d
+ =
+buãnd
+;
+
+1121 
+s
+ <
+d
+ &&
+ `i§scii
+(*sè&&
+ `is¥aû
+(*s)) s++;
+
+1122 ià(*
+s
+ == ';' || *s == ')')
+
+1123
+ `çl
+("sort is‚ow‡„eserved word");
+
+1124 ià(
+ `i§scii
+(*
+s
+è&& (
+ `i§Íha
+(*s) || *s == '_')) {
+
+1125 
+d
+ =
+s
+;
+ `i§Íha
+(*dè||
+ `isdig™
+(*d) || *d == '_'; d++) ;
+
+1126
+ `¡ºýy
+(
+tok’buf
+,
+s
+,
+d
+-s);
+
+1127 ià(
+ `¡rNE
+(
+tok’buf
+,"keys") &&
+
+1128
+ `¡rNE
+(
+tok’buf
+,"values") &&
+
+1129
+ `¡rNE
+(
+tok’buf
+,"split") &&
+
+1130
+ `¡rNE
+(
+tok’buf
+,"grep") &&
+
+1131
+ `¡rNE
+(
+tok’buf
+,"readdir") &&
+
+1132
+ `¡rNE
+(
+tok’buf
+,"unpack") &&
+
+1133
+ `¡rNE
+(
+tok’buf
+,"do") &&
+
+1134 (
+d
+ >ð
+buãnd
+ ||
+ `is¥aû
+(*d)) )
+
+1135 *(--
+s
+) = '\\';
+
+1137
+ `LOP
+(
+O_SORT
+);
+
+1141 ià(
+ `¡rEQ
+(
+d
+,"split"))
+
+1142
+ `TERM
+(
+SPLIT
+);
+
+1143 ià(
+ `¡rEQ
+(
+d
+,"sprintf"))
+
+1144
+ `FL
+(
+O_SPRINTF
+);
+
+1145 ià(
+ `¡rEQ
+(
+d
+,"splice")) {
+
+1146
+yylv®
+.
+iv®
+ =
+O_SPLICE
+;
+
+1147
+ `OPERATOR
+(
+PUSH
+);
+
+1151 ià(
+ `¡rEQ
+(
+d
+,"sqrt"))
+
+1152
+ `UNI
+(
+O_SQRT
+);
+
+1155 ià(
+ `¡rEQ
+(
+d
+,"srand"))
+
+1156
+ `UNI
+(
+O_SRAND
+);
+
+1161 ià(
+ `¡rEQ
+(
+d
+,"stat"))
+
+1162
+ `FOP
+(
+O_STAT
+);
+
+1163 ià(
+ `¡rEQ
+(
+d
+,"study")) {
+
+1164
+§w¡udy
+++;
+
+1165
+ `LFUN
+(
+O_STUDY
+);
+
+1169 ià(
+ `¡rEQ
+(
+d
+,"substr"))
+
+1170
+ `FUN2x
+(
+O_SUBSTR
+);
+
+1171 ià(
+ `¡rEQ
+(
+d
+,"sub")) {
+
+1172
+sublše
+ =
+curcmd
+->
+c_lše
+;
+
+1173
+d
+ =
+buãnd
+;
+
+1174 
+s
+ <
+d
+ &&
+ `is¥aû
+(*s))
+
+1175
+s
+++;
+
+1176 ià(
+ `i§Íha
+(*
+s
+) || *s == '_' || *s == '\'') {
+
+1177 ià(
+³¾db
+) {
+
+1178
+ `¡r_s£t
+(
+subÇme
+,
+cur¡Çme
+);
+
+1179
+ `¡r_nÿt
+(
+subÇme
+,"'",1);
+
+1180 
+d
+ =
+s
++1;
+
+1181
+ `i§Íha
+(*
+d
+è||
+ `isdig™
+(*d) || *d == '_' || *d == '\'';
+
+1182
+d
+++);
+
+1183 ià(
+d
+[-1] == '\'')
+
+1184
+d
+--;
+
+1185
+ `¡r_nÿt
+(
+subÇme
+,
+s
+,
+d
+-s);
+
+1187 *(--
+s
+) = '\\';
+
+1189 ià(
+³¾db
+)
+
+1190
+ `¡r_£t
+(
+subÇme
+,"?");
+
+1191
+ `OPERATOR
+(
+SUB
+);
+
+1199 ià(
+ `¡rEQ
+(
+d
+,"system")) {
+
+1200
+ `£t_csh
+();
+
+1201
+ `LOP
+(
+O_SYSTEM
+);
+
+1203 ià(
+ `¡rEQ
+(
+d
+,"symlink"))
+
+1204
+ `FUN2
+(
+O_SYMLINK
+);
+
+1205 ià(
+ `¡rEQ
+(
+d
+,"syscall"))
+
+1206
+ `LOP
+(
+O_SYSCALL
+);
+
+1207 ià(
+ `¡rEQ
+(
+d
+,"sysread"))
+
+1208
+ `FOP3
+(
+O_SYSREAD
+);
+
+1209 ià(
+ `¡rEQ
+(
+d
+,"syswrite"))
+
+1210
+ `FOP3
+(
+O_SYSWRITE
+);
+
+1217
+SNARFWORD
+;
+
+1218 ià(
+ `¡rEQ
+(
+d
+,"tr")) {
+
+1219
+s
+ =
+ `sÿÁ¿ns
+(s);
+
+1220 ià(
+yylv®
+.
+¬g
+)
+
+1221
+ `TERM
+(
+TRANS
+);
+
+1223
+ `RETURN
+(1);
+
+1225 ià(
+ `¡rEQ
+(
+d
+,"tell"))
+
+1226
+ `FOP
+(
+O_TELL
+);
+
+1227 ià(
+ `¡rEQ
+(
+d
+,"telldir"))
+
+1228
+ `FOP
+(
+O_TELLDIR
+);
+
+1229 ià(
+ `¡rEQ
+(
+d
+,"time"))
+
+1230
+ `FUN0
+(
+O_TIME
+);
+
+1231 ià(
+ `¡rEQ
+(
+d
+,"times"))
+
+1232
+ `FUN0
+(
+O_TMS
+);
+
+1233 ià(
+ `¡rEQ
+(
+d
+,"truncate"))
+
+1234
+ `FOP2
+(
+O_TRUNCATE
+);
+
+1237
+SNARFWORD
+;
+
+1238 ià(
+ `¡rEQ
+(
+d
+,"using"))
+
+1239
+ `OPERATOR
+(
+USING
+);
+
+1240 ià(
+ `¡rEQ
+(
+d
+,"until")) {
+
+1241
+yylv®
+.
+iv®
+ =
+curcmd
+->
+c_lše
+;
+
+1242
+ `OPERATOR
+(
+UNTIL
+);
+
+1244 ià(
+ `¡rEQ
+(
+d
+,"unless")) {
+
+1245
+yylv®
+.
+iv®
+ =
+curcmd
+->
+c_lše
+;
+
+1246
+ `OPERATOR
+(
+UNLESS
+);
+
+1248 ià(
+ `¡rEQ
+(
+d
+,"unlink"))
+
+1249
+ `LOP
+(
+O_UNLINK
+);
+
+1250 ià(
+ `¡rEQ
+(
+d
+,"undef"))
+
+1251
+ `LFUN
+(
+O_UNDEF
+);
+
+1252 ià(
+ `¡rEQ
+(
+d
+,"unpack"))
+
+1253
+ `FUN2
+(
+O_UNPACK
+);
+
+1254 ià(
+ `¡rEQ
+(
+d
+,"utime"))
+
+1255
+ `LOP
+(
+O_UTIME
+);
+
+1256 ià(
+ `¡rEQ
+(
+d
+,"umask"))
+
+1257
+ `UNI
+(
+O_UMASK
+);
+
+1258 ià(
+ `¡rEQ
+(
+d
+,"unshift")) {
+
+1259
+yylv®
+.
+iv®
+ =
+O_UNSHIFT
+;
+
+1260
+ `OPERATOR
+(
+PUSH
+);
+
+1264
+SNARFWORD
+;
+
+1265 ià(
+ `¡rEQ
+(
+d
+,"values"))
+
+1266
+ `HFUN
+(
+O_VALUES
+);
+
+1267 ià(
+ `¡rEQ
+(
+d
+,"vec")) {
+
+1268
+§wvec
+ =
+TRUE
+;
+
+1269
+ `FUN3
+(
+O_VEC
+);
+
+1273
+SNARFWORD
+;
+
+1274 ià(
+ `¡rEQ
+(
+d
+,"while")) {
+
+1275
+yylv®
+.
+iv®
+ =
+curcmd
+->
+c_lše
+;
+
+1276
+ `OPERATOR
+(
+WHILE
+);
+
+1278 ià(
+ `¡rEQ
+(
+d
+,"warn"))
+
+1279
+ `LOP
+(
+O_WARN
+);
+
+1280 ià(
+ `¡rEQ
+(
+d
+,"wait"))
+
+1281
+ `FUN0
+(
+O_WAIT
+);
+
+1282 ià(
+ `¡rEQ
+(
+d
+,"waitpid"))
+
+1283
+ `FUN2
+(
+O_WAITPID
+);
+
+1284 ià(
+ `¡rEQ
+(
+d
+,"wantarray")) {
+
+1285
+yylv®
+.
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+1286
+yylv®
+.
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+1287
+yylv®
+.
+¬g
+[1].
+¬g_ty³
+ =
+A_WANTARRAY
+;
+
+1288
+ `TERM
+(
+RSTRING
+);
+
+1290 ià(
+ `¡rEQ
+(
+d
+,"write"))
+
+1291
+ `FOP
+(
+O_WRITE
+);
+
+1294
+SNARFWORD
+;
+
+1295 ià(!
+ex³ù‹rm
+ &&
+ `¡rEQ
+(
+d
+,"x"))
+
+1296
+ `MOP
+(
+O_REPEAT
+);
+
+1299 ià(
+s
+[1] == '\'') {
+
+1300
+d
+ = "y";
+
+1301
+s
+++;
+
+1304
+SNARFWORD
+;
+
+1306 ià(
+ `¡rEQ
+(
+d
+,"y")) {
+
+1307
+s
+ =
+ `sÿÁ¿ns
+(s);
+
+1308
+ `TERM
+(
+TRANS
+);
+
+1312
+SNARFWORD
+;
+
+1315
+yylv®
+.
+cv®
+ =
+ `§ve¡r
+(
+d
+);
+
+1316
+ex³ù‹rm
+ =
+FALSE
+;
+
+1317 ià(
+ÞdÞdbuåŒ
+ && oldÞdbuåŒ <
+buåŒ
+) {
+
+1318 
+ `is¥aû
+(*
+ÞdÞdbuåŒ
+))
+
+1319
+ÞdÞdbuåŒ
+++;
+
+1320 ià(*
+ÞdÞdbuåŒ
+ =ð'p' &&
+ `¡ºEQ
+(oldoldbufptr,"print",5))
+
+1321
+ex³ù‹rm
+ =
+TRUE
+;
+
+1322 ià(*
+ÞdÞdbuåŒ
+ =ð's' &&
+ `¡ºEQ
+(oldoldbufptr,"sort",4))
+
+1323
+ex³ù‹rm
+ =
+TRUE
+;
+
+1325  (
+CLINE
+,
+buåŒ
+ =
+s
+, ()
+WORD
+);
+
+1326
+ }
+}
+
+1329
+ $checkcomma
+(
+s
+,
+wh©
+)
+
+1330 *
+s
+;
+
+1331 *
+wh©
+;
+
+1333 *
+somewÜd
+;
+
+1335 ià(*
+s
+ == '(')
+
+1336
+s
+++;
+
+1337 
+s
+ <
+buãnd
+ &&
+ `i§scii
+(*sè&&
+ `is¥aû
+(*s))
+
+1338
+s
+++;
+
+1339 ià(
+ `i§scii
+(*
+s
+è&& (
+ `i§Íha
+(*s) || *s == '_')) {
+
+1340
+somewÜd
+ =
+s
+++;
+
+1341 
+ `i§Íha
+(*
+s
+è||
+ `isdig™
+(*s) || *s == '_')
+
+1342
+s
+++;
+
+1343 
+s
+ <
+buãnd
+ &&
+ `is¥aû
+(*s))
+
+1344
+s
+++;
+
+1345 ià(*
+s
+ == ',') {
+
+1346 *
+s
+ = '\0';
+
+1347
+somewÜd
+ =
+ `š¡r
+(
+
+1350
+somewÜd
+);
+
+1351 *
+s
+ = ',';
+
+1352 ià(
+somewÜd
+)
+
+1354
+ `çl
+("NØcomm¨®lowed‡á” %s",
+wh©
+);
+
+1357
+ }
+}
+
+1360
+ $sÿnid’t
+(
+s
+,
+£nd
+,
+de¡
+)
+
+1361 *
+s
+;
+
+1362 *
+£nd
+;
+
+1363 *
+de¡
+;
+
+1365 *
+d
+;
+
+1366 
+b¿ck‘s
+ = 0;
+
+1368
+»·r£
+ =
+NuÎch
+;
+
+1369
+s
+++;
+
+1370
+d
+ =
+de¡
+;
+
+1371 ià(
+ `isdig™
+(*
+s
+)) {
+
+1372 
+ `isdig™
+(*
+s
+))
+
+1373 *
+d
+++ = *
+s
+++;
+
+1376 
+ `i§Íha
+(*
+s
+è||
+ `isdig™
+(*s) || *s == '_' || *s == '\'')
+
+1377 *
+d
+++ = *
+s
+++;
+
+1379 
+d
+ >
+de¡
++1 && d[-1] == '\'')
+
+1380
+d
+--,
+s
+--;
+
+1381 *
+d
+ = '\0';
+
+1382
+d
+ =
+de¡
+;
+
+1383 ià(!*
+d
+) {
+
+1384 *
+d
+ = *
+s
+++;
+
+1385 ià(*
+d
+ == '{' ) {
+
+1386
+d
+ =
+de¡
+;
+
+1387
+b¿ck‘s
+++;
+
+1388 
+s
+ <
+£nd
+ &&
+b¿ck‘s
+) {
+
+1389 ià(!
+»·r£
+ && (
+d
+ =ð
+de¡
+ || (*
+s
+ &&
+ `i§scii
+(*s) &&
+
+1390 (
+ `i§Íha
+(*
+s
+è||
+ `isdig™
+(*s) || *s == '_') ))) {
+
+1391 *
+d
+++ = *
+s
+++;
+
+1394 ià(!
+»·r£
+)
+
+1395
+»·r£
+ =
+s
+;
+
+1396 *
+s
+++) {
+
+1399
+b¿ck‘s
+--;
+
+1400 ià(
+»·r£
+ &&„•¬£ =ð
+s
+ - 1)
+
+1401
+»·r£
+ =
+NuÎch
+;
+
+1404
+b¿ck‘s
+++;
+
+1408 *
+d
+ = '\0';
+
+1409
+d
+ =
+de¡
+;
+
+1412
+d
+[1] = '\0';
+
+1414 ià(*
+d
+ =ð'^' && (
+ `isuµ”
+(*
+s
+è||
+ `šdex
+("[\\]^_?",*s)))
+
+1415 *
+d
+ = *
+s
+++ ^ 64;
+
+1416 
+s
+;
+
+1417
+ }
+}
+
+1419
+STR
+ *
+
+1420
+ $sÿncÚ¡
+(
+¡ršg
+,
+Ën
+)
+
+1421 *
+¡ršg
+;
+
+1422 
+Ën
+;
+
+1424 
+STR
+ *
+»t¡r
+;
+
+1425 *
+t
+;
+
+1426 *
+d
+;
+
+1427 *
+e
+;
+
+1429 ià(
+ `šdex
+(
+¡ršg
+,'|')) {
+
+1430 
+NuΡr
+;
+
+1432
+»t¡r
+ =
+ `SŒ_Ãw
+(86,
+Ën
+);
+
+1433
+ `¡r_n£t
+(
+»t¡r
+,
+¡ršg
+,
+Ën
+);
+
+1434
+t
+ =
+ `¡r_g‘
+(
+»t¡r
+);
+
+1435
+e
+ =
+t
+ +
+Ën
+;
+
+1436
+»t¡r
+->
+¡r_u
+.
+¡r_u£ful
+ = 100;
+
+1437 
+d
+=
+t
+; d <
+e
+; ) {
+
+1438 *
+d
+) {
+
+1440 ià(
+ `isdig™
+(
+d
+[1]))
+
+1441
+e
+ =
+d
+;
+
+1443 
+defch¬
+;
+
+1446
+e
+ =
+d
+;
+
+1449 ià(
+d
+[1] &&
+ `šdex
+("wWbB0123456789sSdDlLuUE",d[1])) {
+
+1450
+e
+ =
+d
+;
+
+1453 ()
+ `bcÝy
+(
+d
++1,d,
+e
+-d);
+
+1454
+e
+--;
+
+1455 *
+d
+) {
+
+1457 *
+d
+ = '\n';
+
+1460 *
+d
+ = '\t';
+
+1463 *
+d
+ = '\f';
+
+1466 *
+d
+ = '\r';
+
+1469 *
+d
+ = '\033';
+
+1472 *
+d
+ = '\007';
+
+1477
+defch¬
+:
+
+1478 ià(
+d
+[1] == '*' || (d[1] == '{' && d[2] == '0') || d[1] == '?') {
+
+1479
+e
+ =
+d
+;
+
+1482
+d
+++;
+
+1485 ià(
+d
+ =ð
+t
+) {
+
+1486
+ `¡r_ä“
+(
+»t¡r
+);
+
+1487 
+NuΡr
+;
+
+1489 *
+d
+ = '\0';
+
+1490
+»t¡r
+->
+¡r_cur
+ =
+d
+ -
+t
+;
+
+1491 
+»t¡r
+;
+
+1492
+ }
+}
+
+1495
+ $sÿÅ©
+(
+s
+)
+
+1496 *
+s
+;
+
+1498 
+SPAT
+ *
+¥©
+;
+
+1499 *
+d
+;
+
+1500 *
+e
+;
+
+1501 
+Ën
+;
+
+1502
+SPAT
+
+§ve¥©
+;
+
+1503
+STR
+ *
+¡r
+ =
+ `SŒ_Ãw
+(93,0);
+
+1505
+ `Newz
+(801,
+¥©
+,1,
+SPAT
+);
+
+1506
+¥©
+->
+¥©_Ãxt
+ =
+cur¡ash
+->
+tbl_¥©roÙ
+;
+
+1507
+cur¡ash
+->
+tbl_¥©roÙ
+ =
+¥©
+;
+
+1509 *
+s
+++) {
+
+1511
+s
+++;
+
+1516
+¥©
+->
+¥©_æags
+ |ð
+SPAT_ONCE
+;
+
+1519
+ `çl
+("panic: scanpat");
+
+1521
+s
+ =
+ `¡r_­³nd_tžl
+(
+¡r
+,s,
+buãnd
+,s[-1],
+·Ž—ve
+);
+
+1522 ià(
+s
+ >ð
+buãnd
+) {
+
+1523
+ `¡r_ä“
+(
+¡r
+);
+
+1524
+ `yy”rÜ
+("Search…attern‚oterminated");
+
+1525
+yylv®
+.
+¬g
+ =
+Nuάg
+;
+
+1526 
+s
+;
+
+1528
+s
+++;
+
+1529 *
+s
+ == 'i' || *s == 'o') {
+
+1530 ià(*
+s
+ == 'i') {
+
+1531
+s
+++;
+
+1532
+§wi
+ =
+TRUE
+;
+
+1533
+¥©
+->
+¥©_æags
+ |ð
+SPAT_FOLD
+;
+
+1535 ià(*
+s
+ == 'o') {
+
+1536
+s
+++;
+
+1537
+¥©
+->
+¥©_æags
+ |ð
+SPAT_KEEP
+;
+
+1540
+Ën
+ =
+¡r
+->
+¡r_cur
+;
+
+1541
+e
+ =
+¡r
+->
+¡r_±r
+ +
+Ën
+;
+
+1542 
+d
+ =
+¡r
+->
+¡r_±r
+; d <
+e
+; d++) {
+
+1543 ià(*
+d
+ == '\\')
+
+1544
+d
+++;
+
+1545 ià((*
+d
+ == '$' && d[1] && d[1] != '|' && d[1] != ')') ||
+
+1546 (*
+d
+ == '@')) {
+
+1547 
+ARG
+ *
+¬g
+;
+
+1549
+¥©
+->
+¥©_ruÁime
+ =
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+1550
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+1551
+¬g
+[1].
+¬g_ty³
+ =
+A_DOUBLE
+;
+
+1552
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+ `¡r_smake
+(
+¡r
+);
+
+1553
+d
+ =
+ `sÿnid’t
+(d,
+buãnd
+,
+buf
+);
+
+1554 ()
+ `¡ab’t
+(
+buf
+,
+TRUE
+);
+
+1555 ;
+d
+ <
+e
+; d++) {
+
+1556 ià(*
+d
+ == '\\')
+
+1557
+d
+++;
+
+1558 ià(*
+d
+ == '$' && d[1] && d[1] != '|' && d[1] != ')') {
+
+1559
+d
+ =
+ `sÿnid’t
+(d,
+buãnd
+,
+buf
+);
+
+1560 ()
+ `¡ab’t
+(
+buf
+,
+TRUE
+);
+
+1562 ià(*
+d
+ == '@') {
+
+1563
+d
+ =
+ `sÿnid’t
+(d,
+buãnd
+,
+buf
+);
+
+1564 ià(
+ `¡rEQ
+(
+buf
+,"ARGV") || strEQ(buf,"ENV") ||
+
+1565
+ `¡rEQ
+(
+buf
+,"SIG") || strEQ(buf,"INC"))
+
+1566 ()
+ `¡ab’t
+(
+buf
+,
+TRUE
+);
+
+1569 
+gÙ_·t
+;
+
+1572 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+)
+
+1573 #ifdeà
+STRUCTCOPY
+
+
+1574
+§ve¥©
+ = *
+¥©
+;
+
+1576 ()
+ `bcÝy
+((*)
+¥©
+, (*)&
+§ve¥©
+, (
+SPAT
+));
+
+1578 ià(*
+¡r
+->
+¡r_±r
+ == '^') {
+
+1579
+¥©
+->
+¥©_shÜt
+ =
+ `sÿncÚ¡
+(
+¡r
+->
+¡r_±r
++1,
+Ën
+-1);
+
+1580 ià(
+¥©
+->
+¥©_shÜt
+) {
+
+1581
+¥©
+->
+¥©_¦’
+ = s·t->
+¥©_shÜt
+->
+¡r_cur
+;
+
+1582 ià(
+¥©
+->
+¥©_¦’
+ =ð
+Ën
+ - 1)
+
+1583
+¥©
+->
+¥©_æags
+ |ð
+SPAT_ALL
+;
+
+1587
+¥©
+->
+¥©_æags
+ |ð
+SPAT_SCANFIRST
+;
+
+1588
+¥©
+->
+¥©_shÜt
+ =
+ `sÿncÚ¡
+(
+¡r
+->
+¡r_±r
+,
+Ën
+);
+
+1589 ià(
+¥©
+->
+¥©_shÜt
+) {
+
+1590
+¥©
+->
+¥©_¦’
+ = s·t->
+¥©_shÜt
+->
+¡r_cur
+;
+
+1591 ià(
+¥©
+->
+¥©_¦’
+ =ð
+Ën
+)
+
+1592
+¥©
+->
+¥©_æags
+ |ð
+SPAT_ALL
+;
+
+1595 ià((
+¥©
+->
+¥©_æags
+ &
+SPAT_ALL
+è&& (¥©->¥©_æag &
+SPAT_SCANFIRST
+)) {
+
+1596
+ `fbmcompže
+(
+¥©
+->
+¥©_shÜt
+, s·t->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+1597
+¥©
+->
+¥©_»gexp
+ =
+ `»gcomp
+(
+¡r
+->
+¡r_±r
+,¡r->¡r_±r+
+Ën
+,
+
+1598
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+1604 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+)
+
+1605 #ifdeà
+STRUCTCOPY
+
+
+1606 *
+¥©
+ =
+§ve¥©
+;
+
+1608 ()
+ `bcÝy
+((*)&
+§ve¥©
+, (*)
+¥©
+, (
+SPAT
+));
+
+1610 ià(
+¥©
+->
+¥©_shÜt
+)
+
+1611
+ `fbmcompže
+(
+¥©
+->
+¥©_shÜt
+, s·t->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+1612
+¥©
+->
+¥©_»gexp
+ =
+ `»gcomp
+(
+¡r
+->
+¡r_±r
+,¡r->¡r_±r+
+Ën
+,
+
+1613
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+1614
+ `hoi¡mu¡
+(
+¥©
+);
+
+1616
+gÙ_·t
+:
+
+1617
+ `¡r_ä“
+(
+¡r
+);
+
+1618
+yylv®
+.
+¬g
+ =
+ `make_m©ch
+(
+O_MATCH
+,
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+¥©
+);
+
+1619 
+s
+;
+
+1620
+ }
+}
+
+1623
+ $sÿnsub¡
+(
+s
+)
+
+1624 *
+s
+;
+
+1626 
+SPAT
+ *
+¥©
+;
+
+1627 *
+d
+;
+
+1628 *
+e
+;
+
+1629 
+Ën
+;
+
+1630
+STR
+ *
+¡r
+ =
+ `SŒ_Ãw
+(93,0);
+
+1632
+ `Newz
+(802,
+¥©
+,1,
+SPAT
+);
+
+1633
+¥©
+->
+¥©_Ãxt
+ =
+cur¡ash
+->
+tbl_¥©roÙ
+;
+
+1634
+cur¡ash
+->
+tbl_¥©roÙ
+ =
+¥©
+;
+
+1636
+s
+ =
+ `¡r_­³nd_tžl
+(
+¡r
+,s+1,
+buãnd
+,*s,
+·Ž—ve
+);
+
+1637 ià(
+s
+ >ð
+buãnd
+) {
+
+1638
+ `¡r_ä“
+(
+¡r
+);
+
+1639
+ `yy”rÜ
+("Substitution…attern‚oterminated");
+
+1640
+yylv®
+.
+¬g
+ =
+Nuάg
+;
+
+1641 
+s
+;
+
+1643
+Ën
+ =
+¡r
+->
+¡r_cur
+;
+
+1644
+e
+ =
+¡r
+->
+¡r_±r
+ +
+Ën
+;
+
+1645 
+d
+ =
+¡r
+->
+¡r_±r
+; d <
+e
+; d++) {
+
+1646 ià(*
+d
+ == '\\')
+
+1647
+d
+++;
+
+1648 ià((*
+d
+ == '$' && d[1] && d[1] != '|' && d[1] != ')') ||
+
+1649 *
+d
+ == '@' ) {
+
+1650 
+ARG
+ *
+¬g
+;
+
+1652
+¥©
+->
+¥©_ruÁime
+ =
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+1653
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+1654
+¬g
+[1].
+¬g_ty³
+ =
+A_DOUBLE
+;
+
+1655
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+ `¡r_smake
+(
+¡r
+);
+
+1656
+d
+ =
+ `sÿnid’t
+(d,
+buãnd
+,
+buf
+);
+
+1657 ()
+ `¡ab’t
+(
+buf
+,
+TRUE
+);
+
+1658 ; *
+d
+; d++) {
+
+1659 ià(*
+d
+ == '$' && d[1] && d[-1] != '\\' && d[1] != '|') {
+
+1660
+d
+ =
+ `sÿnid’t
+(d,
+buãnd
+,
+buf
+);
+
+1661 ()
+ `¡ab’t
+(
+buf
+,
+TRUE
+);
+
+1663 ià(*
+d
+ == '@' && d[-1] != '\\') {
+
+1664
+d
+ =
+ `sÿnid’t
+(d,
+buãnd
+,
+buf
+);
+
+1665 ià(
+ `¡rEQ
+(
+buf
+,"ARGV") || strEQ(buf,"ENV") ||
+
+1666
+ `¡rEQ
+(
+buf
+,"SIG") || strEQ(buf,"INC"))
+
+1667 ()
+ `¡ab’t
+(
+buf
+,
+TRUE
+);
+
+1670 
+g‘_»¶
+;
+
+1673 ià(*
+¡r
+->
+¡r_±r
+ == '^') {
+
+1674
+¥©
+->
+¥©_shÜt
+ =
+ `sÿncÚ¡
+(
+¡r
+->
+¡r_±r
++1,
+Ën
+-1);
+
+1675 ià(
+¥©
+->
+¥©_shÜt
+)
+
+1676
+¥©
+->
+¥©_¦’
+ = s·t->
+¥©_shÜt
+->
+¡r_cur
+;
+
+1679
+¥©
+->
+¥©_æags
+ |ð
+SPAT_SCANFIRST
+;
+
+1680
+¥©
+->
+¥©_shÜt
+ =
+ `sÿncÚ¡
+(
+¡r
+->
+¡r_±r
+,
+Ën
+);
+
+1681 ià(
+¥©
+->
+¥©_shÜt
+)
+
+1682
+¥©
+->
+¥©_¦’
+ = s·t->
+¥©_shÜt
+->
+¡r_cur
+;
+
+1684
+g‘_»¶
+:
+
+1685
+s
+ =
+ `sÿn¡r
+(s);
+
+1686 ià(
+s
+ >ð
+buãnd
+) {
+
+1687
+ `¡r_ä“
+(
+¡r
+);
+
+1688
+ `yy”rÜ
+("Substitution„eplacement‚oterminated");
+
+1689
+yylv®
+.
+¬g
+ =
+Nuάg
+;
+
+1690 
+s
+;
+
+1692
+¥©
+->
+¥©_»¶
+ =
+yylv®
+.
+¬g
+;
+
+1693
+¥©
+->
+¥©_æags
+ |ð
+SPAT_ONCE
+;
+
+1694 ià((
+¥©
+->
+¥©_»¶
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+)
+
+1695
+¥©
+->
+¥©_æags
+ |ð
+SPAT_CONST
+;
+
+1696 ià((
+¥©
+->
+¥©_»¶
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_DOUBLE
+) {
+
+1697
+STR
+ *
+tmp¡r
+;
+
+1698 *
+t
+;
+
+1700
+¥©
+->
+¥©_æags
+ |ð
+SPAT_CONST
+;
+
+1701
+tmp¡r
+ =
+¥©
+->
+¥©_»¶
+[1].
+¬g_±r
+.
+¬g_¡r
+;
+
+1702
+e
+ =
+tmp¡r
+->
+¡r_±r
+ +mp¡r->
+¡r_cur
+;
+
+1703 
+t
+ =
+tmp¡r
+->
+¡r_±r
+; <
+e
+;++) {
+
+1704 ià(*
+t
+ =ð'$' &&[1] && (
+ `šdex
+("`'&+0123456789",t[1]) ||
+
+1705 (
+t
+[1] =ð'{' &&
+ `isdig™
+(t[2])) ))
+
+1706
+¥©
+->
+¥©_æags
+ &ð~
+SPAT_CONST
+;
+
+1709 *
+s
+ == 'g' || *s == 'i' || *s == 'e' || *s == 'o') {
+
+1710 ià(*
+s
+ == 'e') {
+
+1711
+s
+++;
+
+1712 ià((
+¥©
+->
+¥©_»¶
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_DOUBLE
+)
+
+1713
+¥©
+->
+¥©_»¶
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+1714
+¥©
+->
+¥©_»¶
+ =
+ `make_Ý
+(
+O_EVAL
+,2,
+
+1715
+¥©
+->
+¥©_»¶
+,
+
+1716
+Nuάg
+,
+
+1717
+Nuάg
+);
+
+1718
+¥©
+->
+¥©_æags
+ &ð~
+SPAT_CONST
+;
+
+1720 ià(*
+s
+ == 'g') {
+
+1721
+s
+++;
+
+1722
+¥©
+->
+¥©_æags
+ &ð~
+SPAT_ONCE
+;
+
+1724 ià(*
+s
+ == 'i') {
+
+1725
+s
+++;
+
+1726
+§wi
+ =
+TRUE
+;
+
+1727
+¥©
+->
+¥©_æags
+ |ð
+SPAT_FOLD
+;
+
+1728 ià(!(
+¥©
+->
+¥©_æags
+ &
+SPAT_SCANFIRST
+)) {
+
+1729
+ `¡r_ä“
+(
+¥©
+->
+¥©_shÜt
+);
+
+1730
+¥©
+->
+¥©_shÜt
+ =
+NuΡr
+;
+
+1731
+¥©
+->
+¥©_¦’
+ = 0;
+
+1734 ià(*
+s
+ == 'o') {
+
+1735
+s
+++;
+
+1736
+¥©
+->
+¥©_æags
+ |ð
+SPAT_KEEP
+;
+
+1739 ià(
+¥©
+->
+¥©_shÜt
+ && (¥©->
+¥©_æags
+ &
+SPAT_SCANFIRST
+))
+
+1740
+ `fbmcompže
+(
+¥©
+->
+¥©_shÜt
+, s·t->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+1741 ià(!
+¥©
+->
+¥©_ruÁime
+) {
+
+1742
+¥©
+->
+¥©_»gexp
+ =
+ `»gcomp
+(
+¡r
+->
+¡r_±r
+,¡r->¡r_±r+
+Ën
+,
+
+1743
+¥©
+->
+¥©_æags
+ &
+SPAT_FOLD
+);
+
+1744
+ `hoi¡mu¡
+(
+¥©
+);
+
+1746
+yylv®
+.
+¬g
+ =
+ `make_m©ch
+(
+O_SUBST
+,
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+¥©
+);
+
+1747
+ `¡r_ä“
+(
+¡r
+);
+
+1748 
+s
+;
+
+1749
+ }
+}
+
+1751
+ $hoi¡mu¡
+(
+¥©
+)
+
+1752 
+SPAT
+ *
+¥©
+;
+
+1754 ià(
+¥©
+->
+¥©_»gexp
+->
+»gmu¡
+) {
+
+1755 ià(
+¥©
+->
+¥©_shÜt
+ &&
+
+1756
+ `¡r_eq
+(
+¥©
+->
+¥©_shÜt
+,¥©->
+¥©_»gexp
+->
+»gmu¡
+))
+
+1758 ià(
+¥©
+->
+¥©_æags
+ &
+SPAT_SCANFIRST
+) {
+
+1759
+ `¡r_ä“
+(
+¥©
+->
+¥©_shÜt
+);
+
+1760
+¥©
+->
+¥©_shÜt
+ =
+NuΡr
+;
+
+1763
+ `¡r_ä“
+(
+¥©
+->
+¥©_»gexp
+->
+»gmu¡
+);
+
+1764
+¥©
+->
+¥©_»gexp
+->
+»gmu¡
+ =
+NuΡr
+;
+
+1768 ià(!
+¥©
+->
+¥©_shÜt
+ ||
+
+1769 ((
+¥©
+->
+¥©_æags
+ &
+SPAT_SCANFIRST
+) &&
+
+1770 (
+¥©
+->
+¥©_shÜt
+->
+¡r_cur
+ < s·t->
+¥©_»gexp
+->
+»gmu¡
+->str_cur) )){
+
+1771
+ `¡r_ä“
+(
+¥©
+->
+¥©_shÜt
+);
+
+1772
+¥©
+->
+¥©_shÜt
+ = s·t->
+¥©_»gexp
+->
+»gmu¡
+;
+
+1773
+¥©
+->
+¥©_»gexp
+->
+»gmu¡
+ =
+NuΡr
+;
+
+1774
+¥©
+->
+¥©_æags
+ |ð
+SPAT_SCANFIRST
+;
+
+1777
+ }
+}
+
+1780
+ $ex·nd_ch¬£t
+(
+s
+,
+Ën
+,
+»Ž’
+)
+
+1781 *
+s
+;
+
+1782 
+Ën
+;
+
+1783 *
+»Ž’
+;
+
+1785 
+t
+[520];
+
+1786 *
+d
+ =
+t
+;
+
+1787 
+i
+;
+
+1788 *
+£nd
+ =
+s
+ +
+Ën
+;
+
+1790 
+s
+ <
+£nd
+ &&
+d
+ -
+t
+ <= 256) {
+
+1791 ià(
+s
+[1] =ð'-' && s+2 <
+£nd
+) {
+
+1792 
+i
+ = (
+s
+[0] & 0377); i <= (s[2] & 0377); i++)
+
+1793 *
+d
+++ =
+i
+;
+
+1794
+s
+ += 3;
+
+1797 *
+d
+++ = *
+s
+++;
+
+1799 *
+d
+ = '\0';
+
+1800 *
+»Ž’
+ =
+d
+ -
+t
+;
+
+1801 
+ `n§ve¡r
+(
+t
+,
+d
+-t);
+
+1802
+ }
+}
+
+1805
+ $sÿÁ¿ns
+(
+s
+)
+
+1806 *
+s
+;
+
+1808
+ARG
+ *
+¬g
+ =
+
+1809
+ `l
+(
+ `make_Ý
+(
+O_TRANS
+,2,
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+Nuάg
+,Nullarg));
+
+1810 *
+t
+;
+
+1811 *
+r
+;
+
+1812 *
+tbl
+;
+
+1813 
+i
+;
+
+1814 
+j
+;
+
+1815 
+Ž’
+,
+¾’
+;
+
+1816 
+squash
+;
+
+1817 
+d–‘e
+;
+
+1818 
+com¶em’t
+;
+
+1820
+ `New
+(803,
+tbl
+,256,);
+
+1821
+¬g
+[2].
+¬g_ty³
+ =
+A_NULL
+;
+
+1822
+¬g
+[2].
+¬g_±r
+.
+¬g_cv®
+ = (*è
+tbl
+;
+
+1823
+s
+ =
+ `sÿn¡r
+(s);
+
+1824 ià(
+s
+ >ð
+buãnd
+) {
+
+1825
+ `yy”rÜ
+("Translation…attern‚oterminated");
+
+1826
+yylv®
+.
+¬g
+ =
+Nuάg
+;
+
+1827 
+s
+;
+
+1829
+t
+ =
+ `ex·nd_ch¬£t
+(
+yylv®
+.
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+->
+¡r_±r
+,
+
+1830
+yylv®
+.
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+->
+¡r_cur
+,&
+Ž’
+);
+
+1831
+ `¬g_ä“
+(
+yylv®
+.
+¬g
+);
+
+1832
+s
+ =
+ `sÿn¡r
+(s-1);
+
+1833 ià(
+s
+ >ð
+buãnd
+) {
+
+1834
+ `yy”rÜ
+("Translation„eplacement‚oterminated");
+
+1835
+yylv®
+.
+¬g
+ =
+Nuάg
+;
+
+1836 
+s
+;
+
+1838
+com¶em’t
+ =
+d–‘e
+ =
+squash
+ = 0;
+
+1839 *
+s
+ == 'c' || *s == 'd' || *s == 's') {
+
+1840 ià(*
+s
+ == 'c')
+
+1841
+com¶em’t
+ = 1;
+
+1842 ià(*
+s
+ == 'd')
+
+1843
+d–‘e
+ = 2;
+
+1845
+squash
+ = 1;
+
+1846
+s
+++;
+
+1848
+r
+ =
+ `ex·nd_ch¬£t
+(
+yylv®
+.
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+->
+¡r_±r
+,
+
+1849
+yylv®
+.
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+->
+¡r_cur
+,&
+¾’
+);
+
+1850
+ `¬g_ä“
+(
+yylv®
+.
+¬g
+);
+
+1851
+¬g
+[2].
+¬g_Ën
+ =
+d–‘e
+|
+squash
+;
+
+1852
+yylv®
+.
+¬g
+ =‡rg;
+
+1853 ià(!
+¾’
+ && !
+d–‘e
+) {
+
+1854
+ `Saãä“
+(
+r
+);
+
+1855
+r
+ =
+t
+;
+¾’
+ =
+Ž’
+;
+
+1857 ià(
+com¶em’t
+) {
+
+1858
+ `Z”o
+(
+tbl
+, 256, );
+
+1859 
+i
+ = 0; i <
+Ž’
+; i++)
+
+1860
+tbl
+[
+t
+[
+i
+] & 0377] = -1;
+
+1861 
+i
+ = 0,
+j
+ = 0; i < 256; i++) {
+
+1862 ià(!
+tbl
+[
+i
+]) {
+
+1863 ià(
+j
+ >ð
+¾’
+) {
+
+1864 ià(
+d–‘e
+)
+
+1865
+tbl
+[
+i
+] = -2;
+
+1867
+tbl
+[
+i
+] =
+r
+[
+j
+-1];
+
+1870
+tbl
+[
+i
+] =
+r
+[
+j
+++];
+
+1875 
+i
+ = 0; i < 256; i++)
+
+1876
+tbl
+[
+i
+] = -1;
+
+1877 
+i
+ = 0,
+j
+ = 0; i <
+Ž’
+; i++,j++) {
+
+1878 ià(
+j
+ >ð
+¾’
+) {
+
+1879 ià(
+d–‘e
+) {
+
+1880 ià(
+tbl
+[
+t
+[
+i
+] & 0377] == -1)
+
+1881
+tbl
+[
+t
+[
+i
+] & 0377] = -2;
+
+1884 --
+j
+;
+
+1886 ià(
+tbl
+[
+t
+[
+i
+] & 0377] == -1)
+
+1887
+tbl
+[
+t
+[
+i
+] & 0377] =
+r
+[
+j
+] & 0377;
+
+1890 ià(
+r
+ !ð
+t
+)
+
+1891
+ `Saãä“
+(
+r
+);
+
+1892
+ `Saãä“
+(
+t
+);
+
+1893 
+s
+;
+
+1894
+ }
+}
+
+1897
+ $sÿn¡r
+(
+s
+)
+
+1898 *
+s
+;
+
+1900 
+‹rm
+;
+
+1901 *
+d
+;
+
+1902 
+ARG
+ *
+¬g
+;
+
+1903 *
+£nd
+;
+
+1904 
+boÞ
+
+makesšgË
+ =
+FALSE
+;
+
+1905 
+STAB
+ *
+¡ab
+;
+
+1906
+boÞ
+
+®waysdÞÏr
+ =
+FALSE
+;
+
+1907
+boÞ
+
+h”eis
+ =
+FALSE
+;
+
+1908
+STR
+ *
+h”ewas
+;
+
+1909
+STR
+ *
+¡r
+;
+
+1910 *
+Ëave
+ = "\\$@nrtfbeacx0123456789[{]}lLuUE";
+
+1911 
+Ën
+;
+
+1913
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+1914
+yylv®
+.
+¬g
+ =‡rg;
+
+1915
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+1917 *
+s
+) {
+
+1919
+¬g
+[1].
+¬g_ty³
+ =
+A_DOUBLE
+;
+
+1920
+makesšgË
+ =
+TRUE
+;
+
+1921
+‹rm
+ = *
+s
+;
+
+1922 ià(
+‹rm
+ == '\'')
+
+1923
+Ëave
+ =
+NuÎch
+;
+
+1924 
+¢¬f_™
+;
+
+1927 
+i
+;
+
+1928 
+shiá
+;
+
+1930
+¬g
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+1931 ià(
+s
+[1] == 'x') {
+
+1932
+shiá
+ = 4;
+
+1933
+s
+ += 2;
+
+1935 ià(
+s
+[1] == '.')
+
+1936 
+decim®
+;
+
+1938
+shiá
+ = 3;
+
+1939
+i
+ = 0;
+
+1941 *
+s
+) {
+
+1943 
+out
+;
+
+1945 ià(
+shiá
+ != 4)
+
+1946
+ `yy”rÜ
+("Illegal octal digit");
+
+1950
+i
+ <<ð
+shiá
+;
+
+1951
+i
+ +ð*
+s
+++ & 15;
+
+1955 ià(
+shiá
+ != 4)
+
+1956 
+out
+;
+
+1957
+i
+ <<= 4;
+
+1958
+i
+ +ð(*
+s
+++ & 7) + 9;
+
+1962
+out
+:
+
+1963
+¡r
+ =
+ `SŒ_Ãw
+(92,0);
+
+1964
+ `¡r_num£t
+(
+¡r
+,()
+i
+);
+
+1965 ià(
+¡r
+->
+¡r_±r
+) {
+
+1966
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+1967
+¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+1968
+¡r
+->
+¡r_Ën
+ = sŒ->
+¡r_cur
+ = 0;
+
+1970
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+¡r
+;
+
+1975
+decim®
+:
+
+1976
+¬g
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+1977
+d
+ =
+tok’buf
+;
+
+1978 
+ `isdig™
+(*
+s
+) || *s == '_') {
+
+1979 ià(*
+s
+ == '_')
+
+1980
+s
+++;
+
+1982 *
+d
+++ = *
+s
+++;
+
+1984 ià(*
+s
+ =ð'.' && s[1] &&
+ `šdex
+("0123456789eE ;",s[1])) {
+
+1985 *
+d
+++ = *
+s
+++;
+
+1986 
+ `isdig™
+(*
+s
+) || *s == '_') {
+
+1987 ià(*
+s
+ == '_')
+
+1988
+s
+++;
+
+1990 *
+d
+++ = *
+s
+++;
+
+1993 ià(*
+s
+ &&
+ `šdex
+("eE",*s) && index("+-0123456789",s[1])) {
+
+1994 *
+d
+++ = *
+s
+++;
+
+1995 ià(*
+s
+ == '+' || *s == '-')
+
+1996 *
+d
+++ = *
+s
+++;
+
+1997 
+ `isdig™
+(*
+s
+))
+
+1998 *
+d
+++ = *
+s
+++;
+
+2000 *
+d
+ = '\0';
+
+2001
+¡r
+ =
+ `SŒ_Ãw
+(92,0);
+
+2002
+ `¡r_num£t
+(
+¡r
+,
+ `©of
+(
+tok’buf
+));
+
+2003 ià(
+¡r
+->
+¡r_±r
+) {
+
+2004
+ `Saãä“
+(
+¡r
+->
+¡r_±r
+);
+
+2005
+¡r
+->
+¡r_±r
+ =
+NuÎch
+;
+
+2006
+¡r
+->
+¡r_Ën
+ = sŒ->
+¡r_cur
+ = 0;
+
+2008
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+¡r
+;
+
+2011 ià(*++
+s
+ == '<') {
+
+2012
+h”eis
+ =
+TRUE
+;
+
+2013
+d
+ =
+tok’buf
+;
+
+2014 ià(!
+rså
+)
+
+2015 *
+d
+++ = '\n';
+
+2016 ià(*++
+s
+ &&
+ `šdex
+("`'\"",*s)) {
+
+2017
+‹rm
+ = *
+s
+++;
+
+2018
+s
+ =
+ `ýytžl
+(
+d
+,s,
+buãnd
+,
+‹rm
+,&
+Ën
+);
+
+2019 ià(
+s
+ <
+buãnd
+)
+
+2020
+s
+++;
+
+2021
+d
+ +ð
+Ën
+;
+
+2024 ià(*
+s
+ == '\\')
+
+2025
+s
+++,
+‹rm
+ = '\'';
+
+2027
+‹rm
+ = '"';
+
+2028 
+ `i§scii
+(*
+s
+è&& (
+ `i§Íha
+(*sè||
+ `isdig™
+(*s) || *s == '_'))
+
+2029 *
+d
+++ = *
+s
+++;
+
+2031 *
+d
+++ = '\n';
+
+2032 *
+d
+ = '\0';
+
+2033
+Ën
+ =
+d
+ -
+tok’buf
+;
+
+2034
+d
+ = "\n";
+
+2035 ià(
+rså
+ || !(
+d
+=
+ `nš¡r
+(
+s
+,
+buãnd
+,d,d+1)))
+
+2036
+h”ewas
+ =
+ `¡r_make
+(
+s
+,
+buãnd
+-s);
+
+2038
+s
+--,
+h”ewas
+ =
+ `¡r_make
+(s,
+d
+-s);
+
+2039
+s
+ +ð
+h”ewas
+->
+¡r_cur
+;
+
+2040 ià(
+‹rm
+ == '\'')
+
+2041 
+do_sšgË
+;
+
+2042 ià(
+‹rm
+ == '`')
+
+2043 
+do_back
+;
+
+2044 
+do_doubË
+;
+
+2046
+d
+ =
+tok’buf
+;
+
+2047
+s
+ =
+ `ýytžl
+(
+d
+,s,
+buãnd
+,'>',&
+Ën
+);
+
+2048 ià(
+s
+ <
+buãnd
+)
+
+2049
+s
+++;
+
+2050 ià(*
+d
+ == '$') d++;
+
+2051 *
+d
+ &&
+
+2052 (
+ `i§Íha
+(*
+d
+è||
+ `isdig™
+(*d) || *d == '_' || *d == '\''))
+
+2053
+d
+++;
+
+2054 ià(
+d
+ -
+tok’buf
+ !ð
+Ën
+) {
+
+2055
+d
+ =
+tok’buf
+;
+
+2056
+¬g
+[1].
+¬g_ty³
+ =
+A_GLOB
+;
+
+2057
+d
+ =
+ `n§ve¡r
+(d,
+Ën
+);
+
+2058
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =
+¡ab
+ =
+ `g’¡ab
+();
+
+2059
+ `¡ab_io
+(
+¡ab
+èð
+ `¡io_Ãw
+();
+
+2060
+ `¡ab_v®
+(
+¡ab
+èð
+ `¡r_make
+(
+d
+,
+Ën
+);
+
+2061
+ `Saãä“
+(
+d
+);
+
+2062
+ `£t_csh
+();
+
+2065
+d
+ =
+tok’buf
+;
+
+2066 ià(!
+Ën
+)
+
+2067 ()
+ `¡rýy
+(
+d
+,"ARGV");
+
+2068 ià(*
+d
+ == '$') {
+
+2069
+¬g
+[1].
+¬g_ty³
+ =
+A_INDREAD
+;
+
+2070
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =
+ `¡ab’t
+(
+d
++1,
+TRUE
+);
+
+2073
+¬g
+[1].
+¬g_ty³
+ =
+A_READ
+;
+
+2074
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+ =
+ `¡ab’t
+(
+d
+,
+TRUE
+);
+
+2075 ià(!
+ `¡ab_io
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+))
+
+2076
+ `¡ab_io
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+èð
+ `¡io_Ãw
+();
+
+2077 ià(
+ `¡rEQ
+(
+d
+,"ARGV")) {
+
+2078 ()
+ `¯dd
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+);
+
+2079
+ `¡ab_io
+(
+¬g
+[1].
+¬g_±r
+.
+¬g_¡ab
+)->
+æags
+ |=
+
+2080
+IOF_ARGV
+|
+IOF_START
+;
+
+2087
+s
+++;
+
+2088 ià(*
+s
+ == 'q') {
+
+2089
+s
+++;
+
+2090 
+do_doubË
+;
+
+2092 ià(*
+s
+ == 'x') {
+
+2093
+s
+++;
+
+2094 
+do_back
+;
+
+2098
+do_sšgË
+:
+
+2099
+‹rm
+ = *
+s
+;
+
+2100
+¬g
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+2101
+Ëave
+ =
+NuÎch
+;
+
+2102 
+¢¬f_™
+;
+
+2105
+do_doubË
+:
+
+2106
+‹rm
+ = *
+s
+;
+
+2107
+¬g
+[1].
+¬g_ty³
+ =
+A_DOUBLE
+;
+
+2108
+makesšgË
+ =
+TRUE
+;
+
+2109
+®waysdÞÏr
+ =
+TRUE
+;
+
+2110 
+¢¬f_™
+;
+
+2112
+do_back
+:
+
+2113
+‹rm
+ = *
+s
+;
+
+2114
+¬g
+[1].
+¬g_ty³
+ =
+A_BACKTICK
+;
+
+2115
+ `£t_csh
+();
+
+2116
+®waysdÞÏr
+ =
+TRUE
+;
+
+2117
+¢¬f_™
+:
+
+2119
+STR
+ *
+tmp¡r
+;
+
+2120 *
+tmps
+;
+
+2122
+muÉi_¡¬t
+ =
+curcmd
+->
+c_lše
+;
+
+2123 ià(
+h”eis
+)
+
+2124
+muÉi_Ý’
+ =
+muÉi_þo£
+ = '<';
+
+2126
+muÉi_Ý’
+ =
+‹rm
+;
+
+2127 ià(
+‹rm
+ && (
+tmps
+ =
+ `šdex
+("([{< )]}> )]}>",term)))
+
+2128
+‹rm
+ =
+tmps
+[5];
+
+2129
+muÉi_þo£
+ =
+‹rm
+;
+
+2131
+tmp¡r
+ =
+ `SŒ_Ãw
+(87,80);
+
+2132 ià(
+h”eis
+) {
+
+2133
+‹rm
+ = *
+tok’buf
+;
+
+2134 ià(!
+rså
+) {
+
+2135
+d
+ =
+s
+;
+
+2136 
+s
+ <
+buãnd
+ &&
+
+2137 (*
+s
+ !ð
+‹rm
+ ||
+ `bcmp
+(s,
+tok’buf
+,
+Ën
+) != 0) ) {
+
+2138 ià(*
+s
+++ == '\n')
+
+2139
+curcmd
+->
+c_lše
+++;
+
+2141 ià(
+s
+ >ð
+buãnd
+) {
+
+2142
+curcmd
+->
+c_lše
+ =
+muÉi_¡¬t
+;
+
+2143
+ `çl
+("EOF in string");
+
+2145
+ `¡r_n£t
+(
+tmp¡r
+,
+d
++1,
+s
+-d);
+
+2146
+s
+ +ð
+Ën
+ - 1;
+
+2147
+ `¡r_nÿt
+(
+h”ewas
+,
+s
+,
+buãnd
+-s);
+
+2148
+ `¡r_»¶aû
+(
+lše¡r
+,
+h”ewas
+);
+
+2149
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+buåŒ
+ =
+s
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+2150
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+2151
+h”eis
+ =
+FALSE
+;
+
+2154
+ `¡r_n£t
+(
+tmp¡r
+,"",0);
+
+2157
+s
+ =
+ `¡r_­³nd_tžl
+(
+tmp¡r
+,s+1,
+buãnd
+,
+‹rm
+,
+Ëave
+);
+
+2158 
+s
+ >ð
+buãnd
+) {
+
+2159 ià(!
+rså
+ ||
+
+2160 !(
+ÞdÞdbuåŒ
+ =
+ÞdbuåŒ
+ =
+s
+ =
+ `¡r_g‘s
+(
+lše¡r
+,
+rså
+, 0))) {
+
+2161
+curcmd
+->
+c_lše
+ =
+muÉi_¡¬t
+;
+
+2162
+ `çl
+("EOF in string");
+
+2164
+curcmd
+->
+c_lše
+++;
+
+2165 ià(
+³¾db
+) {
+
+2166
+STR
+ *
+¡r
+ =
+ `SŒ_Ãw
+(88,0);
+
+2168
+ `¡r_s£t
+(
+¡r
+,
+lše¡r
+);
+
+2169
+ `a¡Üe
+(
+ `¡ab_x¬¿y
+(
+curcmd
+->
+c_fže¡ab
+),
+
+2170 ()
+curcmd
+->
+c_lše
+,
+¡r
+);
+
+2172
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+2173 ià(
+h”eis
+) {
+
+2174 ià(*
+s
+ =ð
+‹rm
+ &&
+ `bcmp
+(s,
+tok’buf
+,
+Ën
+) == 0) {
+
+2175
+s
+ =
+buãnd
+ - 1;
+
+2176 *
+s
+ = ' ';
+
+2177
+ `¡r_sÿt
+(
+lše¡r
+,
+h”ewas
+);
+
+2178
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+2181
+s
+ =
+buãnd
+;
+
+2182
+ `¡r_sÿt
+(
+tmp¡r
+,
+lše¡r
+);
+
+2186
+s
+ =
+ `¡r_­³nd_tžl
+(
+tmp¡r
+,s,
+buãnd
+,
+‹rm
+,
+Ëave
+);
+
+2188
+muÉi_’d
+ =
+curcmd
+->
+c_lše
+;
+
+2189
+s
+++;
+
+2190 ià(
+tmp¡r
+->
+¡r_cur
+ + 5 <mp¡r->
+¡r_Ën
+) {
+
+2191
+tmp¡r
+->
+¡r_Ën
+ =mp¡r->
+¡r_cur
+ + 1;
+
+2192
+ `R’ew
+(
+tmp¡r
+->
+¡r_±r
+,mp¡r->
+¡r_Ën
+, );
+
+2194 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_SINGLE
+) {
+
+2195
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+tmp¡r
+;
+
+2198
+tmps
+ =
+s
+;
+
+2199
+s
+ =
+tmp¡r
+->
+¡r_±r
+;
+
+2200
+£nd
+ =
+s
+ +
+tmp¡r
+->
+¡r_cur
+;
+
+2201 
+s
+ <
+£nd
+) {
+
+2202 ià(*
+s
+ =ð'\\' && s[1] &&
+ `isdig™
+(s[1]) && !isdigit(s[2]) &&
+
+2203 !
+®waysdÞÏr
+ &&
+s
+[1] != '0')
+
+2204 *
+s
+ = '$';
+
+2205 ià((*
+s
+ =ð'$' || * =ð'@'è&& s+1 <
+£nd
+ &&
+
+2206 (
+®waysdÞÏr
+ || (
+s
+[1] != ')' && s[1] != '|'))) {
+
+2207
+makesšgË
+ =
+FALSE
+;
+
+2209 ià(*
+s
+ =ð'\\' && s+1 <
+£nd
+) {
+
+2210 ià(
+ `šdex
+("lLuUE",
+s
+[1]))
+
+2211
+makesšgË
+ =
+FALSE
+;
+
+2212
+s
+++;
+
+2214
+s
+++;
+
+2216
+s
+ =
+d
+ =
+tmp¡r
+->
+¡r_±r
+;
+
+2217 
+s
+ <
+£nd
+) {
+
+2218 ià((*
+s
+ =ð'$' && s+1 <
+£nd
+ &&
+
+2219 (
+®waysdÞÏr
+ || (
+s
+[1] != ')' && s[1] != '|')) ) ||
+
+2220 (*
+s
+ =ð'@' && s+1 <
+£nd
+) ) {
+
+2221
+Ën
+ =
+ `sÿnid’t
+(
+s
+,
+£nd
+,
+tok’buf
+) - s;
+
+2222 ià(*
+s
+ =ð'$' ||
+ `¡rEQ
+(
+tok’buf
+,"ARGV")
+
+2223 ||
+ `¡rEQ
+(
+tok’buf
+,"ENV")
+
+2224 ||
+ `¡rEQ
+(
+tok’buf
+,"SIG")
+
+2225 ||
+ `¡rEQ
+(
+tok’buf
+,"INC") )
+
+2226 ()
+ `¡ab’t
+(
+tok’buf
+,
+TRUE
+);
+
+2227 
+Ën
+--)
+
+2228 *
+d
+++ = *
+s
+++;
+
+2231 ià(*
+s
+ =ð'\\' && s+1 <
+£nd
+) {
+
+2232
+s
+++;
+
+2233 *
+s
+) {
+
+2235 ià(!
+makesšgË
+ && (!
+Ëave
+ || (*
+s
+ &&
+ `šdex
+(leave,*s))))
+
+2236 *
+d
+++ = '\\';
+
+2237 *
+d
+++ = *
+s
+++;
+
+2241 *
+d
+++ =
+ `sÿnoù
+(
+s
+, 3, &
+Ën
+);
+
+2242
+s
+ +ð
+Ën
+;
+
+2245 *
+d
+++ =
+ `sÿnhex
+(++
+s
+, 2, &
+Ën
+);
+
+2246
+s
+ +ð
+Ën
+;
+
+2249
+s
+++;
+
+2250 *
+d
+ = *
+s
+++;
+
+2251 ià(
+ `i¦ow”
+(*
+d
+))
+
+2252 *
+d
+ =
+ `touµ”
+(*d);
+
+2253 *
+d
+++ ^= 64;
+
+2256 *
+d
+++ = '\b';
+
+2259 *
+d
+++ = '\n';
+
+2262 *
+d
+++ = '\r';
+
+2265 *
+d
+++ = '\f';
+
+2268 *
+d
+++ = '\t';
+
+2271 *
+d
+++ = '\033';
+
+2274 *
+d
+++ = '\007';
+
+2277
+s
+++;
+
+2280 *
+d
+++ = *
+s
+++;
+
+2282 *
+d
+ = '\0';
+
+2284 ià((
+¬g
+[1].
+¬g_ty³
+ &
+A_MASK
+è=ð
+A_DOUBLE
+ &&
+makesšgË
+)
+
+2285
+¬g
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+2287
+tmp¡r
+->
+¡r_cur
+ =
+d
+ -mp¡r->
+¡r_±r
+;
+
+2288
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+tmp¡r
+;
+
+2289
+s
+ =
+tmps
+;
+
+2293 ià(
+h”eis
+)
+
+2294
+ `¡r_ä“
+(
+h”ewas
+);
+
+2295 
+s
+;
+
+2296
+ }
+}
+
+2298
+FCMD
+ *
+
+2299
+ $lßd_fÜm©
+()
+
+2301
+FCMD
+
+äoÙ
+;
+
+2302
+FCMD
+ *
+æšebeg
+;
+
+2303 *
+eÞ
+;
+
+2304 
+FCMD
+ *
+å»v
+ = &
+äoÙ
+;
+
+2305 
+FCMD
+ *
+fcmd
+;
+
+2306 *
+s
+;
+
+2307 *
+t
+;
+
+2308 
+STR
+ *
+¡r
+;
+
+2309
+boÞ
+
+nobÏnk
+;
+
+2310
+boÞ
+
+»³©”
+;
+
+2312
+ `Z”o
+(&
+äoÙ
+, 1,
+FCMD
+);
+
+2313
+s
+ =
+buåŒ
+;
+
+2314 
+s
+ <
+buãnd
+ || (
+rså
+ && ( ð
+ `¡r_g‘s
+(
+lše¡r
+,rså, 0)è!ð
+NuÎch
+)) {
+
+2315
+curcmd
+->
+c_lše
+++;
+
+2316 ià(
+š_ev®
+ && !
+rså
+) {
+
+2317
+eÞ
+ =
+ `šdex
+(
+s
+,'\n');
+
+2318 ià(!
+eÞ
+++)
+
+2319
+eÞ
+ =
+buãnd
+;
+
+2322
+eÞ
+ =
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+2323 ià(
+³¾db
+) {
+
+2324
+STR
+ *
+tmp¡r
+ =
+ `SŒ_Ãw
+(89,0);
+
+2326
+ `¡r_n£t
+(
+tmp¡r
+,
+s
+,
+eÞ
+-s);
+
+2327
+ `a¡Üe
+(
+ `¡ab_x¬¿y
+(
+curcmd
+->
+c_fže¡ab
+), ()curcmd->
+c_lše
+,
+tmp¡r
+);
+
+2329 ià(*
+s
+ == '.') {
+
+2330 
+t
+ =
+s
++1; *t == ' ' || *t == '\t';++) ;
+
+2331 ià(*
+t
+ == '\n') {
+
+2332
+buåŒ
+ =
+s
+;
+
+2333 
+äoÙ
+.
+f_Ãxt
+;
+
+2336 ià(*
+s
+ == '#') {
+
+2337
+s
+ =
+eÞ
+;
+
+2340
+æšebeg
+ =
+NuÎfcmd
+;
+
+2341
+nobÏnk
+ =
+FALSE
+;
+
+2342
+»³©”
+ =
+FALSE
+;
+
+2343 
+s
+ <
+eÞ
+) {
+
+2344
+ `Newz
+(804,
+fcmd
+,1,
+FCMD
+);
+
+2345
+å»v
+->
+f_Ãxt
+ =
+fcmd
+;
+
+2346
+å»v
+ =
+fcmd
+;
+
+2347 
+t
+=
+s
+; <
+eÞ
+ && *t != '@' && *t != '^';++) {
+
+2348 ià(*
+t
+ == '~') {
+
+2349
+nobÏnk
+ =
+TRUE
+;
+
+2350 *
+t
+ = ' ';
+
+2351 ià(
+t
+[1] == '~') {
+
+2352
+»³©”
+ =
+TRUE
+;
+
+2353
+t
+[1] = ' ';
+
+2357
+fcmd
+->
+f_´e
+ =
+ `n§ve¡r
+(
+s
+,
+t
+-s);
+
+2358
+fcmd
+->
+f_´esize
+ =
+t
+-
+s
+;
+
+2359
+s
+ =
+t
+;
+
+2360 ià(
+s
+ >ð
+eÞ
+) {
+
+2361 ià(
+nobÏnk
+)
+
+2362
+fcmd
+->
+f_æags
+ |ð
+FC_NOBLANK
+;
+
+2363 ià(
+»³©”
+)
+
+2364
+fcmd
+->
+f_æags
+ |ð
+FC_REPEAT
+;
+
+2367 ià(!
+æšebeg
+)
+
+2368
+æšebeg
+ =
+fcmd
+;
+
+2369 ià(*
+s
+++ == '^')
+
+2370
+fcmd
+->
+f_æags
+ |ð
+FC_CHOP
+;
+
+2371 *
+s
+) {
+
+2373
+fcmd
+->
+f_ty³
+ =
+F_LINES
+;
+
+2374 *
+s
+ = '\0';
+
+2377
+fcmd
+->
+f_ty³
+ =
+F_LEFT
+;
+
+2378 *
+s
+ == '<')
+
+2379
+s
+++;
+
+2382
+fcmd
+->
+f_ty³
+ =
+F_RIGHT
+;
+
+2383 *
+s
+ == '>')
+
+2384
+s
+++;
+
+2387
+fcmd
+->
+f_ty³
+ =
+F_CENTER
+;
+
+2388 *
+s
+ == '|')
+
+2389
+s
+++;
+
+2395 ià(*
+s
+ == '.' && s[1] == '.') {
+
+2396 
+deçuÉ_fÜm©
+;
+
+2398
+fcmd
+->
+f_ty³
+ =
+F_DECIMAL
+;
+
+2400 *
+p
+;
+
+2404 *
+s
+ == '#')
+
+2405
+s
+++;
+
+2406 ià(*
+s
+ == '.') {
+
+2407
+s
+++;
+
+2408
+p
+ =
+s
+;
+
+2409 *
+s
+ == '#')
+
+2410
+s
+++;
+
+2411
+fcmd
+->
+f_decim®s
+ =
+s
+-
+p
+;
+
+2412
+fcmd
+->
+f_æags
+ |ð
+FC_DP
+;
+
+2414
+fcmd
+->
+f_decim®s
+ = 0;
+
+2419
+deçuÉ_fÜm©
+:
+
+2420
+fcmd
+->
+f_ty³
+ =
+F_LEFT
+;
+
+2423 ià(
+fcmd
+->
+f_æags
+ &
+FC_CHOP
+ && *
+s
+ == '.') {
+
+2424
+fcmd
+->
+f_æags
+ |ð
+FC_MORE
+;
+
+2425 *
+s
+ == '.')
+
+2426
+s
+++;
+
+2428
+fcmd
+->
+f_size
+ =
+s
+-
+t
+;
+
+2430 ià(
+æšebeg
+) {
+
+2431
+agaš
+:
+
+2432 ià(
+s
+ >ð
+buãnd
+ &&
+
+2433 (!
+rså
+ || (
+s
+ =
+ `¡r_g‘s
+(
+lše¡r
+,„så, 0)è=ð
+NuÎch
+) )
+
+2434 
+badfÜm
+;
+
+2435
+curcmd
+->
+c_lše
+++;
+
+2436 ià(
+š_ev®
+ && !
+rså
+) {
+
+2437
+eÞ
+ =
+ `šdex
+(
+s
+,'\n');
+
+2438 ià(!
+eÞ
+++)
+
+2439
+eÞ
+ =
+buãnd
+;
+
+2442
+eÞ
+ =
+buãnd
+ =
+lše¡r
+->
+¡r_±r
+ +†še¡r->
+¡r_cur
+;
+
+2443 ià(
+³¾db
+) {
+
+2444
+STR
+ *
+tmp¡r
+ =
+ `SŒ_Ãw
+(90,0);
+
+2446
+ `¡r_n£t
+(
+tmp¡r
+,
+s
+,
+eÞ
+-s);
+
+2447
+ `a¡Üe
+(
+ `¡ab_x¬¿y
+(
+curcmd
+->
+c_fže¡ab
+),
+
+2448 ()
+curcmd
+->
+c_lše
+,
+tmp¡r
+);
+
+2450 ià(
+ `¡ºEQ
+(
+s
+,".\n",2)) {
+
+2451
+buåŒ
+ =
+s
+;
+
+2452
+ `yy”rÜ
+("Missing values†ine");
+
+2453 
+äoÙ
+.
+f_Ãxt
+;
+
+2455 ià(*
+s
+ == '#') {
+
+2456
+s
+ =
+eÞ
+;
+
+2457 
+agaš
+;
+
+2459
+¡r
+ =
+æšebeg
+->
+f_uŬ£d
+ =
+ `SŒ_Ãw
+(91,
+eÞ
+ -
+s
+);
+
+2460
+¡r
+->
+¡r_u
+.
+¡r_hash
+ =
+cur¡ash
+;
+
+2461
+ `¡r_n£t
+(
+¡r
+,"(",1);
+
+2462
+æšebeg
+->
+f_lše
+ =
+curcmd
+->
+c_lše
+;
+
+2463
+eÞ
+[-1] = '\0';
+
+2464 ià(!
+æšebeg
+->
+f_Ãxt
+->
+f_ty³
+ ||
+ `šdex
+(
+s
+, ',')) {
+
+2465
+eÞ
+[-1] = '\n';
+
+2466
+ `¡r_nÿt
+(
+¡r
+,
+s
+,
+eÞ
+ - s - 1);
+
+2467
+ `¡r_nÿt
+(
+¡r
+,",$$);",5);
+
+2468
+s
+ =
+eÞ
+;
+
+2471
+eÞ
+[-1] = '\n';
+
+2472 
+s
+ <
+eÞ
+ &&
+ `is¥aû
+(*s))
+
+2473
+s
+++;
+
+2474
+t
+ =
+s
+;
+
+2475 
+s
+ <
+eÞ
+) {
+
+2476 *
+s
+) {
+
+2478
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+ -);
+
+2479
+ `¡r_nÿt
+(
+¡r
+, "," ,1);
+
+2480 
+s
+ <
+eÞ
+ && (
+ `is¥aû
+(*s) || *s == ';'))
+
+2481
+s
+++;
+
+2482
+t
+ =
+s
+;
+
+2485
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+ -);
+
+2486
+t
+ =
+s
+;
+
+2487
+s
+ =
+ `sÿnid’t
+(s,
+eÞ
+,
+tok’buf
+);
+
+2488
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+ -);
+
+2489
+t
+ =
+s
+;
+
+2490 ià(
+s
+ <
+eÞ
+ && * &&
+ `šdex
+("$'\"",*s))
+
+2491
+ `¡r_nÿt
+(
+¡r
+, ",", 1);
+
+2494
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+ -);
+
+2495
+t
+ =
+s
+;
+
+2496
+s
+++;
+
+2497 
+s
+ <
+eÞ
+ && (* !ð*
+t
+ || s[-1] == '\\'))
+
+2498
+s
+++;
+
+2499 ià(
+s
+ <
+eÞ
+)
+
+2500
+s
+++;
+
+2501
+ `¡r_nÿt
+(
+¡r
+,
+t
+,
+s
+ -);
+
+2502
+t
+ =
+s
+;
+
+2503 ià(
+s
+ <
+eÞ
+ && * &&
+ `šdex
+("$'\"",*s))
+
+2504
+ `¡r_nÿt
+(
+¡r
+, ",", 1);
+
+2507
+ `yy”rÜ
+("Please use commaso separate fields");
+
+2510
+ `¡r_nÿt
+(
+¡r
+,"$$);",4);
+
+2514
+badfÜm
+:
+
+2515
+buåŒ
+ =
+ `¡r_g‘
+(
+lše¡r
+);
+
+2516
+ `yy”rÜ
+("Format‚oterminated");
+
+2517 
+äoÙ
+.
+f_Ãxt
+;
+
+2518
+ }
+}
+
+2520
+ $£t_csh
+()
+
+2522 #ifdeà
+CSH
+
+
+2523 ià(!
+cshËn
+)
+
+2524
+cshËn
+ =
+ `¡¾’
+(
+cshÇme
+);
+
+2526
+ }
+}
+
+ @tperly.c
+
+1 #ifdeà
+BWGC
+
+
+2
+*
+gc_m®loc
+(), *
+gc_»®loc
+();
+
+4
+*
+m®loc
+(), *
+»®loc
+();
+
+8 
+ ~"INTERN.h
+"
+
+9 
+ ~"³¾.h
+"
+
+11
+STAB
+ *
+ gsü¡ab
+;
+
+12
+ARG
+ *
+ g¬g4
+;
+
+13
+ARG
+ *
+ g¬g5
+;
+
+18 
+ miv®
+;
+
+19 *
+ mcv®
+;
+
+20
+ARG
+ *
+ m¬g
+;
+
+21
+CMD
+ *
+ mcmdv®
+;
+
+22 
+compcmd
+
+ mcompv®
+;
+
+23
+STAB
+ *
+ m¡abv®
+;
+
+24
+FCMD
+ *
+ mfÜmv®
+;
+
+25 }
+ tYYSTYPE
+;
+
+26 
+ #WORD
+ 257
+
+ )
+
+27 
+ #APPEND
+ 258
+
+ )
+
+28 
+ #OPEN
+ 259
+
+ )
+
+29 
+ #SSELECT
+ 260
+
+ )
+
+30 
+ #LOOPEX
+ 261
+
+ )
+
+31 
+ #USING
+ 262
+
+ )
+
+32 
+ #FORMAT
+ 263
+
+ )
+
+33 
+ #DO
+ 264
+
+ )
+
+34 
+ #SHIFT
+ 265
+
+ )
+
+35 
+ #PUSH
+ 266
+
+ )
+
+36 
+ #POP
+ 267
+
+ )
+
+37 
+ #LVALFUN
+ 268
+
+ )
+
+38 
+ #WHILE
+ 269
+
+ )
+
+39 
+ #UNTIL
+ 270
+
+ )
+
+40 
+ #IF
+ 271
+
+ )
+
+41 
+ #UNLESS
+ 272
+
+ )
+
+42 
+ #ELSE
+ 273
+
+ )
+
+43 
+ #ELSIF
+ 274
+
+ )
+
+44 
+ #CONTINUE
+ 275
+
+ )
+
+45 
+ #SPLIT
+ 276
+
+ )
+
+46 
+ #FLIST
+ 277
+
+ )
+
+47 
+ #FOR
+ 278
+
+ )
+
+48 
+ #FILOP
+ 279
+
+ )
+
+49 
+ #FILOP2
+ 280
+
+ )
+
+50 
+ #FILOP3
+ 281
+
+ )
+
+51 
+ #FILOP4
+ 282
+
+ )
+
+52 
+ #FILOP22
+ 283
+
+ )
+
+53 
+ #FILOP25
+ 284
+
+ )
+
+54 
+ #FUNC0
+ 285
+
+ )
+
+55 
+ #FUNC1
+ 286
+
+ )
+
+56 
+ #FUNC2
+ 287
+
+ )
+
+57 
+ #FUNC2x
+ 288
+
+ )
+
+58 
+ #FUNC3
+ 289
+
+ )
+
+59 
+ #FUNC4
+ 290
+
+ )
+
+60 
+ #FUNC5
+ 291
+
+ )
+
+61 
+ #HSHFUN
+ 292
+
+ )
+
+62 
+ #HSHFUN3
+ 293
+
+ )
+
+63 
+ #FLIST2
+ 294
+
+ )
+
+64 
+ #SUB
+ 295
+
+ )
+
+65 
+ #FILETEST
+ 296
+
+ )
+
+66 
+ #LOCAL
+ 297
+
+ )
+
+67 
+ #DELETE
+ 298
+
+ )
+
+68 
+ #RELOP
+ 299
+
+ )
+
+69 
+ #EQOP
+ 300
+
+ )
+
+70 
+ #MULOP
+ 301
+
+ )
+
+71 
+ #ADDOP
+ 302
+
+ )
+
+72 
+ #PACKAGE
+ 303
+
+ )
+
+73 
+ #AMPER
+ 304
+
+ )
+
+74 
+ #FORMLIST
+ 305
+
+ )
+
+75 
+ #REG
+ 306
+
+ )
+
+76 
+ #ARYLEN
+ 307
+
+ )
+
+77 
+ #ARY
+ 308
+
+ )
+
+78 
+ #HSH
+ 309
+
+ )
+
+79 
+ #STAR
+ 310
+
+ )
+
+80 
+ #SUBST
+ 311
+
+ )
+
+81 
+ #PATTERN
+ 312
+
+ )
+
+82 
+ #RSTRING
+ 313
+
+ )
+
+83 
+ #TRANS
+ 314
+
+ )
+
+84 
+ #LISTOP
+ 315
+
+ )
+
+85 
+ #DOTDOT
+ 316
+
+ )
+
+86 
+ #OROR
+ 317
+
+ )
+
+87 
+ #ANDAND
+ 318
+
+ )
+
+88 
+ #UNIOP
+ 319
+
+ )
+
+89 
+ #LS
+ 320
+
+ )
+
+90 
+ #RS
+ 321
+
+ )
+
+91 
+ #MATCH
+ 322
+
+ )
+
+92 
+ #NMATCH
+ 323
+
+ )
+
+93 
+ #UMINUS
+ 324
+
+ )
+
+94 
+ #POW
+ 325
+
+ )
+
+95 
+ #INC
+ 326
+
+ )
+
+96 
+ #DEC
+ 327
+
+ )
+
+97 
+ #yyþ—rš
+
+yych¬
+ = -1
+
+ )
+
+98 
+ #yy”rok
+
+yy”ræag
+ = 0
+
+ )
+
+99
+
+yych¬
+;
+
+100
+
+yy”ræag
+;
+
+101 #iâdeà
+YYMAXDEPTH
+
+
+102 
+ #YYMAXDEPTH
+ 150
+
+ )
+
+104
+YYSTYPE
+
+ gyylv®
+,
+ gyyv®
+;
+
+105 
+ #YYERRCODE
+ 256
+
+ )
+
+109 
+ gyyexÿ
+[] ={
+
+147 
+ #YYNPROD
+ 182
+
+ )
+
+148 
+ #YYLAST
+ 3179
+
+ )
+
+149 
+ gyyaù
+[]={
+
+469 
+ gyy·ù
+[]={
+
+512 
+ gyypgo
+[]={
+
+517 
+ gyyr1
+[]={
+
+538 
+ gyyr2
+[]={
+
+559 
+ gyychk
+[]={
+
+602 
+ gyydef
+[]={
+
+645 ¡ruù { *
+ mt_Çme
+; 
+ mt_v®
+; }
+ tyytokty³
+;
+
+646 #iâdeà
+YYDEBUG
+
+
+647 
+ #YYDEBUG
+ 0
+
+ )
+
+650 #ià
+YYDEBUG
+
+
+652
+yytokty³
+
+ gyytoks
+[] =
+
+738 *
+ gyy»ds
+[] =
+
+934 
+ #YYERROR
+ 
+yy”¾ab
+
+
+ )
+
+935 #ifdeà
+IGNOREFREE
+
+
+936 
+ #YYACCEPT
+ { (0); }
+
+ )
+
+937 
+ #YYABORT
+ { (1); }
+
+ )
+
+939 
+ #YYACCEPT
+ {
+ `Saãä“
+(
+yys
+);
+ `ä“
+(
+yyv
+); (0); }
+
+ )
+
+940 
+ #YYABORT
+ {
+ `Saãä“
+(
+yys
+);
+ `ä“
+(
+yyv
+); (1); }
+
+ )
+
+942 
+ #YYBACKUP
+Ãwtok’
+,
+Ãwv®ue
+ )\
+
+944 iàÐ
+yych¬
+ >ð0 || (
+yyr2
+[
+yytmp
+ ] >> 1 ) != 1 )\
+
+946
+ `yy”rÜ
+( "syntaxƒrror - cannot backup" );\
+
+947 
+yy”¾ab
+;\
+
+949
+yych¬
+ =
+Ãwtok’
+;\
+
+950
+yy¡©e
+ = *
+yyps
+;\
+
+951
+yylv®
+ =
+Ãwv®ue
+;\
+
+952 
+yyÃw¡©e
+;\
+
+953 }
+
+ )
+
+954 
+ #YYRECOVERING
+(è(!!
+yy”ræag
+)
+
+ )
+
+955 #iâdeà
+YYDEBUG
+
+
+956 
+ #YYDEBUG
+ 1
+
+ )
+
+962 
+ gyydebug
+;
+
+967 
+ #YYFLAG
+ (-1000)
+
+ )
+
+972 
+YYSTYPE
+ *
+ gyyv
+;
+
+973 *
+ gyys
+;
+
+975 
+YYSTYPE
+ *
+ gyypv
+;
+
+976 *
+ gyyps
+;
+
+978 
+ gyy¡©e
+;
+
+979 
+ gyytmp
+;
+
+981 
+ gyyüs
+;
+
+983 
+ gyy”ræag
+;
+
+984 
+ gyych¬
+;
+
+991
+ $yy·r£
+()
+
+993 
+YYSTYPE
+ *
+yypvt
+;
+
+994 
+yymaxd•th
+ =
+YYMAXDEPTH
+;
+
+999 #ifdeà
+BWGC
+
+
+1000
+yyv
+ = (
+YYSTYPE
+*)
+ `gc_m®loc
+(
+yymaxd•th
+*(YYSTYPE));
+
+1001
+yys
+ = (*)
+ `gc_m®loc
+(
+yymaxd•th
+*());
+
+1003
+yyv
+ = (
+YYSTYPE
+*)
+ `m®loc
+(
+yymaxd•th
+*(YYSTYPE));
+
+1004
+yys
+ = (*)
+ `m®loc
+(
+yymaxd•th
+*());
+
+1006 ià(!
+yyv
+ || !
+yys
+)
+
+1008
+ `yy”rÜ
+( "out of memory" );
+
+1011
+yypv
+ = &
+yyv
+[-1];
+
+1012
+yyps
+ = &
+yys
+[-1];
+
+1013
+yy¡©e
+ = 0;
+
+1014
+yytmp
+ = 0;
+
+1015
+yyüs
+ = 0;
+
+1016
+yy”ræag
+ = 0;
+
+1017
+yych¬
+ = -1;
+
+1019 
+yy¡ack
+;
+
+1021 
+YYSTYPE
+ *
+yy_pv
+;
+
+1022 *
+yy_ps
+;
+
+1023 
+yy_¡©e
+;
+
+1024 
+yy_n
+;
+
+1030
+yyÃw¡©e
+:
+
+1031
+yy_pv
+ =
+yypv
+;
+
+1032
+yy_ps
+ =
+yyps
+;
+
+1033
+yy_¡©e
+ =
+yy¡©e
+;
+
+1034 
+yy_Ãw¡©e
+;
+
+1040
+yy¡ack
+:
+
+1041
+yy_pv
+ =
+yypv
+;
+
+1042
+yy_ps
+ =
+yyps
+;
+
+1043
+yy_¡©e
+ =
+yy¡©e
+;
+
+1048
+yy_¡ack
+:
+
+1052 #ià
+YYDEBUG
+
+
+1059 iàÐ
+yydebug
+ )
+
+1061 
+yy_i
+;
+
+1063 ()
+ `´štf
+Ð"S‹ %d,ok’ ",
+yy_¡©e
+ );
+
+1064 iàÐ
+yych¬
+ == 0 )
+
+1065 ()
+ `´štf
+( "end-of-file\n" );
+
+1066 iàÐ
+yych¬
+ < 0 )
+
+1067 ()
+ `´štf
+( "-none-\n" );
+
+1070 
+yy_i
+ = 0;
+yytoks
+[yy_i].
+t_v®
+ >= 0;
+
+1071
+yy_i
+++ )
+
+1073 iàÐ
+yytoks
+[
+yy_i
+].
+t_v®
+ =ð
+yych¬
+ )
+
+1076 ()
+ `´štf
+Ð"%s\n",
+yytoks
+[
+yy_i
+].
+t_Çme
+ );
+
+1080 iàÐ++
+yy_ps
+ >ð&
+yys
+[
+yymaxd•th
+ ] )
+
+1086 
+yyps_šdex
+ = (
+yy_ps
+ -
+yys
+);
+
+1087 
+yypv_šdex
+ = (
+yy_pv
+ -
+yyv
+);
+
+1088 
+yypvt_šdex
+ = (
+yypvt
+ -
+yyv
+);
+
+1089
+yymaxd•th
+ +ð
+YYMAXDEPTH
+;
+
+1090 #ifdeà
+BWGC
+
+
+1091
+yyv
+ = (
+YYSTYPE
+*)
+ `gc_»®loc
+((*)yyv,
+
+1092
+yymaxd•th
+ * (
+YYSTYPE
+));
+
+1093
+yys
+ = (*)
+ `gc_»®loc
+((*)yys,
+
+1094
+yymaxd•th
+ * ());
+
+1096
+yyv
+ = (
+YYSTYPE
+*)
+ `»®loc
+((*)yyv,
+
+1097
+yymaxd•th
+ * (
+YYSTYPE
+));
+
+1098
+yys
+ = (*)
+ `»®loc
+((*)yys,
+
+1099
+yymaxd•th
+ * ());
+
+1101 ià(!
+yyv
+ || !
+yys
+)
+
+1103
+ `yy”rÜ
+( "yacc stack overflow" );
+
+1106
+yy_ps
+ =
+yys
+ +
+yyps_šdex
+;
+
+1107
+yy_pv
+ =
+yyv
+ +
+yypv_šdex
+;
+
+1108
+yypvt
+ =
+yyv
+ +
+yypvt_šdex
+;
+
+1110 *
+yy_ps
+ =
+yy_¡©e
+;
+
+1111 *++
+yy_pv
+ =
+yyv®
+;
+
+1116
+yy_Ãw¡©e
+:
+
+1117 iàÐÐ
+yy_n
+ =
+yy·ù
+[
+yy_¡©e
+ ] ) <ð
+YYFLAG
+ )
+
+1118 
+yydeçuÉ
+;
+
+1119 #ià
+YYDEBUG
+
+
+1123
+yytmp
+ =
+yych¬
+ < 0;
+
+1125 iàÐÐ
+yych¬
+ < 0 ) && ( ( yych¬ =
+ `yyËx
+() ) < 0 ) )
+
+1126
+yych¬
+ = 0;
+
+1127 #ià
+YYDEBUG
+
+
+1128 iàÐ
+yydebug
+ &&
+yytmp
+ )
+
+1130 
+yy_i
+;
+
+1132 ()
+ `´štf
+( "Receivedoken " );
+
+1133 iàÐ
+yych¬
+ == 0 )
+
+1134 ()
+ `´štf
+( "end-of-file\n" );
+
+1135 iàÐ
+yych¬
+ < 0 )
+
+1136 ()
+ `´štf
+( "-none-\n" );
+
+1139 
+yy_i
+ = 0;
+yytoks
+[yy_i].
+t_v®
+ >= 0;
+
+1140
+yy_i
+++ )
+
+1142 iàÐ
+yytoks
+[
+yy_i
+].
+t_v®
+ =ð
+yych¬
+ )
+
+1145 ()
+ `´štf
+Ð"%s\n",
+yytoks
+[
+yy_i
+].
+t_Çme
+ );
+
+1149 iàÐÐÐ
+yy_n
+ +ð
+yych¬
+ ) < 0 ) || ( yy_À>ð
+YYLAST
+ ) )
+
+1150 
+yydeçuÉ
+;
+
+1151 iàÐ
+yychk
+[
+yy_n
+ =
+yyaù
+[ yy_À] ] =ð
+yych¬
+ )
+
+1153
+yych¬
+ = -1;
+
+1154
+yyv®
+ =
+yylv®
+;
+
+1155
+yy_¡©e
+ =
+yy_n
+;
+
+1156 iàÐ
+yy”ræag
+ > 0 )
+
+1157
+yy”ræag
+--;
+
+1158 
+yy_¡ack
+;
+
+1161
+yydeçuÉ
+:
+
+1162 iàÐÐ
+yy_n
+ =
+yydef
+[
+yy_¡©e
+ ] ) == -2 )
+
+1164 #ià
+YYDEBUG
+
+
+1165
+yytmp
+ =
+yych¬
+ < 0;
+
+1167 iàÐÐ
+yych¬
+ < 0 ) && ( ( yych¬ =
+ `yyËx
+() ) < 0 ) )
+
+1168
+yych¬
+ = 0;
+
+1169 #ià
+YYDEBUG
+
+
+1170 iàÐ
+yydebug
+ &&
+yytmp
+ )
+
+1172 
+yy_i
+;
+
+1174 ()
+ `´štf
+( "Receivedoken " );
+
+1175 iàÐ
+yych¬
+ == 0 )
+
+1176 ()
+ `´štf
+( "end-of-file\n" );
+
+1177 iàÐ
+yych¬
+ < 0 )
+
+1178 ()
+ `´štf
+( "-none-\n" );
+
+1181 
+yy_i
+ = 0;
+
+1182
+yytoks
+[
+yy_i
+].
+t_v®
+ >= 0;
+
+1183
+yy_i
+++ )
+
+1185 iàÐ
+yytoks
+[
+yy_i
+].
+t_v®
+
+
+1186 =ð
+yych¬
+ )
+
+1191 ()
+ `´štf
+Ð"%s\n",
+yytoks
+[
+yy_i
+].
+t_Çme
+ );
+
+1199 *
+yyxi
+ =
+yyexÿ
+;
+
+1201  ( *
+yyxi
+ != -1 ) ||
+
+1202 Ð
+yyxi
+[1] !ð
+yy_¡©e
+ ) )
+
+1204
+yyxi
+ += 2;
+
+1206  ( *(
+yyxi
+ += 2) >= 0 ) &&
+
+1207 Ð*
+yyxi
+ !ð
+yych¬
+ ) )
+
+1209 iàÐÐ
+yy_n
+ =
+yyxi
+[1] ) < 0 )
+
+1210
+YYACCEPT
+;
+
+1217 iàÐ
+yy_n
+ == 0 )
+
+1220 
+yy”ræag
+ )
+
+1223
+ `yy”rÜ
+( "syntaxƒrror" );
+
+1224 
+sk_š™
+;
+
+1225
+yy”¾ab
+:
+
+1230
+yy_pv
+ =
+yypv
+;
+
+1231
+yy_ps
+ =
+yyps
+;
+
+1232
+yy_¡©e
+ =
+yy¡©e
+;
+
+1233
+yyüs
+++;
+
+1234
+sk_š™
+:
+
+1238
+yy”ræag
+ = 3;
+
+1243 
+yy_ps
+ >ð
+yys
+ )
+
+1245
+yy_n
+ =
+yy·ù
+[ *
+yy_ps
+ ] +
+YYERRCODE
+;
+
+1246 iàÐ
+yy_n
+ >ð0 && yy_À<
+YYLAST
+ &&
+
+1247
+yychk
+[
+yyaù
+[
+yy_n
+]] =ð
+YYERRCODE
+) {
+
+1251
+yy_¡©e
+ =
+yyaù
+[
+yy_n
+ ];
+
+1252 
+yy_¡ack
+;
+
+1258 #ià
+YYDEBUG
+
+
+1259 
+ #_POP_
+ "E¼Ü„ecov”y…Ý ¡©%d, uncov” ¡©%d\n"
+
+ )
+
+1260 iàÐ
+yydebug
+ )
+
+1261 ()
+ `´štf
+_POP_
+, *
+yy_ps
+,
+
+1262
+yy_ps
+[-1] );
+
+1263 #undeà
+_POP_
+
+
+1265
+yy_ps
+--;
+
+1266
+yy_pv
+--;
+
+1272
+YYABORT
+;
+
+1274 #ià
+YYDEBUG
+
+
+1282 iàÐ
+yydebug
+ )
+
+1284 
+yy_i
+;
+
+1286 ()
+ `´štf
+( "Error„ecovery discards " );
+
+1287 iàÐ
+yych¬
+ == 0 )
+
+1288 ()
+ `´štf
+( "tokenƒnd-of-file\n" );
+
+1289 iàÐ
+yych¬
+ < 0 )
+
+1290 ()
+ `´štf
+( "token -none-\n" );
+
+1293 
+yy_i
+ = 0;
+
+1294
+yytoks
+[
+yy_i
+].
+t_v®
+ >= 0;
+
+1295
+yy_i
+++ )
+
+1297 iàÐ
+yytoks
+[
+yy_i
+].
+t_v®
+
+
+1298 =ð
+yych¬
+ )
+
+1303 ()
+ `´štf
+( "token %s\n",
+
+1304
+yytoks
+[
+yy_i
+].
+t_Çme
+ );
+
+1308 iàÐ
+yych¬
+ == 0 )
+
+1309
+YYABORT
+;
+
+1310
+yych¬
+ = -1;
+
+1311 
+yy_Ãw¡©e
+;
+
+1318 #ià
+YYDEBUG
+
+
+1324 iàÐ
+yydebug
+ )
+
+1325 ()
+ `´štf
+( "Reduce by (%d) \"%s\"\n",
+
+1326
+yy_n
+,
+yy»ds
+[ yy_n ] );
+
+1328
+yytmp
+ =
+yy_n
+;
+
+1329
+yypvt
+ =
+yy_pv
+;
+
+1344 
+yy_Ën
+ =
+yyr2
+[
+yy_n
+ ];
+
+1346 iàÐ!Ð
+yy_Ën
+ & 01 ) )
+
+1348
+yy_Ën
+ >>= 1;
+
+1349
+yyv®
+ = (
+yy_pv
+ -ð
+yy_Ën
+ )[1];
+
+1350
+yy_¡©e
+ =
+yypgo
+[
+yy_n
+ =
+yyr1
+[ yy_n ] ] +
+
+1351 *Ð
+yy_ps
+ -ð
+yy_Ën
+ ) + 1;
+
+1352 iàÐ
+yy_¡©e
+ >ð
+YYLAST
+ ||
+
+1353
+yychk
+[
+yy_¡©e
+ =
+
+1354
+yyaù
+[
+yy_¡©e
+ ] ] !ð-
+yy_n
+ )
+
+1356
+yy_¡©e
+ =
+yyaù
+[
+yypgo
+[
+yy_n
+ ] ];
+
+1358 
+yy_¡ack
+;
+
+1360
+yy_Ën
+ >>= 1;
+
+1361
+yyv®
+ = (
+yy_pv
+ -ð
+yy_Ën
+ )[1];
+
+1362
+yy_¡©e
+ =
+yypgo
+[
+yy_n
+ =
+yyr1
+[ yy_n ] ] +
+
+1363 *Ð
+yy_ps
+ -ð
+yy_Ën
+ ) + 1;
+
+1364 iàÐ
+yy_¡©e
+ >ð
+YYLAST
+ ||
+
+1365
+yychk
+[
+yy_¡©e
+ =
+yyaù
+[ yy_¡©] ] !ð-
+yy_n
+ )
+
+1367
+yy_¡©e
+ =
+yyaù
+[
+yypgo
+[
+yy_n
+ ] ];
+
+1371
+yy¡©e
+ =
+yy_¡©e
+;
+
+1372
+yyps
+ =
+yy_ps
+;
+
+1373
+yypv
+ =
+yy_pv
+;
+
+1378 
+yytmp
+ )
+
+1384 #ià
+ `defšed
+(
+YYDEBUG
+è&& defšed(
+DEBUGGING
+)
+
+1385
+yydebug
+ = (
+debug
+ & 1);
+
+1390 { ià(
+š_ev®
+)
+
+1391
+ev®_roÙ
+ =
+ `block_h—d
+(
+yypvt
+[-0].
+cmdv®
+);
+
+1393
+maš_roÙ
+ =
+ `block_h—d
+(
+yypvt
+[-0].
+cmdv®
+); } ;
+
+1396 {
+yyv®
+.
+compv®
+.
+comp_Œue
+ =
+yypvt
+[-2].
+cmdv®
+; yyv®.compv®.
+comp_®t
+ = yypvt[-0].cmdval; } ;
+
+1399 {
+yyv®
+.
+compv®
+.
+comp_Œue
+ =
+yypvt
+[-1].
+cmdv®
+; yyv®.compv®.
+comp_®t
+ = yypvt[-0].cmdval; } ;
+
+1402 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; } ;
+
+1405 {
+yyv®
+.
+cmdv®
+ =
+yypvt
+[-0].cmdval; } ;
+
+1408 {
+cmdlše
+ =
+yypvt
+[-4].
+iv®
+;
+
+1409
+yyv®
+.
+cmdv®
+ =
+ `make_ccmd
+(
+C_ELSIF
+,
+yypvt
+[-2].
+¬g
+,yypvt[-0].
+compv®
+); } ;
+
+1412 {
+yyv®
+.
+cmdv®
+ =
+ `block_h—d
+(
+yypvt
+[-1].cmdval);
+
+1413 ià(
+§ve¡ack
+->
+¬y_fžl
+ >
+yypvt
+[-2].
+iv®
+)
+
+1414
+ `»¡Ü–i¡
+(
+yypvt
+[-2].
+iv®
+); } ;
+
+1417 {
+yyv®
+.
+iv®
+ =
+§ve¡ack
+->
+¬y_fžl
+; } ;
+
+1420 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; } ;
+
+1423 {
+yyv®
+.
+cmdv®
+ =
+ `­³nd_lše
+(
+yypvt
+[-1].cmdval,yypvt[-0].cmdval); } ;
+
+1426 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; } ;
+
+1429 {
+yyv®
+.
+cmdv®
+ =
+ `add_Ïb–
+(
+yypvt
+[-1].
+cv®
+,yypvt[-0].cmdval); } ;
+
+1432 { ià(
+yypvt
+[-1].
+cv®
+ !ð
+NuÎch
+) {
+
+1433
+yyv®
+.
+cmdv®
+ =
+ `add_Ïb–
+(
+yypvt
+[-1].
+cv®
+,
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+
+1434
+Nuάg
+, Nullarg) );
+
+1437
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+;
+
+1438
+cmdlše
+ =
+NOLINE
+;
+
+1442 {
+yyv®
+.
+cmdv®
+ =
+ `add_Ïb–
+(
+yypvt
+[-2].
+cv®
+,yypvt[-1].cmdval); } ;
+
+1445 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; } ;
+
+1448 {
+yyv®
+.
+cmdv®
+ =
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+yypvt
+[-0].
+¬g
+,
+Nuάg
+); } ;
+
+1451 {
+yyv®
+.
+cmdv®
+ =
+ `addcÚd
+(
+
+1452
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+Nuάg
+,
+yypvt
+[-2].
+¬g
+), yypvt[-0].arg); } ;
+
+1455 {
+yyv®
+.
+cmdv®
+ =
+ `addcÚd
+(
+ `šv”t
+(
+
+1456
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+Nuάg
+,
+yypvt
+[-2].
+¬g
+)), yypvt[-0].arg); } ;
+
+1459 {
+yyv®
+.
+cmdv®
+ =
+ `addloÝ
+(
+
+1460
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+Nuάg
+,
+yypvt
+[-2].
+¬g
+), yypvt[-0].arg); } ;
+
+1463 {
+yyv®
+.
+cmdv®
+ =
+ `addloÝ
+(
+ `šv”t
+(
+
+1464
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+Nuάg
+,
+yypvt
+[-2].
+¬g
+)), yypvt[-0].arg); } ;
+
+1467 {
+cmdlše
+ =
+yypvt
+[-4].
+iv®
+;
+
+1468
+yyv®
+.
+cmdv®
+ =
+ `make_icmd
+(
+C_IF
+,
+yypvt
+[-2].
+¬g
+,yypvt[-0].
+compv®
+); } ;
+
+1471 {
+cmdlše
+ =
+yypvt
+[-4].
+iv®
+;
+
+1472
+yyv®
+.
+cmdv®
+ =
+ `šv”t
+(
+ `make_icmd
+(
+C_IF
+,
+yypvt
+[-2].
+¬g
+,yypvt[-0].
+compv®
+)); } ;
+
+1475 {
+cmdlše
+ =
+yypvt
+[-2].
+iv®
+;
+
+1476
+yyv®
+.
+cmdv®
+ =
+ `make_ccmd
+(
+C_IF
+,
+ `cmd_to_¬g
+(
+yypvt
+[-1].cmdv®),yypvt[-0].
+compv®
+); } ;
+
+1479 {
+cmdlše
+ =
+yypvt
+[-2].
+iv®
+;
+
+1480
+yyv®
+.
+cmdv®
+ =
+ `šv”t
+(
+ `make_ccmd
+(
+C_IF
+,
+ `cmd_to_¬g
+(
+yypvt
+[-1].cmdv®),yypvt[-0].
+compv®
+)); } ;
+
+1483 {
+cmdlše
+ =
+yypvt
+[-4].
+iv®
+;
+
+1484
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `add_Ïb–
+(
+yypvt
+[-5].
+cv®
+,
+
+1485
+ `make_ccmd
+(
+C_WHILE
+,
+yypvt
+[-2].
+¬g
+,yypvt[-0].
+compv®
+) )); } ;
+
+1488 {
+cmdlše
+ =
+yypvt
+[-4].
+iv®
+;
+
+1489
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `add_Ïb–
+(
+yypvt
+[-5].
+cv®
+,
+
+1490
+ `šv”t
+(
+ `make_ccmd
+(
+C_WHILE
+,
+yypvt
+[-2].
+¬g
+,yypvt[-0].
+compv®
+)) )); } ;
+
+1493 {
+cmdlše
+ =
+yypvt
+[-2].
+iv®
+;
+
+1494
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `add_Ïb–
+(
+yypvt
+[-3].
+cv®
+,
+
+1495
+ `make_ccmd
+(
+C_WHILE
+,
+ `cmd_to_¬g
+(
+yypvt
+[-1].
+cmdv®
+),yypvt[-0].
+compv®
+) )); } ;
+
+1498 {
+cmdlše
+ =
+yypvt
+[-2].
+iv®
+;
+
+1499
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `add_Ïb–
+(
+yypvt
+[-3].
+cv®
+,
+
+1500
+ `šv”t
+(
+ `make_ccmd
+(
+C_WHILE
+,
+ `cmd_to_¬g
+(
+yypvt
+[-1].
+cmdv®
+),yypvt[-0].
+compv®
+)) )); } ;
+
+1503 {
+cmdlše
+ =
+yypvt
+[-5].
+iv®
+;
+
+1516 ià(
+yypvt
+[-2].
+¬g
+->
+¬g_ty³
+ !ð
+O_ARRAY
+) {
+
+1517
+sü¡ab
+ =
+ `¯dd
+(
+ `g’¡ab
+());
+
+1518
+yyv®
+.
+cmdv®
+ =
+ `­³nd_lše
+(
+
+1519
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+
+1520
+ `l
+(
+ `make_Ý
+(
+O_ASSIGN
+,2,
+
+1521
+ `li¡ish
+(
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+1522
+ `¡ab2¬g
+(
+A_STAB
+,
+sü¡ab
+),
+
+1523
+Nuάg
+,Nullarg )),
+
+1524
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-2].
+¬g
+)),
+
+1525
+Nuάg
+)),
+
+1526
+Nuάg
+),
+
+1527
+ `wÝt
+(
+ `ov”
+(
+yypvt
+[-4].
+¡abv®
+,
+ `add_Ïb–
+(yypvt[-6].
+cv®
+,
+
+1528
+ `make_ccmd
+(
+C_WHILE
+,
+
+1529
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+1530
+ `¡ab2¬g
+(
+A_STAB
+,
+sü¡ab
+),
+
+1531
+Nuάg
+,Nullarg ),
+
+1532
+yypvt
+[-0].
+compv®
+)))));
+
+1533
+yyv®
+.
+cmdv®
+->
+c_lše
+ =
+yypvt
+[-5].
+iv®
+;
+
+1534
+yyv®
+.
+cmdv®
+->
+c_h—d
+->
+c_lše
+ =
+yypvt
+[-5].
+iv®
+;
+
+1537
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `ov”
+(
+yypvt
+[-4].
+¡abv®
+,
+ `add_Ïb–
+(yypvt[-6].
+cv®
+,
+
+1538
+ `make_ccmd
+(
+C_WHILE
+,
+yypvt
+[-2].
+¬g
+,yypvt[-0].
+compv®
+) )));
+
+1543 {
+cmdlše
+ =
+yypvt
+[-4].
+iv®
+;
+
+1544 ià(
+yypvt
+[-2].
+¬g
+->
+¬g_ty³
+ !ð
+O_ARRAY
+) {
+
+1545
+sü¡ab
+ =
+ `¯dd
+(
+ `g’¡ab
+());
+
+1546
+yyv®
+.
+cmdv®
+ =
+ `­³nd_lše
+(
+
+1547
+ `make_acmd
+(
+C_EXPR
+,
+NuΡab
+,
+
+1548
+ `l
+(
+ `make_Ý
+(
+O_ASSIGN
+,2,
+
+1549
+ `li¡ish
+(
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+1550
+ `¡ab2¬g
+(
+A_STAB
+,
+sü¡ab
+),
+
+1551
+Nuάg
+,Nullarg )),
+
+1552
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-2].
+¬g
+)),
+
+1553
+Nuάg
+)),
+
+1554
+Nuάg
+),
+
+1555
+ `wÝt
+(
+ `ov”
+(
+def¡ab
+,
+ `add_Ïb–
+(
+yypvt
+[-5].
+cv®
+,
+
+1556
+ `make_ccmd
+(
+C_WHILE
+,
+
+1557
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+1558
+ `¡ab2¬g
+(
+A_STAB
+,
+sü¡ab
+),
+
+1559
+Nuάg
+,Nullarg ),
+
+1560
+yypvt
+[-0].
+compv®
+)))));
+
+1561
+yyv®
+.
+cmdv®
+->
+c_lše
+ =
+yypvt
+[-4].
+iv®
+;
+
+1562
+yyv®
+.
+cmdv®
+->
+c_h—d
+->
+c_lše
+ =
+yypvt
+[-4].
+iv®
+;
+
+1565
+yyv®
+.
+cmdv®
+ =
+ `wÝt
+(
+ `ov”
+(
+def¡ab
+,
+ `add_Ïb–
+(
+yypvt
+[-5].
+cv®
+,
+
+1566
+ `make_ccmd
+(
+C_WHILE
+,
+yypvt
+[-2].
+¬g
+,yypvt[-0].
+compv®
+) )));
+
+1571 {
+yyv®
+.
+compv®
+.
+comp_Œue
+ =
+yypvt
+[-0].
+cmdv®
+;
+
+1572
+yyv®
+.
+compv®
+.
+comp_®t
+ =
+yypvt
+[-2].
+cmdv®
+;
+
+1573
+cmdlše
+ =
+yypvt
+[-8].
+iv®
+;
+
+1574
+yyv®
+.
+cmdv®
+ =
+ `­³nd_lše
+(
+yypvt
+[-6].cmdv®,
+ `wÝt
+(
+ `add_Ïb–
+(yypvt[-9].
+cv®
+,
+
+1575
+ `make_ccmd
+(
+C_WHILE
+,
+yypvt
+[-4].
+¬g
+,
+yyv®
+.
+compv®
+) ))); } ;
+
+1578 {
+yyv®
+.
+cmdv®
+ =
+ `add_Ïb–
+(
+yypvt
+[-1].
+cv®
+,
+ `make_ccmd
+(
+C_BLOCK
+,
+Nuάg
+,yypvt[-0].
+compv®
+)); } ;
+
+1581 {
+yyv®
+.
+cmdv®
+ =
+NuÎcmd
+; } ;
+
+1584 { ()
+ `sÿn¡r
+("1");
+yyv®
+.
+¬g
+ =
+yylv®
+.arg; } ;
+
+1587 {
+yyv®
+.
+cv®
+ =
+NuÎch
+; } ;
+
+1590 {
+yyv®
+.
+iv®
+ = 0; } ;
+
+1593 {
+yyv®
+.
+iv®
+ = 0; } ;
+
+1596 {
+yyv®
+.
+iv®
+ = 0; } ;
+
+1599 { ià(
+ `¡rEQ
+(
+yypvt
+[-2].
+cv®
+,"stdout"))
+
+1600
+ `make_fÜm
+(
+ `¡ab’t
+("STDOUT",
+TRUE
+),
+yypvt
+[-0].
+fÜmv®
+);
+
+1601 ià(
+ `¡rEQ
+(
+yypvt
+[-2].
+cv®
+,"stderr"))
+
+1602
+ `make_fÜm
+(
+ `¡ab’t
+("STDERR",
+TRUE
+),
+yypvt
+[-0].
+fÜmv®
+);
+
+1604
+ `make_fÜm
+(
+ `¡ab’t
+(
+yypvt
+[-2].
+cv®
+,
+TRUE
+),yypvt[-0].
+fÜmv®
+);
+
+1605
+ `Saãä“
+(
+yypvt
+[-2].
+cv®
+); yypvt[-2].cv® =
+NuÎch
+; } ;
+
+1608 {
+ `make_fÜm
+(
+ `¡ab’t
+("STDOUT",
+TRUE
+),
+yypvt
+[-0].
+fÜmv®
+); } ;
+
+1611 {
+ `make_sub
+(
+yypvt
+[-1].
+cv®
+,yypvt[-0].
+cmdv®
+); } ;
+
+1614 { 
+tmpbuf
+[256];
+
+1615
+STAB
+ *
+tmp¡ab
+;
+
+1617
+ `§veh±r
+(&
+cur¡ash
+);
+
+1618
+ `§ve™em
+(
+cur¡Çme
+);
+
+1619
+ `¡r_£t
+(
+cur¡Çme
+,
+yypvt
+[-1].
+cv®
+);
+
+1620
+ `¥rštf
+(
+tmpbuf
+,"'_%s",
+yypvt
+[-1].
+cv®
+);
+
+1621
+tmp¡ab
+ =
+ `¡ab’t
+(
+tmpbuf
+,
+TRUE
+);
+
+1622 ià(!
+ `¡ab_xhash
+(
+tmp¡ab
+))
+
+1623
+ `¡ab_xhash
+(
+tmp¡ab
+èð
+ `hÃw
+(0);
+
+1624
+cur¡ash
+ =
+ `¡ab_xhash
+(
+tmp¡ab
+);
+
+1625 ià(!
+cur¡ash
+->
+tbl_Çme
+)
+
+1626
+cur¡ash
+->
+tbl_Çme
+ =
+ `§ve¡r
+(
+yypvt
+[-1].
+cv®
+);
+
+1627
+cur¡ash
+->
+tbl_cÛffsize
+ = 0;
+
+1628
+ `Saãä“
+(
+yypvt
+[-1].
+cv®
+); yypvt[-1].cv® =
+NuÎch
+;
+
+1629
+cmdlše
+ =
+NOLINE
+;
+
+1633 {
+yyv®
+.
+¬g
+ =
+yypvt
+[-0].arg; } ;
+
+1636 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_COMMA
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1639 {
+yyv®
+.
+¬g
+ =
+yypvt
+[-0].arg; } ;
+
+1642 {
+yypvt
+[-2].
+¬g
+ =
+ `li¡ish
+(yypvt[-2].arg);
+
+1643 ià(
+yypvt
+[-2].
+¬g
+->
+¬g_ty³
+ =ð
+O_ASSIGN
+ && yypvt[-2].¬g->
+¬g_Ën
+ == 1)
+
+1644
+yypvt
+[-2].
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+1645 ià(
+yypvt
+[-2].
+¬g
+->
+¬g_ty³
+ =ð
+O_LIST
+)
+
+1646
+yypvt
+[-0].
+¬g
+ =
+ `li¡ish
+(yypvt[-0].arg);
+
+1647
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_ASSIGN
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+)); } ;
+
+1650 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_POW
+, 2,
+yypvt
+[-3].¬g, yypvt[-0].¬g,
+Nuάg
+)); } ;
+
+1653 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+yypvt
+[-2].
+iv®
+, 2, yypvt[-3].¬g, yypvt[-0].¬g,
+Nuάg
+)); } ;
+
+1656 {
+yyv®
+.
+¬g
+ =
+ `rÿtmaybe
+(
+ `l
+(
+ `make_Ý
+(
+yypvt
+[-2].
+iv®
+, 2, yypvt[-3].¬g, yypvt[-0].¬g,
+Nuάg
+)));} ;
+
+1659 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_LEFT_SHIFT
+, 2,
+yypvt
+[-3].¬g, yypvt[-0].¬g,
+Nuάg
+)); } ;
+
+1662 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_RIGHT_SHIFT
+, 2,
+yypvt
+[-3].¬g, yypvt[-0].¬g,
+Nuάg
+)); } ;
+
+1665 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_BIT_AND
+, 2,
+yypvt
+[-3].¬g, yypvt[-0].¬g,
+Nuάg
+)); } ;
+
+1668 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_XOR
+, 2,
+yypvt
+[-3].¬g, yypvt[-0].¬g,
+Nuάg
+)); } ;
+
+1671 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+O_BIT_OR
+, 2,
+yypvt
+[-3].¬g, yypvt[-0].¬g,
+Nuάg
+)); } ;
+
+1674 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_POW
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1677 { ià(
+yypvt
+[-1].
+iv®
+ =ð
+O_REPEAT
+)
+
+1678
+yypvt
+[-2].
+¬g
+ =
+ `li¡ish
+(yypvt[-2].arg);
+
+1679
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 2, yypvt[-2].¬g, yypvt[-0].¬g,
+Nuάg
+);
+
+1680 ià(
+yypvt
+[-1].
+iv®
+ =ð
+O_REPEAT
+) {
+
+1681 ià(
+yyv®
+.
+¬g
+[1].
+¬g_ty³
+ !ð
+A_EXPR
+ ||
+
+1682
+yyv®
+.
+¬g
+[1].
+¬g_±r
+.
+¬g_¬g
+->
+¬g_ty³
+ !ð
+O_LIST
+)
+
+1683
+yyv®
+.
+¬g
+[1].
+¬g_æags
+ &ð~
+AF_ARYOK
+;
+
+1687 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 2, yypvt[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1690 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_LEFT_SHIFT
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1693 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_RIGHT_SHIFT
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1696 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 2, yypvt[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1699 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 2, yypvt[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1702 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_BIT_AND
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1705 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_XOR
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1708 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_BIT_OR
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1711 {
+¬g4
+ =
+Nuάg
+;
+
+1712
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_F_OR_R
+, 4,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1715 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_AND
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1718 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_OR
+, 2,
+yypvt
+[-2].¬g, yypvt[-0].¬g,
+Nuάg
+); } ;
+
+1721 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_COND_EXPR
+, 3,
+yypvt
+[-4].arg, yypvt[-2].arg, yypvt[-0].arg); } ;
+
+1724 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_MATCH
+,
+yypvt
+[-2].arg, yypvt[-0].arg); } ;
+
+1727 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_NMATCH
+,
+yypvt
+[-2].arg, yypvt[-0].arg); } ;
+
+1730 {
+yyv®
+.
+¬g
+ =
+yypvt
+[-0].arg; } ;
+
+1733 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_NEGATE
+, 1,
+yypvt
+[-0].¬g,
+Nuάg
+, Nullarg); } ;
+
+1736 {
+yyv®
+.
+¬g
+ =
+yypvt
+[-0].arg; } ;
+
+1739 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_NOT
+, 1,
+yypvt
+[-0].¬g,
+Nuάg
+, Nullarg); } ;
+
+1742 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_COMPLEMENT
+, 1,
+yypvt
+[-0].¬g,
+Nuάg
+, Nullarg);} ;
+
+1745 {
+yyv®
+.
+¬g
+ =
+ `addæags
+(1,
+AF_POST
+|
+AF_UP
+,
+
+1746
+ `l
+(
+ `make_Ý
+(
+O_ITEM
+,1,
+yypvt
+[-1].
+¬g
+,
+Nuάg
+,Nullarg))); } ;
+
+1749 {
+yyv®
+.
+¬g
+ =
+ `addæags
+(1,
+AF_POST
+,
+
+1750
+ `l
+(
+ `make_Ý
+(
+O_ITEM
+,1,
+yypvt
+[-1].
+¬g
+,
+Nuάg
+,Nullarg))); } ;
+
+1753 {
+yyv®
+.
+¬g
+ =
+ `addæags
+(1,
+AF_PRE
+|
+AF_UP
+,
+
+1754
+ `l
+(
+ `make_Ý
+(
+O_ITEM
+,1,
+yypvt
+[-0].
+¬g
+,
+Nuάg
+,Nullarg))); } ;
+
+1757 {
+yyv®
+.
+¬g
+ =
+ `addæags
+(1,
+AF_PRE
+,
+
+1758
+ `l
+(
+ `make_Ý
+(
+O_ITEM
+,1,
+yypvt
+[-0].
+¬g
+,
+Nuάg
+,Nullarg))); } ;
+
+1761 {
+ݬgs
+[
+yypvt
+[-1].
+iv®
+] = 0;
+
+1762
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 1,
+
+1763
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+)),
+
+1764
+Nuάg
+, Nullarg);
+
+1768 {
+ݬgs
+[
+yypvt
+[-1].
+iv®
+] = 1;
+
+1769
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 1, yypvt[-0].¬g,
+Nuάg
+, Nullarg); } ;
+
+1772 {
+ݬgs
+[
+yypvt
+[-0].
+iv®
+] = (yypvt[-0].iv® !ð
+O_FTTTY
+);
+
+1773
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-0].
+iv®
+, 1,
+
+1774
+ `¡ab2¬g
+(
+A_STAB
+,
+
+1775
+yypvt
+[-0].
+iv®
+ =ð
+O_FTTTY
+?
+ `¡ab’t
+("STDIN",
+TRUE
+):
+def¡ab
+),
+
+1776
+Nuάg
+, Nullarg); } ;
+
+1779 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `loÿlize
+(
+ `make_Ý
+(
+O_ASSIGN
+, 1,
+
+1780
+ `loÿlize
+(
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+))),
+
+1781
+Nuάg
+,Nullarg))); } ;
+
+1784 {
+yyv®
+.
+¬g
+ =
+ `make_li¡
+(
+yypvt
+[-2].arg); } ;
+
+1787 {
+yyv®
+.
+¬g
+ =
+ `make_li¡
+(
+yypvt
+[-1].arg); } ;
+
+1790 {
+yyv®
+.
+¬g
+ =
+ `make_li¡
+(
+Nuάg
+); } ;
+
+1793 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_DOFILE
+,2,
+yypvt
+[-0].¬g,
+Nuάg
+,Nullarg);
+
+1794
+®l¡abs
+ =
+TRUE
+;} ;
+
+1797 {
+yyv®
+.
+¬g
+ =
+ `cmd_to_¬g
+(
+yypvt
+[-0].
+cmdv®
+); } ;
+
+1800 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-0].
+¡abv®
+); } ;
+
+1803 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_STAR
+,
+yypvt
+[-0].
+¡abv®
+); } ;
+
+1806 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_AELEM
+, 2,
+
+1807
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¯dd
+(
+yypvt
+[-3].
+¡abv®
+)), yypvt[-1].
+¬g
+,
+Nuάg
+); } ;
+
+1810 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_HASH
+, 1,
+
+1811
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-0].
+¡abv®
+),
+
+1812
+Nuάg
+, Nullarg); } ;
+
+1815 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_ARRAY
+, 1,
+
+1816
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-0].
+¡abv®
+),
+
+1817
+Nuάg
+, Nullarg); } ;
+
+1820 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_HELEM
+, 2,
+
+1821
+ `¡ab2¬g
+(
+A_STAB
+,
+ `hadd
+(
+yypvt
+[-3].
+¡abv®
+)),
+
+1822
+ `jmaybe
+(
+yypvt
+[-1].
+¬g
+),
+
+1823
+Nuάg
+); } ;
+
+1826 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_LSLICE
+, 3,
+
+1827
+Nuάg
+,
+
+1828
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+)),
+
+1829
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-4].
+¬g
+))); } ;
+
+1832 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_LSLICE
+, 3,
+
+1833
+Nuάg
+,
+
+1834
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+)),
+
+1835
+Nuάg
+); } ;
+
+1838 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_ASLICE
+, 2,
+
+1839
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¯dd
+(
+yypvt
+[-3].
+¡abv®
+)),
+
+1840
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+)),
+
+1841
+Nuάg
+); } ;
+
+1844 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_HSLICE
+, 2,
+
+1845
+ `¡ab2¬g
+(
+A_STAB
+,
+ `hadd
+(
+yypvt
+[-3].
+¡abv®
+)),
+
+1846
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+)),
+
+1847
+Nuάg
+); } ;
+
+1850 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_DELETE
+, 2,
+
+1851
+ `¡ab2¬g
+(
+A_STAB
+,
+ `hadd
+(
+yypvt
+[-3].
+¡abv®
+)),
+
+1852
+ `jmaybe
+(
+yypvt
+[-1].
+¬g
+),
+
+1853
+Nuάg
+); } ;
+
+1856 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_ARYLEN
+,
+yypvt
+[-0].
+¡abv®
+); } ;
+
+1859 {
+yyv®
+.
+¬g
+ =
+yypvt
+[-0].arg; } ;
+
+1862 {
+yyv®
+.
+¬g
+ =
+yypvt
+[-0].arg; } ;
+
+1865 {
+yyv®
+.
+¬g
+ =
+yypvt
+[-0].arg; } ;
+
+1868 {
+yyv®
+.
+¬g
+ =
+yypvt
+[-0].arg; } ;
+
+1871 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1872
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-3].
+cv®
+,
+TRUE
+)),
+
+1873
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+),
+
+1874
+Nuάg
+);
+ `Saãä“
+(
+yypvt
+[-3].
+cv®
+); yypvt[-3].cv® =
+NuÎch
+;
+
+1875
+yyv®
+.
+¬g
+->
+¬g_æags
+ |ð
+AF_DEPR
+; } ;
+
+1878 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1879
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-3].
+cv®
+,
+TRUE
+)),
+
+1880
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+),
+
+1881
+Nuάg
+);
+ `Saãä“
+(
+yypvt
+[-3].
+cv®
+); yypvt[-3].cv® =
+NuÎch
+; } ;
+
+1884 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1885
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-2].
+cv®
+,
+TRUE
+)),
+
+1886
+ `make_li¡
+(
+Nuάg
+),
+
+1887
+Nuάg
+);
+
+1888
+yyv®
+.
+¬g
+->
+¬g_æags
+ |ð
+AF_DEPR
+; } ;
+
+1891 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1892
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-2].
+cv®
+,
+TRUE
+)),
+
+1893
+ `make_li¡
+(
+Nuάg
+),
+
+1894
+Nuάg
+); } ;
+
+1897 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1898
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+)),
+
+1899
+Nuάg
+,
+
+1900
+Nuάg
+); } ;
+
+1903 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1904
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-3].
+¡abv®
+),
+
+1905
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+),
+
+1906
+Nuάg
+);
+
+1907
+yyv®
+.
+¬g
+->
+¬g_æags
+ |ð
+AF_DEPR
+; } ;
+
+1910 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1911
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-3].
+¡abv®
+),
+
+1912
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+),
+
+1913
+Nuάg
+); } ;
+
+1916 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1917
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-2].
+¡abv®
+),
+
+1918
+ `make_li¡
+(
+Nuάg
+),
+
+1919
+Nuάg
+);
+
+1920
+yyv®
+.
+¬g
+->
+¬g_æags
+ |ð
+AF_DEPR
+; } ;
+
+1923 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1924
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-2].
+¡abv®
+),
+
+1925
+ `make_li¡
+(
+Nuάg
+),
+
+1926
+Nuάg
+); } ;
+
+1929 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+((
+³¾db
+ ?
+O_DBSUBR
+ :
+O_SUBR
+), 2,
+
+1930
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-0].
+¡abv®
+),
+
+1931
+Nuάg
+,
+
+1932
+Nuάg
+); } ;
+
+1935 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-0].
+iv®
+,0,
+Nuάg
+,Nullarg,Nullarg); } ;
+
+1938 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+,1,
+ `cv®_to_¬g
+(yypvt[-0].
+cv®
+),
+
+1939
+Nuάg
+,Nullarg); } ;
+
+1942 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-0].
+iv®
+,0,
+Nuάg
+,Nullarg,Nullarg); } ;
+
+1945 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+,1,yypvt[-0].¬g,
+Nuάg
+,Nullarg); } ;
+
+1948 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SELECT
+, 0,
+Nuάg
+, Nullarg, Nullarg);} ;
+
+1951 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SELECT
+, 1,
+yypvt
+[-1].¬g,
+Nuάg
+, Nullarg); } ;
+
+1954 {
+¬g4
+ =
+yypvt
+[-1].
+¬g
+;
+
+1955
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SSELECT
+, 4,
+yypvt
+[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } ;
+
+1958 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_OPEN
+, 2,
+
+1959
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+)),
+
+1960
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+)),
+
+1961
+Nuάg
+); } ;
+
+1964 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_OPEN
+, 2,
+
+1965
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-1].
+cv®
+,
+TRUE
+)),
+
+1966
+ `¡ab2¬g
+(
+A_STAB
+,
+ `¡ab’t
+(
+yypvt
+[-1].
+cv®
+,
+TRUE
+)),
+
+1967
+Nuάg
+); } ;
+
+1970 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_OPEN
+, 2,
+
+1971
+yypvt
+[-2].
+¬g
+,
+
+1972
+yypvt
+[-1].
+¬g
+,
+Nuάg
+); } ;
+
+1975 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-3].
+iv®
+, 1,
+
+1976
+yypvt
+[-1].
+¬g
+,
+
+1977
+Nuάg
+, Nullarg); } ;
+
+1980 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 1,
+
+1981
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+)),
+
+1982
+Nuάg
+, Nullarg);
+
+1983
+ `Saãä“
+(
+yypvt
+[-0].
+cv®
+); yypvt[-0].cv® =
+NuÎch
+; } ;
+
+1986 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 1,
+
+1987
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-0].
+¡abv®
+),
+
+1988
+Nuάg
+, Nullarg); } ;
+
+1991 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-2].
+iv®
+, 1,
+
+1992
+ `¡ab2¬g
+(
+A_WORD
+,
+NuΡab
+),
+
+1993
+Nuάg
+, Nullarg); } ;
+
+1996 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-0].
+iv®
+, 0,
+
+1997
+Nuάg
+, Nullarg, Nullarg); } ;
+
+2000 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-4].
+iv®
+, 2, yypvt[-2].¬g, yypvt[-1].¬g,
+Nuάg
+); } ;
+
+2003 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-5].
+iv®
+, 3, yypvt[-3].¬g, yypvt[-2].¬g,
+ `make_li¡
+(yypvt[-1].arg)); } ;
+
+2006 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-5].
+iv®
+, 2, yypvt[-3].¬g, yypvt[-1].¬g,
+Nuάg
+); } ;
+
+2009 {
+¬g4
+ =
+yypvt
+[-1].
+¬g
+;
+yyv®
+.¬g =
+ `make_Ý
+(yypvt[-6].
+iv®
+, 4, yypvt[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } ;
+
+2012 {
+¬g4
+ =
+yypvt
+[-2].
+¬g
+;
+¬g5
+ = yypvt[-1].arg;
+
+2013
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-8].
+iv®
+, 5, yypvt[-6].arg, yypvt[-4].arg, yypvt[-3].arg); } ;
+
+2016 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-4].
+iv®
+, 2,
+
+2017
+yypvt
+[-2].
+¬g
+,
+
+2018
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+),
+
+2019
+Nuάg
+); } ;
+
+2022 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_POP
+, 1,
+yypvt
+[-0].¬g,
+Nuάg
+, Nullarg); } ;
+
+2025 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_POP
+, 1,
+yypvt
+[-1].¬g,
+Nuάg
+, Nullarg); } ;
+
+2028 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SHIFT
+, 1,
+yypvt
+[-0].¬g,
+Nuάg
+, Nullarg); } ;
+
+2031 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SHIFT
+, 1,
+yypvt
+[-1].¬g,
+Nuάg
+, Nullarg); } ;
+
+2034 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+O_SHIFT
+, 1,
+
+2035
+ `¡ab2¬g
+(
+A_STAB
+,
+
+2036
+ `¯dd
+(
+ `¡ab’t
+(
+sublše
+ ? "_" : "ARGV",
+TRUE
+))),
+
+2037
+Nuάg
+, Nullarg); } ;
+
+2040 { 
+p
+[]="/\\s+/";
+
+2041 *
+Þd’d
+ =
+buãnd
+;
+
+2042
+ARG
+ *
+Þd¬g
+ =
+yylv®
+.
+¬g
+;
+
+2044
+buãnd
+=
+p
++5;
+
+2045 ()
+ `sÿÅ©
+(
+p
+);
+
+2046
+buãnd
+=
+Þd’d
+;
+
+2047
+yyv®
+.
+¬g
+ =
+ `make_¥l™
+(
+def¡ab
+,
+yylv®
+.¬g,
+Nuάg
+);
+
+2048
+yylv®
+.
+¬g
+ =
+Þd¬g
+; } ;
+
+2051 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_MATCH
+,
+yypvt
+[-2].arg,
+
+2052
+ `make_¥l™
+(
+def¡ab
+,
+yypvt
+[-3].
+¬g
+,yypvt[-1].arg));} ;
+
+2055 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_MATCH
+,
+yypvt
+[-1].arg,
+
+2056
+ `make_¥l™
+(
+def¡ab
+,
+yypvt
+[-2].
+¬g
+,
+Nuάg
+) ); } ;
+
+2059 {
+yyv®
+.
+¬g
+ =
+ `mod_m©ch
+(
+O_MATCH
+,
+
+2060
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+
+2061
+ `make_¥l™
+(
+def¡ab
+,
+yypvt
+[-1].
+¬g
+,
+Nuάg
+) ); } ;
+
+2064 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-4].
+iv®
+, 2,
+
+2065
+yypvt
+[-2].
+¬g
+,
+
+2066
+ `li¡ish
+(
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+)),
+
+2067
+Nuάg
+); } ;
+
+2070 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-3].
+iv®
+, 1,
+
+2071
+ `make_li¡
+(
+yypvt
+[-1].
+¬g
+),
+
+2072
+Nuάg
+,
+
+2073
+Nuάg
+); } ;
+
+2076 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 1,
+ `fixl
+(yypvt[-1].ival,yypvt[-0].arg),
+
+2077
+Nuάg
+, Nullarg)); } ;
+
+2080 {
+yyv®
+.
+¬g
+ =
+ `l
+(
+ `make_Ý
+(
+yypvt
+[-0].
+iv®
+, 1,
+
+2081
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+
+2082
+Nuάg
+, Nullarg)); } ;
+
+2085 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-0].
+iv®
+, 0,
+Nuάg
+, Nullarg, Nullarg); } ;
+
+2088 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-2].
+iv®
+, 0,
+Nuάg
+, Nullarg, Nullarg); } ;
+
+2091 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-2].
+iv®
+, 0,
+Nuάg
+, Nullarg, Nullarg); } ;
+
+2094 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-3].
+iv®
+, 1, yypvt[-1].¬g,
+Nuάg
+, Nullarg); } ;
+
+2097 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-4].
+iv®
+, 2, yypvt[-2].¬g, yypvt[-1].¬g,
+Nuάg
+);
+
+2098 ià(
+yypvt
+[-4].
+iv®
+ =ð
+O_INDEX
+ &&
+yyv®
+.
+¬g
+[2].
+¬g_ty³
+ =ð
+A_SINGLE
+)
+
+2099
+ `fbmcompže
+(
+yyv®
+.
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+,0); } ;
+
+2102 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-4].
+iv®
+, 2, yypvt[-2].¬g, yypvt[-1].¬g,
+Nuάg
+);
+
+2103 ià(
+yypvt
+[-4].
+iv®
+ =ð
+O_INDEX
+ &&
+yyv®
+.
+¬g
+[2].
+¬g_ty³
+ =ð
+A_SINGLE
+)
+
+2104
+ `fbmcompže
+(
+yyv®
+.
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+,0); } ;
+
+2107 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-5].
+iv®
+, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg);
+
+2108 ià(
+yypvt
+[-5].
+iv®
+ =ð
+O_INDEX
+ &&
+yyv®
+.
+¬g
+[2].
+¬g_ty³
+ =ð
+A_SINGLE
+)
+
+2109
+ `fbmcompže
+(
+yyv®
+.
+¬g
+[2].
+¬g_±r
+.
+¬g_¡r
+,0); } ;
+
+2112 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-5].
+iv®
+, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg); } ;
+
+2115 {
+¬g4
+ =
+yypvt
+[-1].
+¬g
+;
+
+2116
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-6].
+iv®
+, 4, yypvt[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } ;
+
+2119 {
+¬g4
+ =
+yypvt
+[-2].
+¬g
+;
+¬g5
+ = yypvt[-1].arg;
+
+2120
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-7].
+iv®
+, 5, yypvt[-5].arg, yypvt[-4].arg, yypvt[-3].arg); } ;
+
+2123 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-3].
+iv®
+, 1,
+
+2124
+yypvt
+[-1].
+¬g
+,
+
+2125
+Nuάg
+,
+
+2126
+Nuάg
+); } ;
+
+2129 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+, 1,
+
+2130
+yypvt
+[-0].
+¬g
+,
+
+2131
+Nuάg
+,
+
+2132
+Nuάg
+); } ;
+
+2135 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-5].
+iv®
+, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg); } ;
+
+2138 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-0].
+iv®
+,2,
+
+2139
+ `¡ab2¬g
+(
+A_WORD
+,
+NuΡab
+),
+
+2140
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+
+2141
+Nuάg
+); } ;
+
+2144 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+,2,
+
+2145
+ `¡ab2¬g
+(
+A_WORD
+,
+NuΡab
+),
+
+2146
+ `mayb–i¡ish
+(
+yypvt
+[-1].
+iv®
+,
+ `make_li¡
+(yypvt[-0].
+¬g
+)),
+
+2147
+Nuάg
+); } ;
+
+2150 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-1].
+iv®
+,2,
+
+2151
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+)),
+
+2152
+ `¡ab2¬g
+(
+A_STAB
+,
+def¡ab
+),
+
+2153
+Nuάg
+); } ;
+
+2156 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-2].
+iv®
+,2,
+
+2157
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-1].
+cv®
+,
+TRUE
+)),
+
+2158
+ `mayb–i¡ish
+(
+yypvt
+[-2].
+iv®
+,
+ `make_li¡
+(yypvt[-0].
+¬g
+)),
+
+2159
+Nuάg
+);
+ `Saãä“
+(
+yypvt
+[-1].
+cv®
+); yypvt[-1].cv® =
+NuÎch
+; } ;
+
+2162 {
+yyv®
+.
+¬g
+ =
+ `make_Ý
+(
+yypvt
+[-2].
+iv®
+,2,
+
+2163
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-1].
+¡abv®
+),
+
+2164
+ `mayb–i¡ish
+(
+yypvt
+[-2].
+iv®
+,
+ `make_li¡
+(yypvt[-0].
+¬g
+)),
+
+2165
+Nuάg
+); } ;
+
+2168 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+));
+
+2169
+ `Saãä“
+(
+yypvt
+[-0].
+cv®
+); yypvt[-0].cv® =
+NuÎch
+;} ;
+
+2172 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_WORD
+,
+ `¯dd
+(
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+)));
+
+2173
+ `Saãä“
+(
+yypvt
+[-0].
+cv®
+); yypvt[-0].cv® =
+NuÎch
+; } ;
+
+2176 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-0].
+¡abv®
+); } ;
+
+2179 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_WORD
+,
+ `hadd
+(
+ `¡ab’t
+(
+yypvt
+[-0].
+cv®
+,
+TRUE
+)));
+
+2180
+ `Saãä“
+(
+yypvt
+[-0].
+cv®
+); yypvt[-0].cv® =
+NuÎch
+; } ;
+
+2183 {
+yyv®
+.
+¬g
+ =
+ `¡ab2¬g
+(
+A_STAB
+,
+yypvt
+[-0].
+¡abv®
+); } ;
+
+2186 { *
+s
+;
+
+2187
+yyv®
+.
+¬g
+ =
+ `Ý_Ãw
+(1);
+
+2188
+yyv®
+.
+¬g
+->
+¬g_ty³
+ =
+O_ITEM
+;
+
+2189
+yyv®
+.
+¬g
+[1].
+¬g_ty³
+ =
+A_SINGLE
+;
+
+2190
+yyv®
+.
+¬g
+[1].
+¬g_±r
+.
+¬g_¡r
+ =
+ `¡r_make
+(
+yypvt
+[-0].
+cv®
+,0);
+
+2191 
+s
+ =
+yypvt
+[-0].
+cv®
+; * &&
+ `i¦ow”
+(*s); s++) ;
+
+2192 ià(
+dow¬n
+ && !*
+s
+)
+
+2193
+ `w¬n
+(
+
+2195
+yypvt
+[-0].
+cv®
+ );
+
+2198 
+yy¡ack
+;
+
+2199
+ }
+}
+
+ @usersub.c
+
+13 
+ ~"EXTERN.h
+"
+
+14 
+ ~"³¾.h
+"
+
+16
+ $u£rš™
+()
+
+19
+ }
+}
+
+30 #ifdeà
+CRYPTSCRIPT
+
+
+32 
+ ~<sigÇl.h
+>
+
+33 #ifdeà
+I_VFORK
+
+
+34 
+ ~<vfÜk.h
+>
+
+37 
+ #CRYPT_MAGIC_1
+ 0xfb
+
+ )
+
+38 
+ #CRYPT_MAGIC_2
+ 0xf1
+
+ )
+
+40
+ $üy±fž‹r
+fž
+ )
+
+41
+FILE
+ *
+fž
+;
+
+43 
+ch
+;
+
+45  (
+ch
+ =
+ `g‘c
+fž
+ )è!ð
+EOF
+ ) {
+
+46
+ `putch¬
+Ð(
+ch
+ ^ 0x80) );
+
+48
+ }
+}
+
+50 #iâdeà
+MSDOS
+
+
+51 
+FILE
+ *
+ gÏ¡pefže
+;
+
+52 
+ gp•id
+;
+
+54 #ifdeà
+VOIDSIG
+
+
+55 
+ #VOID
+ 
+
+ )
+
+57 
+ #VOID
+ 
+
+ )
+
+60
+FILE
+ *
+
+61
+ $mypfiÝ’
+(
+fž
+,
+func
+)
+
+62
+FILE
+ *
+fž
+;
+
+63
+ `VOID
+ (*
+func
+)();
+
+65 
+p
+[2];
+
+66
+STR
+ *
+¡r
+;
+
+68 ià(
+ `pe
+(
+p
+) < 0) {
+
+69
+ `fþo£
+fž
+ );
+
+70
+ `çl
+("Can't get…ipe for decrypt");
+
+74
+ `fæush
+(
+¡dout
+);
+
+75
+ `fæush
+(
+¡d”r
+);
+
+77 (
+p•id
+ =
+ `fÜk
+()) < 0) {
+
+78 ià(
+Ӽo
+ !ð
+EAGAIN
+) {
+
+79
+ `þo£
+(
+p
+[0]);
+
+80
+ `þo£
+(
+p
+[1]);
+
+81
+ `fþo£
+fž
+ );
+
+82
+ `çl
+("Can't fork for decrypt");
+
+84
+ `¦“p
+(5);
+
+86 ià(
+p•id
+ == 0) {
+
+87
+ `þo£
+(
+p
+[0]);
+
+88 ià(
+p
+[1] != 1) {
+
+89
+ `dup2
+(
+p
+[1], 1);
+
+90
+ `þo£
+(
+p
+[1]);
+
+92 (*
+func
+)(
+fž
+);
+
+93
+ `fæush
+(
+¡dout
+);
+
+94
+ `fæush
+(
+¡d”r
+);
+
+95
+ `_ex™
+(0);
+
+97
+ `þo£
+(
+p
+[1]);
+
+98
+ `fþo£
+(
+fž
+);
+
+99
+¡r
+ =
+ `aãtch
+(
+fdpid
+,
+p
+[0],
+TRUE
+);
+
+100
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+ =
+p•id
+;
+
+101 
+ `fdÝ’
+(
+p
+[0], "r");
+
+102
+ }
+}
+
+104
+ $üy±sw™ch
+()
+
+106 
+ch
+;
+
+107 #ifdeà
+STDSTDIO
+
+
+109 ià(
+rså
+->
+_út
+ > 0 && (*rså->
+_±r
+ & 0xffè!ð
+CRYPT_MAGIC_1
+)
+
+112
+ch
+ =
+ `g‘c
+(
+rså
+);
+
+113 ià(
+ch
+ =ð
+CRYPT_MAGIC_1
+) {
+
+114 ià(
+ `g‘c
+(
+rså
+è=ð
+CRYPT_MAGIC_2
+) {
+
+115
+rså
+ =
+ `mypfiÝ’
+Ðrså,
+üy±fž‹r
+ );
+
+116
+´•roûss
+ = 1;
+
+119
+ `çl
+( "badƒncryption format" );
+
+122
+ `ung‘c
+(
+ch
+,
+rså
+);
+
+123
+ }
+}
+
+125
+FILE
+ *
+
+126
+ $üy±Ý’
+(
+cmd
+)
+
+127 *
+cmd
+;
+
+129
+FILE
+ *
+fž
+ =
+ `fÝ’
+cmd
+, "r" );
+
+131
+Ï¡pefže
+ =
+NuÎå
+;
+
+132
+p•id
+ = 0;
+
+134 ifÐ
+fž
+ ) {
+
+135 
+ch
+ =
+ `g‘c
+fž
+ );
+
+136 
+lšes
+ = 0;
+
+137 
+ch¬s
+ = 0;
+
+144 
+ch
+ !ð
+CRYPT_MAGIC_1
+ && ch !ð
+EOF
+ &&
+lšes
+ < 5 &&
+ch¬s
+ < 300 ) {
+
+145 ifÐ
+ch
+ == '\n' )
+
+146 ++
+lšes
+;
+
+147
+ch
+ =
+ `g‘c
+fž
+ );
+
+148 ++
+ch¬s
+;
+
+151 ifÐ
+ch
+ =ð
+CRYPT_MAGIC_1
+ ) {
+
+152 ifÐ(
+ch
+ =
+ `g‘c
+fž
+ ) ) =ð
+CRYPT_MAGIC_2
+ ) {
+
+153 ifÐ
+³¾db
+ )
+ `çl
+("can't debug‡nƒncrypted script");
+
+155
+fž
+ =
+ `mypfiÝ’
+Ðfž,
+üy±fž‹r
+ );
+
+156 Ð
+Ï¡pefže
+ =
+fž
+ );
+
+159
+ `çl
+( "badƒncryption format" );
+
+163
+ `»wšd
+fž
+ );
+
+166 Ð
+fž
+ );
+
+167
+ }
+}
+
+169
+VOID
+
+
+170
+ $üy±þo£
+(
+fž
+)
+
+171
+FILE
+ *
+fž
+;
+
+173 ifÐ
+fž
+ =ð
+NuÎå
+ )
+
+176 ifÐ
+fž
+ =ð
+Ï¡pefže
+ )
+
+177
+ `mypþo£
+fž
+ );
+
+179
+ `fþo£
+fž
+ );
+
+180
+ }
+}
+
+ @util.c
+
+17 
+ ~"EXTERN.h
+"
+
+18 
+ ~"³¾.h
+"
+
+20 #ià!
+defšed
+(
+NSIG
+è|| defšed(
+M_UNIX
+è|| defšed(
+M_XENIX
+)
+
+21 
+ ~<sigÇl.h
+>
+
+24 #ifdeà
+I_VFORK
+
+
+25 
+ ~<vfÜk.h
+>
+
+28 #ifdeà
+I_VARARGS
+
+
+29 
+ ~<v¬¬gs.h
+>
+
+32 #ifdeà
+I_FCNTL
+
+
+33 
+ ~<fúŽ.h
+>
+
+35 #ifdeà
+I_SYS_FILE
+
+
+36 
+ ~<sys/fže.h
+>
+
+39 
+ #FLUSH
+
+
+ )
+
+41 
+ gnomem
+[] = "Out of memory!\n";
+
+45 #ifdeà
+DEBUGGING
+
+
+46 
+ gª
+ = 0;
+
+55
+ $§ãm®loc
+(
+size
+)
+
+56 #ifdeà
+MSDOS
+
+
+57 
+size
+;
+
+59
+MEM_SIZE
+
+size
+;
+
+62 *
+±r
+;
+
+63 #iâdeà
+__STDC__
+
+
+64 #ifdeà
+BWGC
+
+
+65 *
+ `gc_m®loc
+();
+
+67 *
+ `m®loc
+();
+
+71 #ifdeà
+MSDOS
+
+
+72 ià(
+size
+ > 0xffff) {
+
+73
+ `årštf
+(
+¡d”r
+, "AÎoÿtiÚoØÏrge: %lx\n",
+size
+FLUSH
+;
+
+74
+ `ex™
+(1);
+
+77 #ifdeà
+DEBUGGING
+
+
+78 ià(()
+size
+ < 0)
+
+79
+ `çl
+("panic: malloc");
+
+81 #ifdeà
+BWGC
+
+
+82
+±r
+ =
+ `gc_m®loc
+(
+size
+?size:1);
+
+84
+±r
+ =
+ `m®loc
+(
+size
+?size:1);
+
+86 #ifdeà
+DEBUGGING
+
+
+87 #iâdeà
+I286
+
+
+88 ià(
+debug
+ & 128)
+
+89
+ `årštf
+(
+¡d”r
+,"0x%x: (%05dèm®loø%d by‹s\n",
+±r
+,
+++,
+size
+);
+
+91 ià(
+debug
+ & 128)
+
+92
+ `årštf
+(
+¡d”r
+,"0x%lx: (%05dèm®loø%d by‹s\n",
+±r
+,
+++,
+size
+);
+
+95 ià(
+±r
+ !ð
+NuÎch
+)
+
+96 
+±r
+;
+
+98
+ `åuts
+(
+nomem
+,
+¡d”r
+FLUSH
+;
+
+99
+ `ex™
+(1);
+
+102 #ifdeà
+lšt
+
+
+103 
+±r
+;
+
+105
+ }
+}
+
+110
+ $§ã»®loc
+(
+wh”e
+,
+size
+)
+
+111 *
+wh”e
+;
+
+112 #iâdeà
+MSDOS
+
+
+113
+MEM_SIZE
+
+size
+;
+
+115 
+size
+;
+
+118 *
+±r
+;
+
+119 #iâdeà
+__STDC__
+
+
+120 #ifdeà
+BWGC
+
+
+121 *
+ `gc_»®loc
+();
+
+123 *
+ `»®loc
+();
+
+127 #ifdeà
+MSDOS
+
+
+128 ià(
+size
+ > 0xffff) {
+
+129
+ `årštf
+(
+¡d”r
+, "R—ÎoÿtiÚoØÏrge: %lx\n",
+size
+FLUSH
+;
+
+130
+ `ex™
+(1);
+
+133 ià(!
+wh”e
+)
+
+134
+ `çl
+("Null„ealloc");
+
+135 #ifdeà
+DEBUGGING
+
+
+136 ià(()
+size
+ < 0)
+
+137
+ `çl
+("panic:„ealloc");
+
+139 #ifdeà
+BWGC
+
+
+140
+±r
+ =
+ `gc_»®loc
+(
+wh”e
+,
+size
+?size:1);
+
+142
+±r
+ =
+ `»®loc
+(
+wh”e
+,
+size
+?size:1);
+
+144 #ifdeà
+DEBUGGING
+
+
+145 #iâdeà
+I286
+
+
+146 ià(
+debug
+ & 128) {
+
+147
+ `årštf
+(
+¡d”r
+,"0x%x: (%05dèrä“\n",
+wh”e
+,
+++);
+
+148
+ `årštf
+(
+¡d”r
+,"0x%x: (%05dè»®loø%d by‹s\n",
+±r
+,
+++,
+size
+);
+
+151 ià(
+debug
+ & 128) {
+
+152
+ `årštf
+(
+¡d”r
+,"0x%lx: (%05dèrä“\n",
+wh”e
+,
+++);
+
+153
+ `årštf
+(
+¡d”r
+,"0x%lx: (%05dè»®loø%d by‹s\n",
+±r
+,
+++,
+size
+);
+
+157 ià(
+±r
+ !ð
+NuÎch
+)
+
+158 
+±r
+;
+
+160
+ `åuts
+(
+nomem
+,
+¡d”r
+FLUSH
+;
+
+161
+ `ex™
+(1);
+
+164 #ifdeà
+lšt
+
+
+165 
+±r
+;
+
+167
+ }
+}
+
+172
+ $§ãä“
+(
+wh”e
+)
+
+173 *
+wh”e
+;
+
+175 #ifdeà
+DEBUGGING
+
+
+176 #iâdeà
+I286
+
+
+177 ià(
+debug
+ & 128)
+
+178
+ `årštf
+(
+¡d”r
+,"0x%x: (%05dèä“\n",
+wh”e
+,
+++);
+
+180 ià(
+debug
+ & 128)
+
+181
+ `årštf
+(
+¡d”r
+,"0x%lx: (%05dèä“\n",
+wh”e
+,
+++);
+
+184 #iâdeà
+IGNOREFREE
+
+
+185 ià(
+wh”e
+) {
+
+186
+ `ä“
+(
+wh”e
+);
+
+189
+ }
+}
+
+191 #ifdeà
+LEAKTEST
+
+
+193 
+ #ALIGN
+ ()
+
+ )
+
+196
+ $§ãxm®loc
+(
+x
+,
+size
+)
+
+197 
+x
+;
+
+198
+MEM_SIZE
+
+size
+;
+
+200 *
+wh”e
+;
+
+202
+wh”e
+ =
+ `§ãm®loc
+(
+size
+ +
+ALIGN
+);
+
+203
+xcouÁ
+[
+x
+]++;
+
+204
+wh”e
+[0] =
+x
+ % 100;
+
+205
+wh”e
+[1] =
+x
+ / 100;
+
+206 
+wh”e
+ +
+ALIGN
+;
+
+207
+ }
+}
+
+210
+ $§ãx»®loc
+(
+wh”e
+,
+size
+)
+
+211 *
+wh”e
+;
+
+212
+MEM_SIZE
+
+size
+;
+
+214 
+ `§ã»®loc
+(
+wh”e
+ -
+ALIGN
+,
+size
+ + ALIGN) + ALIGN;
+
+215
+ }
+}
+
+218
+ $§ãxä“
+(
+wh”e
+)
+
+219 *
+wh”e
+;
+
+221 
+x
+;
+
+223 ià(!
+wh”e
+)
+
+225
+wh”e
+ -ð
+ALIGN
+;
+
+226
+x
+ =
+wh”e
+[0] + 100 * where[1];
+
+227
+xcouÁ
+[
+x
+]--;
+
+228
+ `§ãä“
+(
+wh”e
+);
+
+229
+ }
+}
+
+231
+ $x¡©
+()
+
+233 
+i
+;
+
+235 
+i
+ = 0; i <
+MAXXCOUNT
+; i++) {
+
+236 ià(
+xcouÁ
+[
+i
+] !ð
+Ï¡xcouÁ
+[i]) {
+
+237
+ `årštf
+(
+¡d”r
+,"%2d %2d\t%ld\n",
+i
+ / 100, i % 100,
+xcouÁ
+[i]);
+
+238
+Ï¡xcouÁ
+[
+i
+] =
+xcouÁ
+[i];
+
+241
+ }
+}
+
+248
+ $ýytžl
+(
+to
+,
+äom
+,
+äom’d
+,
+d–im
+,
+»Ž’
+)
+
+249 *
+to
+;
+
+250 *
+äom
+;
+
+251 *
+äom’d
+;
+
+252 
+d–im
+;
+
+253 *
+»Ž’
+;
+
+255 *
+Üigto
+ =
+to
+;
+
+257 ;
+äom
+ <
+äom’d
+; from++,
+to
+++) {
+
+258 ià(*
+äom
+ == '\\') {
+
+259 ià(
+äom
+[1] =ð
+d–im
+)
+
+260
+äom
+++;
+
+261 ià(
+äom
+[1] == '\\')
+
+262 *
+to
+++ = *
+äom
+++;
+
+264 ià(*
+äom
+ =ð
+d–im
+)
+
+266 *
+to
+ = *
+äom
+;
+
+268 *
+to
+ = '\0';
+
+269 *
+»Ž’
+ =
+to
+ -
+Üigto
+;
+
+270 
+äom
+;
+
+271
+ }
+}
+
+277
+ $š¡r
+(
+big
+,
+l™Že
+)
+
+278 *
+big
+;
+
+279 *
+l™Že
+;
+
+281 *
+s
+, *
+x
+;
+
+282 
+fœ¡
+;
+
+284 ià(!
+l™Že
+)
+
+285 
+big
+;
+
+286
+fœ¡
+ = *
+l™Že
+++;
+
+287 ià(!
+fœ¡
+)
+
+288 
+big
+;
+
+289 *
+big
+) {
+
+290 ià(*
+big
+++ !ð
+fœ¡
+)
+
+292 
+x
+=
+big
+,
+s
+=
+l™Že
+; *s; ) {
+
+293 ià(!*
+x
+)
+
+294 
+NuÎch
+;
+
+295 ià(*
+s
+++ !ð*
+x
+++) {
+
+296
+s
+--;
+
+300 ià(!*
+s
+)
+
+301 
+big
+-1;
+
+303 
+NuÎch
+;
+
+304
+ }
+}
+
+309
+ $nš¡r
+(
+big
+,
+big’d
+,
+l™Že
+,
+Ënd
+)
+
+310 *
+big
+;
+
+311 *
+big’d
+;
+
+312 *
+l™Že
+;
+
+313 *
+Ënd
+;
+
+315 *
+s
+, *
+x
+;
+
+316 
+fœ¡
+ = *
+l™Že
+;
+
+317 *
+l™Ž“nd
+ =
+Ënd
+;
+
+319 ià(!
+fœ¡
+ &&
+l™Že
+ >
+l™Ž“nd
+)
+
+320 
+big
+;
+
+321
+big’d
+ -ð
+l™Ž“nd
+ -
+l™Že
+++;
+
+322 
+big
+ <ð
+big’d
+) {
+
+323 ià(*
+big
+++ !ð
+fœ¡
+)
+
+325 
+x
+=
+big
+,
+s
+=
+l™Že
+; s <
+l™Ž“nd
+; ) {
+
+326 ià(*
+s
+++ !ð*
+x
+++) {
+
+327
+s
+--;
+
+331 ià(
+s
+ >ð
+l™Ž“nd
+)
+
+332 
+big
+-1;
+
+334 
+NuÎch
+;
+
+335
+ }
+}
+
+340
+ $ºš¡r
+(
+big
+,
+big’d
+,
+l™Že
+,
+Ënd
+)
+
+341 *
+big
+;
+
+342 *
+big’d
+;
+
+343 *
+l™Že
+;
+
+344 *
+Ënd
+;
+
+346 *
+bigbeg
+;
+
+347 *
+s
+, *
+x
+;
+
+348 
+fœ¡
+ = *
+l™Že
+;
+
+349 *
+l™Ž“nd
+ =
+Ënd
+;
+
+351 ià(!
+fœ¡
+ &&
+l™Že
+ >
+l™Ž“nd
+)
+
+352 
+big’d
+;
+
+353
+bigbeg
+ =
+big
+;
+
+354
+big
+ =
+big’d
+ - (
+l™Ž“nd
+ -
+l™Že
+++);
+
+355 
+big
+ >ð
+bigbeg
+) {
+
+356 ià(*
+big
+-- !ð
+fœ¡
+)
+
+358 
+x
+=
+big
++2,
+s
+=
+l™Že
+; s <
+l™Ž“nd
+; ) {
+
+359 ià(*
+s
+++ !ð*
+x
+++) {
+
+360
+s
+--;
+
+364 ià(
+s
+ >ð
+l™Ž“nd
+)
+
+365 
+big
++1;
+
+367 
+NuÎch
+;
+
+368
+ }
+}
+
+370 
+ gfÞd
+[] = {
+
+405 
+ gäeq
+[] = {
+
+441
+ $fbmcompže
+(
+¡r
+,
+iæag
+)
+
+442
+STR
+ *
+¡r
+;
+
+443 
+iæag
+;
+
+445 *
+s
+;
+
+446 *
+bË
+;
+
+447 
+i
+;
+
+448 
+Ën
+ =
+¡r
+->
+¡r_cur
+;
+
+449 
+¿»¡
+ = 0;
+
+450 
+äequ’cy
+ = 256;
+
+452
+ `SŒ_Grow
+(
+¡r
+,
+Ën
++258);
+
+453 #iâdeà
+lšt
+
+
+454
+bË
+ = (*)(
+¡r
+->
+¡r_±r
+ +
+Ën
+ + 1);
+
+456
+bË
+ =
+ `NuÎ
+(*);
+
+458
+s
+ =
+bË
+ - 2;
+
+459 
+i
+ = 0; i < 256; i++) {
+
+460
+bË
+[
+i
+] =
+Ën
+;
+
+462
+i
+ = 0;
+
+463 #iâdeà
+lšt
+
+
+464 
+s
+ >ð(*)(
+¡r
+->
+¡r_±r
+))
+
+467 ià(
+bË
+[*
+s
+] =ð
+Ën
+) {
+
+468 #iâdeà
+pdp11
+
+
+469 ià(
+iæag
+)
+
+470
+bË
+[*
+s
+] =abË[
+fÞd
+[*s]] =
+i
+;
+
+472 ià(
+iæag
+) {
+
+473 
+j
+;
+
+474
+j
+ =
+fÞd
+[*
+s
+];
+
+475
+bË
+[
+j
+] =
+i
+;
+
+476
+bË
+[*
+s
+] =
+i
+;
+
+480
+bË
+[*
+s
+] =
+i
+;
+
+482
+s
+--,
+i
+++;
+
+484
+¡r
+->
+¡r_pok
+ |ð
+SP_FBM
+;
+
+486 #iâdeà
+lšt
+
+
+487
+s
+ = (*)(
+¡r
+->
+¡r_±r
+);
+
+489
+s
+ =
+ `NuÎ
+(*);
+
+491 ià(
+iæag
+) {
+
+492 
+tmp
+,
+fÞdtmp
+;
+
+493
+¡r
+->
+¡r_pok
+ |ð
+SP_CASEFOLD
+;
+
+494 
+i
+ = 0; i <
+Ën
+; i++) {
+
+495
+tmp
+=
+äeq
+[
+s
+[
+i
+]];
+
+496
+fÞdtmp
+=
+äeq
+[
+fÞd
+[
+s
+[
+i
+]]];
+
+497 ià(
+tmp
+ <
+äequ’cy
+ &&
+fÞdtmp
+ < frequency) {
+
+498
+¿»¡
+ =
+i
+;
+
+500
+äequ’cy
+ = (
+tmp
+ >
+fÞdtmp
+) ?mp : foldtmp;
+
+505 
+i
+ = 0; i <
+Ën
+; i++) {
+
+506 ià(
+äeq
+[
+s
+[
+i
+]] <
+äequ’cy
+) {
+
+507
+¿»¡
+ =
+i
+;
+
+508
+äequ’cy
+ =
+äeq
+[
+s
+[
+i
+]];
+
+512
+¡r
+->
+¡r_¿»
+ =
+s
+[
+¿»¡
+];
+
+513
+¡r
+->
+¡r_¡©e
+ =
+¿»¡
+;
+
+514 #ifdeà
+DEBUGGING
+
+
+515 ià(
+debug
+ & 512)
+
+516
+ `årštf
+(
+¡d”r
+,"¿»¡ ch¬ %ø© %d\n",
+¡r
+->
+¡r_¿»
+, sŒ->
+¡r_¡©e
+);
+
+518
+ }
+}
+
+521
+ $fbmš¡r
+(
+big
+,
+big’d
+,
+l™Že¡r
+)
+
+522 *
+big
+;
+
+523 *
+big’d
+;
+
+524
+STR
+ *
+l™Že¡r
+;
+
+526 *
+s
+;
+
+527 
+tmp
+;
+
+528 
+l™Ž–’
+;
+
+529 *
+l™Že
+;
+
+530 *
+bË
+;
+
+531 *
+Þds
+;
+
+532 *
+Þdl™Že
+;
+
+534 #iâdeà
+lšt
+
+
+535 ià(!(
+l™Že¡r
+->
+¡r_pok
+ &
+SP_FBM
+))
+
+536 
+ `nš¡r
+((*)
+big
+,(*)
+big’d
+,
+
+537
+l™Že¡r
+->
+¡r_±r
+,†™Že¡r->¡r_±¸+†™Že¡r->
+¡r_cur
+);
+
+540
+l™Ž–’
+ =
+l™Že¡r
+->
+¡r_cur
+;
+
+541 #iâdeà
+lšt
+
+
+542 ià(
+l™Že¡r
+->
+¡r_pok
+ &
+SP_TAIL
+ && !
+muÉžše
+) {
+
+543 ià(
+l™Ž–’
+ >
+big’d
+ -
+big
+)
+
+544 
+NuÎch
+;
+
+545
+l™Že
+ = (*)
+l™Že¡r
+->
+¡r_±r
+;
+
+546 ià(
+l™Že¡r
+->
+¡r_pok
+ &
+SP_CASEFOLD
+) {
+
+547
+big
+ =
+big’d
+ -
+l™Ž–’
+;
+
+548 ià(
+big’d
+[-1] =ð'\n' &&
+l™Že
+[
+l™Ž–’
+-1] != '\n')
+
+549
+big
+--;
+
+552
+s
+ =
+big’d
+ -
+l™Ž–’
+;
+
+553 ià(*
+s
+ =ð*
+l™Že
+ &&
+ `bcmp
+(s,l™Že,
+l™Ž–’
+)==0)
+
+554  (*)
+s
+;
+
+555 ià(
+big’d
+[-1] =ð'\n' &&
+l™Že
+[
+l™Ž–’
+-1] != '\n'
+
+556 &&
+s
+ >
+big
+) {
+
+557
+s
+--;
+
+558 ià(*
+s
+ =ð*
+l™Že
+ &&
+ `bcmp
+(s,l™Že,
+l™Ž–’
+)==0)
+
+559  (*)
+s
+;
+
+561 
+NuÎch
+;
+
+564
+bË
+ = (*)(
+l™Že¡r
+->
+¡r_±r
+ +
+l™Ž–’
+ + 1);
+
+566
+bË
+ =
+ `NuÎ
+(*);
+
+568 ià(--
+l™Ž–’
+ >ð
+big’d
+ -
+big
+)
+
+569 
+NuÎch
+;
+
+570
+s
+ =
+big
+ +
+l™Ž–’
+;
+
+571
+Þdl™Že
+ =
+l™Že
+ =
+bË
+ - 2;
+
+572 ià(
+l™Že¡r
+->
+¡r_pok
+ &
+SP_CASEFOLD
+) {
+
+573 ià(
+s
+ <
+big’d
+) {
+
+574
+tÝ1
+:
+
+575 ià(
+tmp
+ =
+bË
+[*
+s
+]) {
+
+576 #ifdeà
+POINTERRIGOR
+
+
+577 ià(
+big’d
+ -
+s
+ >
+tmp
+) {
+
+578
+s
+ +ð
+tmp
+;
+
+579 
+tÝ1
+;
+
+582 ià((
+s
+ +ð
+tmp
+è<
+big’d
+)
+
+583 
+tÝ1
+;
+
+585 
+NuÎch
+;
+
+588
+tmp
+ =
+l™Ž–’
+;
+
+589
+Þds
+ =
+s
+;
+
+590 
+tmp
+--) {
+
+591 ià(*--
+s
+ =ð*--
+l™Že
+ ||
+fÞd
+[*s] == *little)
+
+593
+s
+ =
+Þds
+ + 1;
+
+594
+l™Že
+ =
+Þdl™Že
+;
+
+595 ià(
+s
+ <
+big’d
+)
+
+596 
+tÝ1
+;
+
+597 
+NuÎch
+;
+
+599 #iâdeà
+lšt
+
+
+600  (*)
+s
+;
+
+606 ià(
+s
+ <
+big’d
+) {
+
+607
+tÝ2
+:
+
+608 ià(
+tmp
+ =
+bË
+[*
+s
+]) {
+
+609 #ifdeà
+POINTERRIGOR
+
+
+610 ià(
+big’d
+ -
+s
+ >
+tmp
+) {
+
+611
+s
+ +ð
+tmp
+;
+
+612 
+tÝ2
+;
+
+615 ià((
+s
+ +ð
+tmp
+è<
+big’d
+)
+
+616 
+tÝ2
+;
+
+618 
+NuÎch
+;
+
+621
+tmp
+ =
+l™Ž–’
+;
+
+622
+Þds
+ =
+s
+;
+
+623 
+tmp
+--) {
+
+624 ià(*--
+s
+ =ð*--
+l™Že
+)
+
+626
+s
+ =
+Þds
+ + 1;
+
+627
+l™Že
+ =
+Þdl™Že
+;
+
+628 ià(
+s
+ <
+big’d
+)
+
+629 
+tÝ2
+;
+
+630 
+NuÎch
+;
+
+632 #iâdeà
+lšt
+
+
+633  (*)
+s
+;
+
+638 
+NuÎch
+;
+
+639
+ }
+}
+
+642
+ $sü—mš¡r
+(
+big¡r
+,
+l™Že¡r
+)
+
+643
+STR
+ *
+big¡r
+;
+
+644
+STR
+ *
+l™Že¡r
+;
+
+646 *
+s
+, *
+x
+;
+
+647 *
+big
+;
+
+648 
+pos
+;
+
+649 
+´evious
+;
+
+650 
+fœ¡
+;
+
+651 *
+l™Že
+;
+
+652 *
+big’d
+;
+
+653 *
+l™Ž“nd
+;
+
+655 ià((
+pos
+ =
+sü—mfœ¡
+[
+l™Že¡r
+->
+¡r_¿»
+]) < 0)
+
+656 
+NuÎch
+;
+
+657 #iâdeà
+lšt
+
+
+658
+l™Že
+ = (*)(
+l™Že¡r
+->
+¡r_±r
+);
+
+660
+l™Že
+ =
+ `NuÎ
+(*);
+
+662
+l™Ž“nd
+ =
+l™Že
+ +
+l™Že¡r
+->
+¡r_cur
+;
+
+663
+fœ¡
+ = *
+l™Že
+++;
+
+664
+´evious
+ =
+l™Že¡r
+->
+¡r_¡©e
+;
+
+665 #iâdeà
+lšt
+
+
+666
+big
+ = (*)(
+big¡r
+->
+¡r_±r
+);
+
+668
+big
+ =
+ `NuÎ
+(*);
+
+670
+big’d
+ =
+big
+ +
+big¡r
+->
+¡r_cur
+;
+
+671
+big
+ -ð
+´evious
+;
+
+672 
+pos
+ <
+´evious
+) {
+
+673 #iâdeà
+lšt
+
+
+674 ià(!(
+pos
+ +ð
+sü—mÃxt
+[pos]))
+
+676 
+NuÎch
+;
+
+678 ià(
+l™Že¡r
+->
+¡r_pok
+ &
+SP_CASEFOLD
+) {
+
+680 ià(
+big
+[
+pos
+] !ð
+fœ¡
+ && big[pos] !ð
+fÞd
+[first])
+
+682 
+x
+=
+big
++
+pos
++1,
+s
+=
+l™Že
+; s <
+l™Ž“nd
+; ) {
+
+683 ià(
+x
+ >ð
+big’d
+)
+
+684 
+NuÎch
+;
+
+685 ià(*
+s
+++ !ð*
+x
+++ &&
+fÞd
+[*(s-1)] != *(x-1)) {
+
+686
+s
+--;
+
+690 ià(
+s
+ =ð
+l™Ž“nd
+)
+
+691 #iâdeà
+lšt
+
+
+692  (*)(
+big
++
+pos
+);
+
+694 
+NuÎch
+;
+
+697 #iâdeà
+lšt
+
+
+698
+pos
+ +ð
+sü—mÃxt
+[pos]
+
+700
+pos
+ +ð
+sü—mÃxt
+[0]
+
+706 ià(
+big
+[
+pos
+] !ð
+fœ¡
+)
+
+708 
+x
+=
+big
++
+pos
++1,
+s
+=
+l™Že
+; s <
+l™Ž“nd
+; ) {
+
+709 ià(
+x
+ >ð
+big’d
+)
+
+710 
+NuÎch
+;
+
+711 ià(*
+s
+++ !ð*
+x
+++) {
+
+712
+s
+--;
+
+716 ià(
+s
+ =ð
+l™Ž“nd
+)
+
+717 #iâdeà
+lšt
+
+
+718  (*)(
+big
++
+pos
+);
+
+720 
+NuÎch
+;
+
+723 #iâdeà
+lšt
+
+
+724
+pos
+ +ð
+sü—mÃxt
+[pos]
+
+726
+pos
+ +ð
+sü—mÃxt
+[0]
+
+730 
+NuÎch
+;
+
+731
+ }
+}
+
+736
+ $§ve¡r
+(
+¡r
+)
+
+737 *
+¡r
+;
+
+739 *
+Ãwaddr
+;
+
+741
+ `New
+(902,
+Ãwaddr
+,
+ `¡¾’
+(
+¡r
+)+1,);
+
+742 ()
+ `¡rýy
+(
+Ãwaddr
+,
+¡r
+);
+
+743 
+Ãwaddr
+;
+
+744
+ }
+}
+
+749
+ $n§ve¡r
+(
+¡r
+,
+Ën
+)
+
+750 *
+¡r
+;
+
+751 
+Ën
+;
+
+753 *
+Ãwaddr
+;
+
+755
+ `New
+(903,
+Ãwaddr
+,
+Ën
++1,);
+
+756 ()
+ `bcÝy
+(
+¡r
+,
+Ãwaddr
+,
+Ën
+);
+
+757
+Ãwaddr
+[
+Ën
+] = '\0';
+
+758 
+Ãwaddr
+;
+
+759
+ }
+}
+
+764
+ $grow¡r
+(
+¡½Œ
+,
+cu¾’
+,
+ÃwËn
+)
+
+765 **
+¡½Œ
+;
+
+766 *
+cu¾’
+;
+
+767 
+ÃwËn
+;
+
+769 ià(
+ÃwËn
+ > *
+cu¾’
+) {
+
+770 ià(*
+cu¾’
+)
+
+771
+ `R’ew
+(*
+¡½Œ
+,
+ÃwËn
+,);
+
+773
+ `New
+(905,*
+¡½Œ
+,
+ÃwËn
+,);
+
+774 *
+cu¾’
+ =
+ÃwËn
+;
+
+776
+ }
+}
+
+778 #iâdeà
+I_VARARGS
+
+
+780
+ $mess
+(
+·t
+,
+a1
+,
+a2
+,
+a3
+,
+a4
+)
+
+781 *
+·t
+;
+
+782 
+a1
+,
+a2
+,
+a3
+,
+a4
+;
+
+784 *
+s
+;
+
+786
+s
+ =
+buf
+;
+
+787 ()
+ `¥rštf
+(
+s
+,
+·t
+,
+a1
+,
+a2
+,
+a3
+,
+a4
+);
+
+788
+s
+ +ð
+ `¡¾’
+(s);
+
+789 ià(
+s
+[-1] != '\n') {
+
+790 ià(
+curcmd
+->
+c_lše
+) {
+
+791 ()
+ `¥rštf
+(
+s
+,"‡t %s†ine %ld",
+
+792
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+, ()curcmd->
+c_lše
+);
+
+793
+s
+ +ð
+ `¡¾’
+(s);
+
+795 ià(
+Ï¡_š_¡ab
+ &&
+
+796
+ `¡ab_io
+(
+Ï¡_š_¡ab
+) &&
+
+797
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+lšes
+ ) {
+
+798 ()
+ `¥rštf
+(
+s
+,", <%s>†ine %ld",
+
+799
+Ï¡_š_¡ab
+ =ð
+¬gv¡ab
+ ? "" :
+ `¡ab_Çme
+(last_in_stab),
+
+800 ()
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+lšes
+);
+
+801
+s
+ +ð
+ `¡¾’
+(s);
+
+803 ()
+ `¡rýy
+(
+s
+,".\n");
+
+805
+ }
+}
+
+808
+ $çl
+(
+·t
+,
+a1
+,
+a2
+,
+a3
+,
+a4
+)
+
+809 *
+·t
+;
+
+810 
+a1
+,
+a2
+,
+a3
+,
+a4
+;
+
+812
+FILE
+ *
+e_å
+;
+
+813
+*
+e_tm²ame
+;
+
+814 *
+tmps
+;
+
+816
+ `mess
+(
+·t
+,
+a1
+,
+a2
+,
+a3
+,
+a4
+);
+
+817 ià(
+š_ev®
+) {
+
+818
+ `¡r_£t
+(
+ `¡ab_v®
+(
+ `¡ab’t
+("@",
+TRUE
+)),
+buf
+);
+
+819
+tmps
+ = "_EVAL_";
+
+820 
+loÝ_±r
+ >ð0 && (!
+loÝ_¡ack
+[loÝ_±r].
+loÝ_Ïb–
+ ||
+
+821
+ `¡rNE
+(
+tmps
+,
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+) )) {
+
+822 #ifdeà
+DEBUGGING
+
+
+823 ià(
+debug
+ & 4) {
+
+824
+ `deb
+("(Skpšg†ab– #%d %s)\n",
+loÝ_±r
+,
+
+825
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+);
+
+828
+loÝ_±r
+--;
+
+830 #ifdeà
+DEBUGGING
+
+
+831 ià(
+debug
+ & 4) {
+
+832
+ `deb
+("(Found†ab– #%d %s)\n",
+loÝ_±r
+,
+
+833
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+);
+
+836 ià(
+loÝ_±r
+ < 0) {
+
+837
+š_ev®
+ = 0;
+
+838
+ `çl
+("Bad†ab–: %s",
+tmps
+);
+
+840
+ `lÚgjmp
+(
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_’v
+, 1);
+
+842
+ `åuts
+(
+buf
+,
+¡d”r
+);
+
+843 ()
+ `fæush
+(
+¡d”r
+);
+
+844 ià(
+e_å
+)
+
+845 ()
+ `UNLINK
+(
+e_tm²ame
+);
+
+846
+¡©usv®ue
+ >>= 8;
+
+847
+ `ex™
+(()((
+Ӽo
+&255)?Ӽo:((
+¡©usv®ue
+&255)?statusvalue:255)));
+
+848
+ }
+}
+
+851
+ $w¬n
+(
+·t
+,
+a1
+,
+a2
+,
+a3
+,
+a4
+)
+
+852 *
+·t
+;
+
+853 
+a1
+,
+a2
+,
+a3
+,
+a4
+;
+
+855
+ `mess
+(
+·t
+,
+a1
+,
+a2
+,
+a3
+,
+a4
+);
+
+856
+ `åuts
+(
+buf
+,
+¡d”r
+);
+
+857 #ifdeà
+LEAKTEST
+
+
+858 #ifdeà
+DEBUGGING
+
+
+859 ià(
+debug
+ & 4096)
+
+860
+ `x¡©
+();
+
+863 ()
+ `fæush
+(
+¡d”r
+);
+
+864
+ }
+}
+
+867
+ $mess
+(
+¬gs
+)
+
+868
+va_li¡
+
+¬gs
+;
+
+870 *
+·t
+;
+
+871 *
+s
+;
+
+872 #ifdeà
+CHARVSPRINTF
+
+
+873 *
+ `v¥rštf
+();
+
+875 
+ `v¥rštf
+();
+
+878
+s
+ =
+buf
+;
+
+879 #ifdeà
+lšt
+
+
+880
+·t
+ =
+NuÎch
+;
+
+882
+·t
+ =
+ `va_¬g
+(
+¬gs
+, *);
+
+884 (è
+ `v¥rštf
+(
+s
+,
+·t
+,
+¬gs
+);
+
+886
+s
+ +ð
+ `¡¾’
+(s);
+
+887 ià(
+s
+[-1] != '\n') {
+
+888 ià(
+curcmd
+->
+c_lše
+) {
+
+889 ()
+ `¥rštf
+(
+s
+,"‡t %s†ine %ld",
+
+890
+ `¡ab_v®
+(
+curcmd
+->
+c_fže¡ab
+)->
+¡r_±r
+, ()curcmd->
+c_lše
+);
+
+891
+s
+ +ð
+ `¡¾’
+(s);
+
+893 ià(
+Ï¡_š_¡ab
+ &&
+
+894
+ `¡ab_io
+(
+Ï¡_š_¡ab
+) &&
+
+895
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+lšes
+ ) {
+
+896 ()
+ `¥rštf
+(
+s
+,", <%s>†ine %ld",
+
+897
+Ï¡_š_¡ab
+ =ð
+¬gv¡ab
+ ? "" :†a¡_š_¡ab->
+¡r_magic
+->
+¡r_±r
+,
+
+898 ()
+ `¡ab_io
+(
+Ï¡_š_¡ab
+)->
+lšes
+);
+
+899
+s
+ +ð
+ `¡¾’
+(s);
+
+901 ()
+ `¡rýy
+(
+s
+,".\n");
+
+903
+ }
+}
+
+906
+ $çl
+(
+va_®i¡
+)
+
+907
+va_dþ
+
+
+909
+va_li¡
+
+¬gs
+;
+
+910
+FILE
+ *
+e_å
+;
+
+911
+*
+e_tm²ame
+;
+
+912 *
+tmps
+;
+
+914 #iâdeà
+lšt
+
+
+915
+ `va_¡¬t
+(
+¬gs
+);
+
+917
+¬gs
+ = 0;
+
+919
+ `mess
+(
+¬gs
+);
+
+920
+ `va_’d
+(
+¬gs
+);
+
+921 ià(
+š_ev®
+) {
+
+922
+ `¡r_£t
+(
+ `¡ab_v®
+(
+ `¡ab’t
+("@",
+TRUE
+)),
+buf
+);
+
+923
+tmps
+ = "_EVAL_";
+
+924 
+loÝ_±r
+ >ð0 && (!
+loÝ_¡ack
+[loÝ_±r].
+loÝ_Ïb–
+ ||
+
+925
+ `¡rNE
+(
+tmps
+,
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+) )) {
+
+926 #ifdeà
+DEBUGGING
+
+
+927 ià(
+debug
+ & 4) {
+
+928
+ `deb
+("(Skpšg†ab– #%d %s)\n",
+loÝ_±r
+,
+
+929
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+);
+
+932
+loÝ_±r
+--;
+
+934 #ifdeà
+DEBUGGING
+
+
+935 ià(
+debug
+ & 4) {
+
+936
+ `deb
+("(Found†ab– #%d %s)\n",
+loÝ_±r
+,
+
+937
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_Ïb–
+);
+
+940 ià(
+loÝ_±r
+ < 0) {
+
+941
+š_ev®
+ = 0;
+
+942
+ `çl
+("Bad†ab–: %s",
+tmps
+);
+
+944
+ `lÚgjmp
+(
+loÝ_¡ack
+[
+loÝ_±r
+].
+loÝ_’v
+, 1);
+
+946
+ `åuts
+(
+buf
+,
+¡d”r
+);
+
+947 ()
+ `fæush
+(
+¡d”r
+);
+
+948 ià(
+e_å
+)
+
+949 ()
+ `UNLINK
+(
+e_tm²ame
+);
+
+950
+¡©usv®ue
+ >>= 8;
+
+951
+ `ex™
+(()((
+Ӽo
+&255)?Ӽo:((
+¡©usv®ue
+&255)?statusvalue:255)));
+
+952
+ }
+}
+
+955
+ $w¬n
+(
+va_®i¡
+)
+
+956
+va_dþ
+
+
+958
+va_li¡
+
+¬gs
+;
+
+960 #iâdeà
+lšt
+
+
+961
+ `va_¡¬t
+(
+¬gs
+);
+
+963
+¬gs
+ = 0;
+
+965
+ `mess
+(
+¬gs
+);
+
+966
+ `va_’d
+(
+¬gs
+);
+
+968
+ `åuts
+(
+buf
+,
+¡d”r
+);
+
+969 #ifdeà
+LEAKTEST
+
+
+970 #ifdeà
+DEBUGGING
+
+
+971 ià(
+debug
+ & 4096)
+
+972
+ `x¡©
+();
+
+975 ()
+ `fæush
+(
+¡d”r
+);
+
+976
+ }
+}
+
+980
+ $my_£‹nv
+(
+Çm
+,
+v®
+)
+
+981 *
+Çm
+, *
+v®
+;
+
+983 
+i
+=
+ `’vix
+(
+Çm
+);
+
+985 ià(
+’vœÚ
+ =ð
+Üig’vœÚ
+) {
+
+986 
+j
+;
+
+987 
+max
+;
+
+988 **
+tm³nv
+;
+
+990 
+max
+ =
+i
+;
+’vœÚ
+[max]; max++) ;
+
+991
+ `New
+(901,
+tm³nv
+,
+max
++2, *);
+
+992 
+j
+=0; j<
+max
+; j++)
+
+993
+tm³nv
+[
+j
+] =
+ `§ve¡r
+(
+’vœÚ
+[j]);
+
+994
+tm³nv
+[
+max
+] =
+NuÎch
+;
+
+995
+’vœÚ
+ =
+tm³nv
+;
+
+997 ià(!
+v®
+) {
+
+998 
+’vœÚ
+[
+i
+]) {
+
+999
+’vœÚ
+[
+i
+] =ƒnviron[i+1];
+
+1000
+i
+++;
+
+1004 ià(!
+’vœÚ
+[
+i
+]) {
+
+1005
+ `R’ew
+(
+’vœÚ
+,
+i
++2, *);
+
+1006
+’vœÚ
+[
+i
++1] =
+NuÎch
+;
+
+1009
+ `Saãä“
+(
+’vœÚ
+[
+i
+]);
+
+1010
+ `New
+(904,
+’vœÚ
+[
+i
+],
+ `¡¾’
+(
+Çm
+è+ sŒËn(
+v®
+) + 2, );
+
+1011 #iâdeà
+MSDOS
+
+
+1012 ()
+ `¥rštf
+(
+’vœÚ
+[
+i
+],"%s=%s",
+Çm
+,
+v®
+);
+
+1019
+ `¡rýy
+(
+’vœÚ
+[
+i
+],
+Çm
+);
+ `¡ru´
+(environ[i]);
+
+1020 ()
+ `¥rštf
+(
+’vœÚ
+[
+i
+] +
+ `¡¾’
+(
+Çm
+),"=%s",
+v®
+);
+
+1022
+ }
+}
+
+1025
+ $’vix
+(
+Çm
+)
+
+1026 *
+Çm
+;
+
+1028 
+i
+,
+Ën
+ =
+ `¡¾’
+(
+Çm
+);
+
+1030 
+i
+ = 0;
+’vœÚ
+[i]; i++) {
+
+1031 ià(
+ `¡ºEQ
+(
+’vœÚ
+[
+i
+],
+Çm
+,
+Ën
+) &&ƒnviron[i][len] == '=')
+
+1034 
+i
+;
+
+1035
+ }
+}
+
+1037 #ifdeà
+EUNICE
+
+
+1038
+ $uÆnk
+(
+f
+)
+
+1039 *
+f
+;
+
+1041 
+i
+;
+
+1043 
+i
+ = 0;
+ `uÆšk
+(
+f
+) >= 0; i++) ;
+
+1044 
+i
+ ? 0 : -1;
+
+1045
+ }
+}
+
+1048 #iâdeà
+HAS_MEMCPY
+
+
+1049 #iâdeà
+HAS_BCOPY
+
+
+1051
+ $bcÝy
+(
+äom
+,
+to
+,
+Ën
+)
+
+1052 *
+äom
+;
+
+1053 *
+to
+;
+
+1054 
+Ën
+;
+
+1056 *
+»tv®
+ =
+to
+;
+
+1058 
+Ën
+--)
+
+1059 *
+to
+++ = *
+äom
+++;
+
+1060 
+»tv®
+;
+
+1061
+ }
+}
+
+1064 #iâdeà
+HAS_BZERO
+
+
+1066
+ $bz”o
+(
+loc
+,
+Ën
+)
+
+1067 *
+loc
+;
+
+1068 
+Ën
+;
+
+1070 *
+»tv®
+ =
+loc
+;
+
+1072 
+Ën
+--)
+
+1073 *
+loc
+++ = 0;
+
+1074 
+»tv®
+;
+
+1075
+ }
+}
+
+1079 #ifdeà
+I_VARARGS
+
+
+1080 #iâdeà
+HAS_VPRINTF
+
+
+1082 #ifdeà
+CHARVSPRINTF
+
+
+1087
+ $v¥rštf
+(
+de¡
+,
+·t
+,
+¬gs
+)
+
+1088 *
+de¡
+, *
+·t
+, *
+¬gs
+;
+
+1090
+FILE
+
+çkebuf
+;
+
+1092
+çkebuf
+.
+_±r
+ =
+de¡
+;
+
+1093
+çkebuf
+.
+_út
+ = 32767;
+
+1094 #iâdeà
+_IOSTRG
+
+
+1095 
+ #_IOSTRG
+ 0
+
+ )
+
+1097
+çkebuf
+.
+_æag
+ =
+_IOWRT
+|
+_IOSTRG
+;
+
+1098
+ `_dݺt
+(
+·t
+,
+¬gs
+, &
+çkebuf
+);
+
+1099 ()
+ `putc
+('\0', &
+çkebuf
+);
+
+1100 #ifdeà
+CHARVSPRINTF
+
+
+1101 (
+de¡
+);
+
+1105
+ }
+}
+
+1107 #ifdeà
+DEBUGGING
+
+
+1109
+ $vårštf
+(
+fd
+,
+·t
+,
+¬gs
+)
+
+1110
+FILE
+ *
+fd
+;
+
+1111 *
+·t
+, *
+¬gs
+;
+
+1113
+ `_dݺt
+(
+·t
+,
+¬gs
+,
+fd
+);
+
+1115
+ }
+}
+
+1120 #ifdeà
+MYSWAP
+
+
+1121 #ià
+BYTEORDER
+ != 0x4321
+
+1123
+ $my_sw­
+(
+s
+)
+
+1124 
+s
+;
+
+1126 #ià(
+BYTEORDER
+ & 1) == 0
+
+1127 
+»suÉ
+;
+
+1129
+»suÉ
+ = ((
+s
+ & 255) << 8) + ((s >> 8) & 255);
+
+1130 
+»suÉ
+;
+
+1132 
+s
+;
+
+1134
+ }
+}
+
+1137
+ $htÚl
+(
+l
+)
+
+1138 
+l
+;
+
+1141 
+»suÉ
+;
+
+1142 
+c
+[()];
+
+1143 }
+u
+;
+
+1145 #ià
+BYTEORDER
+ == 0x1234
+
+1146
+u
+.
+c
+[0] = (
+l
+ >> 24) & 255;
+
+1147
+u
+.
+c
+[1] = (
+l
+ >> 16) & 255;
+
+1148
+u
+.
+c
+[2] = (
+l
+ >> 8) & 255;
+
+1149
+u
+.
+c
+[3] =
+l
+ & 255;
+
+1150 
+u
+.
+»suÉ
+;
+
+1152 #ià((
+BYTEORDER
+ - 0x1111) & 0x444) || !(BYTEORDER & 0xf)
+
+1153
+ `çl
+("Unknown BYTEORDER\n");
+
+1155 
+o
+;
+
+1156 
+s
+;
+
+1158 
+o
+ =
+BYTEORDER
+ - 0x1111,
+s
+ = 0; s < (()*8); o >>= 4, s += 8) {
+
+1159
+u
+.
+c
+[
+o
+ & 0xf] = (
+l
+ >>
+s
+) & 255;
+
+1161 
+u
+.
+»suÉ
+;
+
+1164
+ }
+}
+
+1167
+ $Áohl
+(
+l
+)
+
+1168 
+l
+;
+
+1171 
+l
+;
+
+1172 
+c
+[()];
+
+1173 }
+u
+;
+
+1175 #ià
+BYTEORDER
+ == 0x1234
+
+1176
+u
+.
+c
+[0] = (
+l
+ >> 24) & 255;
+
+1177
+u
+.
+c
+[1] = (
+l
+ >> 16) & 255;
+
+1178
+u
+.
+c
+[2] = (
+l
+ >> 8) & 255;
+
+1179
+u
+.
+c
+[3] =
+l
+ & 255;
+
+1180 
+u
+.
+l
+;
+
+1182 #ià((
+BYTEORDER
+ - 0x1111) & 0x444) || !(BYTEORDER & 0xf)
+
+1183
+ `çl
+("Unknown BYTEORDER\n");
+
+1185 
+o
+;
+
+1186 
+s
+;
+
+1188
+u
+.
+l
+ =†;
+
+1189
+l
+ = 0;
+
+1190 
+o
+ =
+BYTEORDER
+ - 0x1111,
+s
+ = 0; s < (()*8); o >>= 4, s += 8) {
+
+1191
+l
+ |ð(
+u
+.
+c
+[
+o
+ & 0xf] & 255è<<
+s
+;
+
+1193 
+l
+;
+
+1196
+ }
+}
+
+1201 #iâdeà
+MSDOS
+
+
+1202
+FILE
+ *
+
+1203
+ $mypÝ’
+(
+cmd
+,
+mode
+)
+
+1204 *
+cmd
+;
+
+1205 *
+mode
+;
+
+1207 
+p
+[2];
+
+1208 
+this
+,
+th©
+;
+
+1209 
+pid
+;
+
+1210
+STR
+ *
+¡r
+;
+
+1211 
+dÛxec
+ =
+ `¡rNE
+(
+cmd
+,"-");
+
+1213 ià(
+ `pe
+(
+p
+) < 0)
+
+1214 
+NuÎå
+;
+
+1215
+this
+ = (*
+mode
+ == 'w');
+
+1216
+th©
+ = !
+this
+;
+
+1217 (
+pid
+ = (
+dÛxec
+?
+ `vfÜk
+():
+ `fÜk
+())) < 0) {
+
+1218 ià(
+Ӽo
+ !ð
+EAGAIN
+) {
+
+1219
+ `þo£
+(
+p
+[
+this
+]);
+
+1220 ià(!
+dÛxec
+)
+
+1221
+ `çl
+("Can't fork");
+
+1222 
+NuÎå
+;
+
+1224
+ `¦“p
+(5);
+
+1226 ià(
+pid
+ == 0) {
+
+1227 
+ #THIS
+
+th©
+
+
+ )
+
+1228 
+ #THAT
+
+this
+
+
+ )
+
+1229
+ `þo£
+(
+p
+[
+THAT
+]);
+
+1230 ià(
+p
+[
+THIS
+] !ð(*
+mode
+ == 'r')) {
+
+1231
+ `dup2
+(
+p
+[
+THIS
+], *
+mode
+ == 'r');
+
+1232
+ `þo£
+(
+p
+[
+THIS
+]);
+
+1234 ià(
+dÛxec
+) {
+
+1235 #ià!
+ `defšed
+(
+I_FCNTL
+è|| !defšed(
+F_SETFD
+)
+
+1236 
+fd
+;
+
+1238 #iâdeà
+NOFILE
+
+
+1239 
+ #NOFILE
+ 20
+
+ )
+
+1241 
+fd
+ = 3; fd <
+NOFILE
+; fd++)
+
+1242
+ `þo£
+(
+fd
+);
+
+1244
+ `do_exec
+(
+cmd
+);
+
+1245
+ `_ex™
+(1);
+
+1247 ià(
+tmp¡ab
+ =
+ `¡ab’t
+("$",
+®l¡abs
+))
+
+1248
+ `¡r_num£t
+(
+ `STAB_STR
+(
+tmp¡ab
+),()
+ `g‘pid
+());
+
+1249
+fÜk´oûss
+ = 0;
+
+1250
+ `hþ—r
+(
+pid¡©us
+,
+FALSE
+);
+
+1251 
+NuÎå
+;
+
+1252 #undeà
+THIS
+
+
+1253 #undeà
+THAT
+
+
+1255
+ `do_execä“
+();
+
+1256
+ `þo£
+(
+p
+[
+th©
+]);
+
+1257 ià(
+p
+[
+th©
+] <…[
+this
+]) {
+
+1258
+ `dup2
+(
+p
+[
+this
+],…[
+th©
+]);
+
+1259
+ `þo£
+(
+p
+[
+this
+]);
+
+1260
+p
+[
+this
+] =…[
+th©
+];
+
+1262
+¡r
+ =
+ `aãtch
+(
+fdpid
+,
+p
+[
+this
+],
+TRUE
+);
+
+1263
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+ =
+pid
+;
+
+1264
+fÜk´oûss
+ =
+pid
+;
+
+1265 
+ `fdÝ’
+(
+p
+[
+this
+],
+mode
+);
+
+1266
+ }
+}
+
+1269 #ifdeà
+NOTDEF
+
+
+1270
+ $dumpfds
+(
+s
+)
+
+1271 *
+s
+;
+
+1273 
+fd
+;
+
+1274 
+¡©
+
+tmp¡©buf
+;
+
+1276
+ `årštf
+(
+¡d”r
+,"%s",
+s
+);
+
+1277 
+fd
+ = 0; fd < 32; fd++) {
+
+1278 ià(
+ `f¡©
+(
+fd
+,&
+tmp¡©buf
+) >= 0)
+
+1279
+ `årštf
+(
+¡d”r
+," %d",
+fd
+);
+
+1281
+ `årštf
+(
+¡d”r
+,"\n");
+
+1282
+ }
+}
+
+1285 #iâdeà
+HAS_DUP2
+
+
+1286
+ $dup2
+(
+Þdfd
+,
+Ãwfd
+)
+
+1287 
+Þdfd
+;
+
+1288 
+Ãwfd
+;
+
+1290 #ià
+ `defšed
+(
+HAS_FCNTL
+è&& defšed(
+F_DUPFD
+)
+
+1291
+ `þo£
+(
+Ãwfd
+);
+
+1292
+ `fúŽ
+(
+Þdfd
+,
+F_DUPFD
+,
+Ãwfd
+);
+
+1294 
+fdtmp
+[20];
+
+1295 
+fdx
+ = 0;
+
+1296 
+fd
+;
+
+1298 ià(
+Þdfd
+ =ð
+Ãwfd
+)
+
+1300
+ `þo£
+(
+Ãwfd
+);
+
+1301 (
+fd
+ =
+ `dup
+(
+Þdfd
+)è!ð
+Ãwfd
+)
+
+1302
+fdtmp
+[
+fdx
+++] =
+fd
+;
+
+1303 
+fdx
+ > 0)
+
+1304
+ `þo£
+(
+fdtmp
+[--
+fdx
+]);
+
+1306
+ }
+}
+
+1309 #iâdeà
+MSDOS
+
+
+1311
+ $mypþo£
+(
+±r
+)
+
+1312
+FILE
+ *
+±r
+;
+
+1314 #ifdeà
+VOIDSIG
+
+
+1315 (*
+h¡©
+)(), (*
+i¡©
+)(), (*
+q¡©
+)();
+
+1317 (*
+h¡©
+)(), (*
+i¡©
+)(), (*
+q¡©
+)();
+
+1319 
+¡©us
+;
+
+1320
+STR
+ *
+¡r
+;
+
+1321 
+pid
+;
+
+1323
+¡r
+ =
+ `aãtch
+(
+fdpid
+,
+ `fž’o
+(
+±r
+),
+TRUE
+);
+
+1324
+ `a¡Üe
+(
+fdpid
+,
+ `fž’o
+(
+±r
+),
+NuΡr
+);
+
+1325
+ `fþo£
+(
+±r
+);
+
+1326
+pid
+ = ()
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+1327
+h¡©
+ =
+ `sigÇl
+(
+SIGHUP
+,
+SIG_IGN
+);
+
+1328
+i¡©
+ =
+ `sigÇl
+(
+SIGINT
+,
+SIG_IGN
+);
+
+1329
+q¡©
+ =
+ `sigÇl
+(
+SIGQUIT
+,
+SIG_IGN
+);
+
+1330
+pid
+ =
+ `wa™4pid
+Õid, &
+¡©us
+, 0);
+
+1331
+ `sigÇl
+(
+SIGHUP
+,
+h¡©
+);
+
+1332
+ `sigÇl
+(
+SIGINT
+,
+i¡©
+);
+
+1333
+ `sigÇl
+(
+SIGQUIT
+,
+q¡©
+);
+
+1334 (
+pid
+ < 0 ?…id :
+¡©us
+);
+
+1335
+ }
+}
+
+1338
+ $wa™4pid
+(
+pid
+,
+¡©u¥
+,
+æags
+)
+
+1339 
+pid
+;
+
+1340 *
+¡©u¥
+;
+
+1341 
+æags
+;
+
+1343 
+»suÉ
+;
+
+1344
+STR
+ *
+¡r
+;
+
+1345 
+¥id
+[16];
+
+1347 ià(!
+pid
+)
+
+1349 #ifdeà
+HAS_WAIT4
+
+
+1350 
+ `wa™4
+((
+pid
+==-1)?0:pid,
+¡©u¥
+,
+æags
+,
+ `NuÎ
+(
+ru§ge
+ *));
+
+1352 #ifdeà
+HAS_WAITPID
+
+
+1353 
+ `wa™pid
+(
+pid
+,
+¡©u¥
+,
+æags
+);
+
+1355 ià(
+pid
+ > 0) {
+
+1356
+ `¥rštf
+(
+¥id
+, "%d",
+pid
+);
+
+1357
+¡r
+ =
+ `hãtch
+(
+pid¡©us
+,
+¥id
+,
+ `¡¾’
+(¥id),
+FALSE
+);
+
+1358 ià(
+¡r
+ !ð&
+¡r_undef
+) {
+
+1359 *
+¡©u¥
+ = ()
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+1360
+ `hd–‘e
+(
+pid¡©us
+,
+¥id
+,
+ `¡¾’
+(spid));
+
+1361 
+pid
+;
+
+1365
+HENT
+ *
+’Œy
+;
+
+1367
+ `h™”š™
+(
+pid¡©us
+);
+
+1368 ià(
+’Œy
+ =
+ `h™”Ãxt
+(
+pid¡©us
+)) {
+
+1369
+pid
+ =
+ `©oi
+(
+ `h™”key
+(
+’Œy
+,
+¡©u¥
+));
+
+1370
+¡r
+ =
+ `h™”v®
+(
+’Œy
+);
+
+1371 *
+¡©u¥
+ = ()
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+;
+
+1372
+ `¥rštf
+(
+¥id
+, "%d",
+pid
+);
+
+1373
+ `hd–‘e
+(
+pid¡©us
+,
+¥id
+,
+ `¡¾’
+(spid));
+
+1374 
+pid
+;
+
+1377 ià(
+æags
+)
+
+1378
+ `çl
+("Can't do waitpid with flags");
+
+1380 (
+»suÉ
+ =
+ `wa™
+(
+¡©u¥
+)è!ð
+pid
+ &&…id > 0 &&„esult >= 0)
+
+1381
+ `pidgÚe
+(
+»suÉ
+,*
+¡©u¥
+);
+
+1382 ià(
+»suÉ
+ < 0)
+
+1383 *
+¡©u¥
+ = -1;
+
+1385 
+»suÉ
+;
+
+1388
+ }
+}
+
+1390
+ $pidgÚe
+(
+pid
+,
+¡©us
+)
+
+1391 
+pid
+;
+
+1392 
+¡©us
+;
+
+1394 #ià
+ `defšed
+(
+HAS_WAIT4
+è|| defšed(
+HAS_WAITPID
+)
+
+1396 
+STR
+ *
+¡r
+;
+
+1397 
+¥id
+[16];
+
+1399
+ `¥rštf
+(
+¥id
+, "%d",
+pid
+);
+
+1400
+¡r
+ =
+ `hãtch
+(
+pid¡©us
+,
+¥id
+,
+ `¡¾’
+(¥id),
+TRUE
+);
+
+1401
+¡r
+->
+¡r_u
+.
+¡r_u£ful
+ =
+¡©us
+;
+
+1404
+ }
+}
+
+1407 #iâdeà
+HAS_MEMCMP
+
+
+1408
+ $memcmp
+(
+s1
+,
+s2
+,
+Ën
+)
+
+1409 *
+s1
+;
+
+1410 *
+s2
+;
+
+1411 
+Ën
+;
+
+1413 
+tmp
+;
+
+1415 
+Ën
+--) {
+
+1416 ià(
+tmp
+ = *
+s1
+++ - *
+s2
+++)
+
+1417 
+tmp
+;
+
+1420
+ }
+}
+
+1424
+ $»³©ýy
+(
+to
+,
+äom
+,
+Ën
+,
+couÁ
+)
+
+1425 *
+to
+;
+
+1426 *
+äom
+;
+
+1427 
+Ën
+;
+
+1428 
+couÁ
+;
+
+1430 
+todo
+;
+
+1431 *
+äomba£
+ =
+äom
+;
+
+1433 ià(
+Ën
+ == 1) {
+
+1434
+todo
+ = *
+äom
+;
+
+1435 
+couÁ
+-- > 0)
+
+1436 *
+to
+++ =
+todo
+;
+
+1439 
+couÁ
+-- > 0) {
+
+1440 
+todo
+ =
+Ën
+;odo > 0;odo--) {
+
+1441 *
+to
+++ = *
+äom
+++;
+
+1443
+äom
+ =
+äomba£
+;
+
+1445
+ }
+}
+
+1447 #iâdeà
+CASTNEGFLOAT
+
+
+1449
+ $ÿ¡ulÚg
+(
+f
+)
+
+1450 
+f
+;
+
+1452 
+®Úg
+;
+
+1454 #ià
+CASTFLAGS
+ & 2
+
+1455 
+ #BIGDOUBLE
+ 2147483648.0
+
+ )
+
+1456 ià(
+f
+ >ð
+BIGDOUBLE
+)
+
+1457  ()(
+f
+-()(f/
+BIGDOUBLE
+)*BIGDOUBLE)|0x80000000;
+
+1459 ià(
+f
+ >= 0.0)
+
+1460  ()
+f
+;
+
+1461
+®Úg
+ = ()
+f
+;
+
+1462  ()
+®Úg
+;
+
+1463
+ }
+}
+
+1466 #iâdeà
+HAS_RENAME
+
+
+1468
+ $§me_dœ’t
+(
+a
+,
+b
+)
+
+1469 *
+a
+;
+
+1470 *
+b
+;
+
+1472 *
+ =
+ `ršdex
+(
+a
+,'/');
+
+1473 *
+fb
+ =
+ `ršdex
+(
+b
+,'/');
+
+1474 
+¡©
+
+tmp¡©buf1
+;
+
+1475 
+¡©
+
+tmp¡©buf2
+;
+
+1476 #iâdeà
+MAXPATHLEN
+
+
+1477 
+ #MAXPATHLEN
+ 1024
+
+ )
+
+1479 
+tmpbuf
+[
+MAXPATHLEN
++1];
+
+1481 ià(
+)
+
+1482
+++;
+
+1484
+ =
+a
+;
+
+1485 ià(
+fb
+)
+
+1486
+fb
+++;
+
+1488
+fb
+ =
+b
+;
+
+1489 ià(
+ `¡rNE
+(
+a
+,
+b
+))
+
+1490 
+FALSE
+;
+
+1491 ià(
+ =ð
+a
+)
+
+1492
+ `¡rýy
+(
+tmpbuf
+,".");
+
+1494
+ `¡ºýy
+(
+tmpbuf
+,
+a
+,
+ -‡);
+
+1495 ià(
+ `¡©
+(
+tmpbuf
+, &
+tmp¡©buf1
+) < 0)
+
+1496 
+FALSE
+;
+
+1497 ià(
+fb
+ =ð
+b
+)
+
+1498
+ `¡rýy
+(
+tmpbuf
+,".");
+
+1500
+ `¡ºýy
+(
+tmpbuf
+,
+b
+,
+fb
+ - b);
+
+1501 ià(
+ `¡©
+(
+tmpbuf
+, &
+tmp¡©buf2
+) < 0)
+
+1502 
+FALSE
+;
+
+1503 
+tmp¡©buf1
+.
+¡_dev
+ =ð
+tmp¡©buf2
+.st_dev &&
+
+1504
+tmp¡©buf1
+.
+¡_šo
+ =ð
+tmp¡©buf2
+.st_ino;
+
+1505
+ }
+}
+
+1509
+ $sÿnoù
+(
+¡¬t
+,
+Ën
+,
+»Ž’
+)
+
+1510 *
+¡¬t
+;
+
+1511 
+Ën
+;
+
+1512 *
+»Ž’
+;
+
+1514 *
+s
+ =
+¡¬t
+;
+
+1515 
+»tv®
+ = 0;
+
+1517 
+Ën
+-- && *
+s
+ >= '0' && *s <= '7') {
+
+1518
+»tv®
+ <<= 3;
+
+1519
+»tv®
+ |ð*
+s
+++ - '0';
+
+1521 *
+»Ž’
+ =
+s
+ -
+¡¬t
+;
+
+1522 
+»tv®
+;
+
+1523
+ }
+}
+
+1526
+ $sÿnhex
+(
+¡¬t
+,
+Ën
+,
+»Ž’
+)
+
+1527 *
+¡¬t
+;
+
+1528 
+Ën
+;
+
+1529 *
+»Ž’
+;
+
+1531 *
+s
+ =
+¡¬t
+;
+
+1532 
+»tv®
+ = 0;
+
+1533 *
+tmp
+;
+
+1535 
+Ën
+-- && *
+s
+ && (
+tmp
+ =
+ `šdex
+(
+hexdig™
+, *s))) {
+
+1536
+»tv®
+ <<= 4;
+
+1537
+»tv®
+ |ð(
+tmp
+ -
+hexdig™
+) & 15;
+
+1538
+s
+++;
+
+1540 *
+»Ž’
+ =
+s
+ -
+¡¬t
+;
+
+1541 
+»tv®
+;
+
+1542
+ }
+}
+
+ @util.h
+
+14
+EXT
+ *
+sü—mfœ¡
+
+INIT
+(
+NuÎ
+(*));
+
+15
+EXT
+ *
+sü—mÃxt
+
+INIT
+(
+NuÎ
+(*));
+
+17 *
+§ãm®loc
+();
+
+18 *
+§ã»®loc
+();
+
+19 *
+ýytžl
+();
+
+20 *
+š¡r
+();
+
+21 *
+fbmš¡r
+();
+
+22 *
+sü—mš¡r
+();
+
+23 
+fbmcompže
+();
+
+24 *
+§ve¡r
+();
+
+25 
+my_£‹nv
+(*, *);
+
+26 
+’vix
+();
+
+27 
+grow¡r
+();
+
+28 *
+nš¡r
+();
+
+29 *
+ºš¡r
+();
+
+30 *
+n§ve¡r
+();
+
+31
+FILE
+ *
+mypÝ’
+();
+
+32 
+mypþo£
+();
+
+33 #iâdeà
+HAS_MEMCPY
+
+
+34 #iâdeà
+HAS_BCOPY
+
+
+35 *
+bcÝy
+();
+
+37 #iâdeà
+HAS_BZERO
+
+
+38 *
+bz”o
+();
+
+41 
+sÿnoù
+();
+
+42 
+sÿnhex
+();
+
+ @/usr/include/ctype.h
+
+23 #iâdef
+_CTYPE_H
+
+
+24 
+ #_CTYPE_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+27 
+ ~<b™s/ty³s.h
+>
+
+29
+ g__BEGIN_DECLS
+
+
+31 #iâdeà
+_ISb™
+
+
+40 
+ ~<’dŸn.h
+>
+
+41 #ià
+__BYTE_ORDER
+ =ð
+__BIG_ENDIAN
+
+
+42 
+ #_ISb™
+(
+b™
+è(1 << (b™))
+
+ )
+
+44 
+ #_ISb™
+(
+b™
+è((b™è< 8 ? ((1 << (b™)è<< 8è: ((1 << (b™)è>> 8))
+
+ )
+
+49
+ m_ISuµ”
+ =
+_ISb™
+ (0),
+
+50
+ m_ISlow”
+ =
+_ISb™
+ (1),
+
+51
+ m_IS®pha
+ =
+_ISb™
+ (2),
+
+52
+ m_ISdig™
+ =
+_ISb™
+ (3),
+
+53
+ m_ISxdig™
+ =
+_ISb™
+ (4),
+
+54
+ m_IS¥aû
+ =
+_ISb™
+ (5),
+
+55
+ m_IS´št
+ =
+_ISb™
+ (6),
+
+56
+ m_ISg¿ph
+ =
+_ISb™
+ (7),
+
+57
+ m_ISbÏnk
+ =
+_ISb™
+ (8),
+
+58
+ m_ISúŒl
+ =
+_ISb™
+ (9),
+
+59
+ m_ISpunù
+ =
+_ISb™
+ (10),
+
+60
+ m_IS®num
+ =
+_ISb™
+ (11)
+
+75
+__cÚ¡
+ *
+__ùy³_b
+;
+
+76
+__cÚ¡
+
+__št32_t
+ *
+__ùy³_tÞow”
+;
+
+77
+__cÚ¡
+
+__št32_t
+ *
+__ùy³_touµ”
+;
+
+79 
+ #__isùy³
+(
+c
+,
+ty³
+) \
+
+80 (
+__ùy³_b
+[(è(
+c
+)] & (è
+ty³
+)
+
+ )
+
+82 
+ #__i§scii
+(
+c
+è(((cè& ~0x7fè=ð0è
+
+ )
+
+83 
+ #__tßscii
+(
+c
+è((cè& 0x7fè
+
+ )
+
+85 
+ #__exùy³
+(
+Çme
+
+ `Çme
+ (è
+__THROW
+
+
+ )
+
+91
+__exùy³
+ (
+i§Êum
+);
+
+92
+__exùy³
+ (
+i§Íha
+);
+
+93
+__exùy³
+ (
+isúŒl
+);
+
+94
+__exùy³
+ (
+isdig™
+);
+
+95
+__exùy³
+ (
+i¦ow”
+);
+
+96
+__exùy³
+ (
+isg¿ph
+);
+
+97
+__exùy³
+ (
+i¥ršt
+);
+
+98
+__exùy³
+ (
+i¥unù
+);
+
+99
+__exùy³
+ (
+is¥aû
+);
+
+100
+__exùy³
+ (
+isuµ”
+);
+
+101
+__exùy³
+ (
+isxdig™
+);
+
+103 #ifdef
+__USE_ISOC99
+
+
+104
+__exùy³
+ (
+isbÏnk
+);
+
+109
+
+ $tÞow”
+ (
+__c
+__THROW
+;
+
+112
+
+ $touµ”
+ (
+__c
+__THROW
+;
+
+115 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN
+
+
+119
+
+ $i§scii
+ (
+__c
+__THROW
+;
+
+123
+
+ $tßscii
+ (
+__c
+__THROW
+;
+
+127
+ `__exùy³
+ (
+_touµ”
+);
+
+128
+ `__exùy³
+ (
+_tÞow”
+);
+
+132 
+ #__tobody
+(
+c
+,
+f
+,
+a
+,
+¬gs
+) \
+
+133 (
+__ex‹nsiÚ__
+ \
+
+134 ({ 
+__»s
+; \
+
+135 ià( (
+c
+) > 1) \
+
+137 ià(
+ `__bužtš_cÚ¡ªt_p
+ (
+c
+)) \
+
+139 
+__c
+ = (
+c
+); \
+
+140
+__»s
+ =
+__c
+ < -128 || __ø> 255 ? __ø:
+a
+[__c]; \
+
+143
+__»s
+ =
+f
+
+¬gs
+; \
+
+146
+__»s
+ =
+a
+[(è(
+c
+)]; \
+
+147
+__»s
+;
+ }
+}))
+
+ )
+
+149 #iâdef
+__NO_CTYPE
+
+
+150 
+ #i§Êum
+(
+c
+ `__isùy³
+((c),
+_IS®num
+)
+
+ )
+
+151 
+ #i§Íha
+(
+c
+ `__isùy³
+((c),
+_IS®pha
+)
+
+ )
+
+152 
+ #isúŒl
+(
+c
+ `__isùy³
+((c),
+_ISúŒl
+)
+
+ )
+
+153 
+ #isdig™
+(
+c
+ `__isùy³
+((c),
+_ISdig™
+)
+
+ )
+
+154 
+ #i¦ow”
+(
+c
+ `__isùy³
+((c),
+_ISlow”
+)
+
+ )
+
+155 
+ #isg¿ph
+(
+c
+ `__isùy³
+((c),
+_ISg¿ph
+)
+
+ )
+
+156 
+ #i¥ršt
+(
+c
+ `__isùy³
+((c),
+_IS´št
+)
+
+ )
+
+157 
+ #i¥unù
+(
+c
+ `__isùy³
+((c),
+_ISpunù
+)
+
+ )
+
+158 
+ #is¥aû
+(
+c
+ `__isùy³
+((c),
+_IS¥aû
+)
+
+ )
+
+159 
+ #isuµ”
+(
+c
+ `__isùy³
+((c),
+_ISuµ”
+)
+
+ )
+
+160 
+ #isxdig™
+(
+c
+ `__isùy³
+((c),
+_ISxdig™
+)
+
+ )
+
+162 #ifdef
+__USE_ISOC99
+
+
+163 
+ #isbÏnk
+(
+c
+ `__isùy³
+((c),
+_ISbÏnk
+)
+
+ )
+
+166 #ifdeà
+__USE_EXTERN_INLINES
+
+
+167
+__šlše
+ 
+
+168
+ $tÞow”
+ (
+__c
+__THROW
+
+
+170 
+__c
+ >ð-128 && __ø< 256 ?
+__ùy³_tÞow”
+[__c] : __c;
+
+171
+ }
+}
+
+173
+__šlše
+ 
+
+174
+ $touµ”
+ (
+__c
+__THROW
+
+
+176 
+__c
+ >ð-128 && __ø< 256 ?
+__ùy³_touµ”
+[__c] : __c;
+
+177
+ }
+}
+
+180 #ià
+__GNUC__
+ >ð2 &&
+defšed
+
+__OPTIMIZE__
+ && !defšed
+__ýlu¥lus
+
+
+181 
+ #tÞow”
+(
+c
+ `__tobody
+ (c,
+tÞow”
+,
+__ùy³_tÞow”
+, (c))
+
+ )
+
+182 
+ #touµ”
+(
+c
+ `__tobody
+ (c,
+touµ”
+,
+__ùy³_touµ”
+, (c))
+
+ )
+
+185 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN
+
+
+186 
+ #i§scii
+(
+c
+ `__i§scii
+ (c)
+
+ )
+
+187 
+ #tßscii
+(
+c
+ `__tßscii
+ (c)
+
+ )
+
+189 
+ #_tÞow”
+(
+c
+è((è
+__ùy³_tÞow”
+[(è(c)])
+
+ )
+
+190 
+ #_touµ”
+(
+c
+è((è
+__ùy³_touµ”
+[(è(c)])
+
+ )
+
+196 #ifdeà
+__USE_GNU
+
+
+210 
+ ~<xloÿË.h
+>
+
+214 
+ #__isùy³_l
+(
+c
+,
+ty³
+,
+loÿË
+) \
+
+215 ((
+loÿË
+)->
+__ùy³_b
+[(è(
+c
+)] & (è
+ty³
+)
+
+ )
+
+217 
+ #__exùy³_l
+(
+Çme
+
+ `Çme
+ (,
+__loÿË_t
+__THROW
+
+
+ )
+
+223
+__exùy³_l
+ (
+__i§Êum_l
+);
+
+224
+__exùy³_l
+ (
+__i§Íha_l
+);
+
+225
+__exùy³_l
+ (
+__isúŒl_l
+);
+
+226
+__exùy³_l
+ (
+__isdig™_l
+);
+
+227
+__exùy³_l
+ (
+__i¦ow”_l
+);
+
+228
+__exùy³_l
+ (
+__isg¿ph_l
+);
+
+229
+__exùy³_l
+ (
+__i¥ršt_l
+);
+
+230
+__exùy³_l
+ (
+__i¥unù_l
+);
+
+231
+__exùy³_l
+ (
+__is¥aû_l
+);
+
+232
+__exùy³_l
+ (
+__isuµ”_l
+);
+
+233
+__exùy³_l
+ (
+__isxdig™_l
+);
+
+235
+__exùy³_l
+ (
+__isbÏnk_l
+);
+
+239
+
+ $__tÞow”_l
+ (
+__c
+,
+__loÿË_t
+
+__l
+__THROW
+;
+
+242
+
+ $__touµ”_l
+ (
+__c
+,
+__loÿË_t
+
+__l
+__THROW
+;
+
+244 #ià
+__GNUC__
+ >ð2 &&
+defšed
+
+__OPTIMIZE__
+ && !defšed
+__ýlu¥lus
+
+
+245 
+ #__tÞow”_l
+(
+c
+,
+loÿË
+) \
+
+246
+ `__tobody
+ (
+c
+,
+__tÞow”_l
+, (
+loÿË
+)->
+__ùy³_tÞow”
+, (c,†oÿË))
+
+ )
+
+247 
+ #__touµ”_l
+(
+c
+,
+loÿË
+) \
+
+248
+ `__tobody
+ (
+c
+,
+__touµ”_l
+, (
+loÿË
+)->
+__ùy³_touµ”
+, (c,†oÿË))
+
+ )
+
+252 #iâdeà
+__NO_CTYPE
+
+
+253 
+ #__i§Êum_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_IS®num
+, (l))
+
+ )
+
+254 
+ #__i§Íha_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_IS®pha
+, (l))
+
+ )
+
+255 
+ #__isúŒl_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_ISúŒl
+, (l))
+
+ )
+
+256 
+ #__isdig™_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_ISdig™
+, (l))
+
+ )
+
+257 
+ #__i¦ow”_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_ISlow”
+, (l))
+
+ )
+
+258 
+ #__isg¿ph_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_ISg¿ph
+, (l))
+
+ )
+
+259 
+ #__i¥ršt_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_IS´št
+, (l))
+
+ )
+
+260 
+ #__i¥unù_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_ISpunù
+, (l))
+
+ )
+
+261 
+ #__is¥aû_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_IS¥aû
+, (l))
+
+ )
+
+262 
+ #__isuµ”_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_ISuµ”
+, (l))
+
+ )
+
+263 
+ #__isxdig™_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_ISxdig™
+, (l))
+
+ )
+
+265 
+ #__isbÏnk_l
+(
+c
+,
+l
+ `__isùy³_l
+((c),
+_ISbÏnk
+, (l))
+
+ )
+
+267 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN
+
+
+268 
+ #__i§scii_l
+(
+c
+,
+l
+ `__i§scii
+(c)
+
+ )
+
+269 
+ #__tßscii_l
+(
+c
+,
+l
+ `__tßscii
+(c)
+
+ )
+
+276
+__END_DECLS
+
+
+ @/usr/include/dirent.h
+
+23 #iâdef
+_DIRENT_H
+
+
+24 
+ #_DIRENT_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28
+ g__BEGIN_DECLS
+
+
+30 
+ ~<b™s/ty³s.h
+>
+
+32 #ifdeà
+__USE_XOPEN
+
+
+33 #iâdeà
+__šo_t_defšed
+
+
+34 #iâdeà
+__USE_FILE_OFFSET64
+
+
+35 
+__šo_t
+
+ tšo_t
+;
+
+37 
+__šo64_t
+
+ tšo_t
+;
+
+39 
+ #__šo_t_defšed
+
+
+ )
+
+41 #ià
+defšed
+
+__USE_LARGEFILE64
+ && !defšed
+__šo64_t_defšed
+
+
+42 
+__šo64_t
+
+ tšo64_t
+;
+
+43 
+ #__šo64_t_defšed
+
+
+ )
+
+62 
+ ~<b™s/dœ’t.h
+>
+
+64 #ià(
+defšed
+
+__USE_BSD
+ || defšed
+__USE_MISC
+è&& !defšed
+d_fž’o
+
+
+65 
+ #d_šo
+
+d_fž’o
+
+
+ )
+
+82 #ifdeà
+_DIRENT_HAVE_D_NAMLEN
+
+
+83 
+ #_D_EXACT_NAMLEN
+(
+d
+è((d)->
+d_ÇmËn
+)
+
+ )
+
+84 
+ #_D_ALLOC_NAMLEN
+(
+d
+è(
+ `_D_EXACT_NAMLEN
+ (dè+ 1)
+
+ )
+
+86 
+ #_D_EXACT_NAMLEN
+(
+d
+è(
+ `¡¾’
+ ((d)->
+d_Çme
+))
+
+ )
+
+87 #ifdeà
+_DIRENT_HAVE_D_RECLEN
+
+
+88 
+ #_D_ALLOC_NAMLEN
+(
+d
+è(((*è(dè+ (d)->
+d_»þ’
+è- &(d)->
+d_Çme
+[0])
+
+ )
+
+90 
+ #_D_ALLOC_NAMLEN
+(
+d
+è( (d)->
+d_Çme
+ > 1 ?  (d)->d_name : \
+
+91
+ `_D_EXACT_NAMLEN
+ (
+d
+è+ 1)
+
+ )
+
+96 #ifdeà
+__USE_BSD
+
+
+100
+ mDT_UNKNOWN
+ = 0,
+
+101 
+ #DT_UNKNOWN
+
+DT_UNKNOWN
+
+
+ )
+
+102
+ mDT_FIFO
+ = 1,
+
+103 
+ #DT_FIFO
+
+DT_FIFO
+
+
+ )
+
+104
+ mDT_CHR
+ = 2,
+
+105 
+ #DT_CHR
+
+DT_CHR
+
+
+ )
+
+106
+ mDT_DIR
+ = 4,
+
+107 
+ #DT_DIR
+
+DT_DIR
+
+
+ )
+
+108
+ mDT_BLK
+ = 6,
+
+109 
+ #DT_BLK
+
+DT_BLK
+
+
+ )
+
+110
+ mDT_REG
+ = 8,
+
+111 
+ #DT_REG
+
+DT_REG
+
+
+ )
+
+112
+ mDT_LNK
+ = 10,
+
+113 
+ #DT_LNK
+
+DT_LNK
+
+
+ )
+
+114
+ mDT_SOCK
+ = 12,
+
+115 
+ #DT_SOCK
+
+DT_SOCK
+
+
+ )
+
+116
+ mDT_WHT
+ = 14
+
+117 
+ #DT_WHT
+
+DT_WHT
+
+
+ )
+
+121 
+ #IFTODT
+(
+mode
+è(((modeè& 0170000è>> 12)
+
+ )
+
+122 
+ #DTTOIF
+(
+dœty³
+è((dœty³è<< 12)
+
+ )
+
+128 
+__dœ¡»am
+
+ tDIR
+;
+
+132
+DIR
+ *
+ $Ý’dœ
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+136
+
+ $þo£dœ
+ (
+DIR
+ *
+__dœp
+__THROW
+;
+
+145 #iâdeà
+__USE_FILE_OFFSET64
+
+
+146
+
+dœ’t
+ *
+ $»addœ
+ (
+DIR
+ *
+__dœp
+__THROW
+;
+
+148 #ifdeà
+__REDIRECT
+
+
+149
+
+dœ’t
+ *
+ `__REDIRECT
+ (
+»addœ
+, (
+DIR
+ *
+__dœp
+__THROW
+,
+»addœ64
+);
+
+151 
+ #»addœ
+
+»addœ64
+
+
+ )
+
+155 #ifdeà
+__USE_LARGEFILE64
+
+
+156
+
+dœ’t64
+ *
+ $»addœ64
+ (
+DIR
+ *
+__dœp
+__THROW
+;
+
+159 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+162 #iâdeà
+__USE_FILE_OFFSET64
+
+
+163
+
+ $»addœ_r
+ (
+DIR
+ *
+__»¡riù
+
+__dœp
+,
+
+164 
+dœ’t
+ *
+__»¡riù
+
+__’Œy
+,
+
+165 
+dœ’t
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+167 #ifdeà
+__REDIRECT
+
+
+168
+
+ `__REDIRECT
+ (
+»addœ_r
+,
+
+169 (
+DIR
+ *
+__»¡riù
+
+__dœp
+,
+
+170 
+dœ’t
+ *
+__»¡riù
+
+__’Œy
+,
+
+171 
+dœ’t
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+,
+
+172
+»addœ64_r
+);
+
+174 
+ #»addœ_r
+
+»addœ64_r
+
+
+ )
+
+178 #ifdeà
+__USE_LARGEFILE64
+
+
+179
+
+ $»addœ64_r
+ (
+DIR
+ *
+__»¡riù
+
+__dœp
+,
+
+180 
+dœ’t64
+ *
+__»¡riù
+
+__’Œy
+,
+
+181 
+dœ’t64
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+186
+
+ $»wšddœ
+ (
+DIR
+ *
+__dœp
+__THROW
+;
+
+188 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN
+
+
+189 
+ ~<b™s/ty³s.h
+>
+
+192
+
+ $£ekdœ
+ (
+DIR
+ *
+__dœp
+, 
+__pos
+__THROW
+;
+
+195
+
+ $‹Îdœ
+ (
+DIR
+ *
+__dœp
+__THROW
+;
+
+198 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_MISC
+
+
+201
+
+ $dœfd
+ (
+DIR
+ *
+__dœp
+__THROW
+;
+
+203 #ià
+defšed
+
+__OPTIMIZE__
+ && defšed
+_DIR_dœfd
+
+
+204 
+ #dœfd
+(
+dœp
+ `_DIR_dœfd
+ (dœp)
+
+ )
+
+207 #iâdeà
+MAXNAMLEN
+
+
+209 
+ ~<b™s/posix1_lim.h
+>
+
+212 #ifdeà
+NAME_MAX
+
+
+213 
+ #MAXNAMLEN
+
+NAME_MAX
+
+
+ )
+
+215 
+ #MAXNAMLEN
+ 255
+
+ )
+
+219 
+ #__Ãed_size_t
+
+
+ )
+
+220 
+ ~<¡ddef.h
+>
+
+226 #iâdeà
+__USE_FILE_OFFSET64
+
+
+227
+
+ `sÿndœ
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__dœ
+,
+
+228 
+dœ’t
+ ***
+__»¡riù
+
+__Çm–i¡
+,
+
+229 (*
+__£ËùÜ
+è(
+__cÚ¡
+ 
+dœ’t
+ *),
+
+230 (*
+__cmp
+è(
+__cÚ¡
+ *, __cÚ¡ *)è
+__THROW
+;
+
+232 #ifdeà
+__REDIRECT
+
+
+233
+
+ `__REDIRECT
+ (
+sÿndœ
+,
+
+234 (
+__cÚ¡
+ *
+__»¡riù
+
+__dœ
+,
+
+235 
+dœ’t
+ ***
+__»¡riù
+
+__Çm–i¡
+,
+
+236 (*
+__£ËùÜ
+è(
+__cÚ¡
+ 
+dœ’t
+ *),
+
+237 (*
+__cmp
+è(
+__cÚ¡
+ *, __cÚ¡ *)è
+__THROW
+,
+
+238
+sÿndœ64
+);
+
+240 
+ #sÿndœ
+
+sÿndœ64
+
+
+ )
+
+244 #ià
+defšed
+
+__USE_GNU
+ && defšed
+__USE_LARGEFILE64
+
+
+247
+
+ `sÿndœ64
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__dœ
+,
+
+248 
+dœ’t64
+ ***
+__»¡riù
+
+__Çm–i¡
+,
+
+249 (*
+__£ËùÜ
+è(
+__cÚ¡
+ 
+dœ’t64
+ *),
+
+250 (*
+__cmp
+è(
+__cÚ¡
+ *, __cÚ¡ *)è
+__THROW
+;
+
+254 #iâdeà
+__USE_FILE_OFFSET64
+
+
+255
+
+ $®phasÜt
+ (
+__cÚ¡
+ *
+__e1
+, __cÚ¡ *
+__e2
+)
+
+256
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+258 #ifdeà
+__REDIRECT
+
+
+259
+
+ `__REDIRECT
+ (
+®phasÜt
+,
+
+260 (
+__cÚ¡
+ *
+__e1
+, __cÚ¡ *
+__e2
+)
+
+261
+__THROW
+,
+
+262
+®phasÜt64
+__©Œibu‹_pu»__
+;
+
+264 
+ #®phasÜt
+
+®phasÜt64
+
+
+ )
+
+268 #ià
+defšed
+
+__USE_GNU
+ && defšed
+__USE_LARGEFILE64
+
+
+269
+
+ $®phasÜt64
+ (
+__cÚ¡
+ *
+__e1
+, __cÚ¡ *
+__e2
+)
+
+270
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+273 #ifdeà
+__USE_GNU
+
+
+275 #iâdeà
+__USE_FILE_OFFSET64
+
+
+276
+
+ $v”siÚsÜt
+ (
+__cÚ¡
+ *
+__e1
+, __cÚ¡ *
+__e2
+)
+
+277
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+279 #ifdeà
+__REDIRECT
+
+
+280
+
+ `__REDIRECT
+ (
+v”siÚsÜt
+,
+
+281 (
+__cÚ¡
+ *
+__e1
+, __cÚ¡ *
+__e2
+)
+
+282
+__THROW
+,
+
+283
+v”siÚsÜt64
+__©Œibu‹_pu»__
+;
+
+285 
+ #v”siÚsÜt
+
+v”siÚsÜt64
+
+
+ )
+
+289 #ifdeà
+__USE_LARGEFILE64
+
+
+290
+
+ $v”siÚsÜt64
+ (
+__cÚ¡
+ *
+__e1
+, __cÚ¡ *
+__e2
+)
+
+291
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+299 #iâdeà
+__USE_FILE_OFFSET64
+
+
+300
+__ssize_t
+
+ $g‘dœ’Œ›s
+ (
+__fd
+, *
+__»¡riù
+
+__buf
+,
+
+301
+size_t
+
+__nby‹s
+,
+
+302
+__off_t
+ *
+__»¡riù
+
+__ba£p
+__THROW
+;
+
+304 #ifdeà
+__REDIRECT
+
+
+305
+__ssize_t
+
+ `__REDIRECT
+ (
+g‘dœ’Œ›s
+,
+
+306 (
+__fd
+, *
+__»¡riù
+
+__buf
+,
+
+307
+size_t
+
+__nby‹s
+,
+
+308
+__off64_t
+ *
+__»¡riù
+
+__ba£p
+__THROW
+,
+
+309
+g‘dœ’Œ›s64
+);
+
+311 
+ #g‘dœ’Œ›s
+
+g‘dœ’Œ›s64
+
+
+ )
+
+315 #ifdeà
+__USE_LARGEFILE64
+
+
+316
+__ssize_t
+
+ $g‘dœ’Œ›s64
+ (
+__fd
+, *
+__»¡riù
+
+__buf
+,
+
+317
+size_t
+
+__nby‹s
+,
+
+318
+__off64_t
+ *
+__»¡riù
+
+__ba£p
+__THROW
+;
+
+323
+__END_DECLS
+
+
+ @/usr/include/errno.h
+
+23 #iâdef
+_ERRNO_H
+
+
+27 #iâdef
+__Ãed_Em©h
+
+
+28 
+ #_ERRNO_H
+ 1
+
+ )
+
+29 
+ ~<ã©u»s.h
+>
+
+32
+ g__BEGIN_DECLS
+
+
+36 
+ ~<b™s/”ºo.h
+>
+
+37 #undeà
+__Ãed_Em©h
+
+
+39 #ifdef
+_ERRNO_H
+
+
+46 #iâdef
+Ӽo
+
+
+47
+
+Ӽo
+;
+
+50 #ifdeà
+__USE_GNU
+
+
+55
+*
+´og¿m_švoÿtiÚ_Çme
+, *
+´og¿m_švoÿtiÚ_shÜt_Çme
+;
+
+59
+ g__END_DECLS
+
+
+67 #ià
+defšed
+
+__USE_GNU
+ || defšed
+__Ãed_”rÜ_t
+
+
+68 #iâdeà
+__”rÜ_t_defšed
+
+
+69 
+ t”rÜ_t
+;
+
+70 
+ #__”rÜ_t_defšed
+ 1
+
+ )
+
+72 #undeà
+__Ãed_”rÜ_t
+
+
+ @/usr/include/fcntl.h
+
+23 #iâdef
+_FCNTL_H
+
+
+24 
+ #_FCNTL_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+29
+ g__BEGIN_DECLS
+
+
+33 
+ ~<b™s/fúŽ.h
+>
+
+36 #ifdeà
+__USE_XOPEN
+
+
+37 
+ ~<sys/¡©.h
+>
+
+40 #ifdef
+__USE_MISC
+
+
+41 #iâdeà
+R_OK
+
+
+44 
+ #R_OK
+ 4
+
+ )
+
+45 
+ #W_OK
+ 2
+
+ )
+
+46 
+ #X_OK
+ 1
+
+ )
+
+47 
+ #F_OK
+ 0
+
+ )
+
+52 #ifdeà
+__USE_XOPEN
+
+
+53 
+ #SEEK_SET
+ 0
+
+ )
+
+54 
+ #SEEK_CUR
+ 1
+
+ )
+
+55 
+ #SEEK_END
+ 2
+
+ )
+
+60
+
+ $fúŽ
+ (
+__fd
+, 
+__cmd
+, ...è
+__THROW
+;
+
+65 #iâdeà
+__USE_FILE_OFFSET64
+
+
+66
+
+ $Ý’
+ (
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+, ...è
+__THROW
+;
+
+68 #ifdeà
+__REDIRECT
+
+
+69
+
+ `__REDIRECT
+ (
+Ý’
+, (
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+, ...è
+__THROW
+,
+
+70
+Ý’64
+);
+
+72 
+ #Ý’
+
+Ý’64
+
+
+ )
+
+75 #ifdeà
+__USE_LARGEFILE64
+
+
+76
+
+ $Ý’64
+ (
+__cÚ¡
+ *
+__fže
+, 
+__oæag
+, ...è
+__THROW
+;
+
+82 #iâdeà
+__USE_FILE_OFFSET64
+
+
+83
+
+ $ü—t
+ (
+__cÚ¡
+ *
+__fže
+,
+__mode_t
+
+__mode
+__THROW
+;
+
+85 #ifdeà
+__REDIRECT
+
+
+86
+
+ `__REDIRECT
+ (
+ü—t
+, (
+__cÚ¡
+ *
+__fže
+,
+__mode_t
+
+__mode
+__THROW
+,
+
+87
+ü—t64
+);
+
+89 
+ #ü—t
+
+ü—t64
+
+
+ )
+
+92 #ifdeà
+__USE_LARGEFILE64
+
+
+93
+
+ $ü—t64
+ (
+__cÚ¡
+ *
+__fže
+,
+__mode_t
+
+__mode
+__THROW
+;
+
+96 #ià!
+defšed
+
+F_LOCK
+ && (defšed
+__USE_MISC
+ || (defšed
+__USE_XOPEN_EXTENDED
+ \
+
+97 && !
+defšed
+
+__USE_POSIX
+))
+
+106 
+ #F_ULOCK
+ 0
+
+ )
+
+107 
+ #F_LOCK
+ 1
+
+ )
+
+108 
+ #F_TLOCK
+ 2
+
+ )
+
+109 
+ #F_TEST
+ 3
+
+ )
+
+111 #iâdeà
+__USE_FILE_OFFSET64
+
+
+112
+
+ $lockf
+ (
+__fd
+, 
+__cmd
+,
+__off_t
+
+__Ën
+__THROW
+;
+
+114 #ifdeà
+__REDIRECT
+
+
+115
+
+ `__REDIRECT
+ (
+lockf
+, (
+__fd
+, 
+__cmd
+,
+__off64_t
+
+__Ën
+__THROW
+,
+
+116
+lockf64
+);
+
+118 
+ #lockf
+
+lockf64
+
+
+ )
+
+121 #ifdeà
+__USE_LARGEFILE64
+
+
+122
+
+ $lockf64
+ (
+__fd
+, 
+__cmd
+,
+__off64_t
+
+__Ën
+__THROW
+;
+
+126 #ifdeà
+__USE_XOPEN2K
+
+
+129 #iâdeà
+__USE_FILE_OFFSET64
+
+
+130
+
+ $posix_çdvi£
+ (
+__fd
+,
+__off_t
+
+__off£t
+,
+size_t
+
+__Ën
+,
+
+131 
+__advi£
+__THROW
+;
+
+133 #ifdeà
+__REDIRECT
+
+
+134
+
+ `__REDIRECT
+ (
+posix_çdvi£
+, (
+__fd
+,
+__off64_t
+
+__off£t
+,
+
+135
+size_t
+
+__Ën
+, 
+__advi£
+__THROW
+,
+
+136
+posix_çdvi£64
+);
+
+138 
+ #posix_çdvi£
+
+posix_çdvi£64
+
+
+ )
+
+141 #ifdeà
+__USE_LARGEFILE64
+
+
+142
+
+ $posix_çdvi£64
+ (
+__fd
+,
+__off64_t
+
+__off£t
+,
+size_t
+
+__Ën
+,
+
+143 
+__advi£
+__THROW
+;
+
+148 #iâdeà
+__USE_FILE_OFFSET64
+
+
+149
+
+ $posix_çÎoÿ‹
+ (
+__fd
+,
+__off_t
+
+__off£t
+,
+size_t
+
+__Ën
+__THROW
+;
+
+151 #ifdeà
+__REDIRECT
+
+
+152
+
+ `__REDIRECT
+ (
+posix_çÎoÿ‹
+, (
+__fd
+,
+__off64_t
+
+__off£t
+,
+
+153
+size_t
+
+__Ën
+__THROW
+,
+
+154
+posix_çÎoÿ‹64
+);
+
+156 
+ #posix_çÎoÿ‹
+
+posix_çÎoÿ‹64
+
+
+ )
+
+159 #ifdeà
+__USE_LARGEFILE64
+
+
+160
+
+ $posix_çÎoÿ‹64
+ (
+__fd
+,
+__off64_t
+
+__off£t
+,
+size_t
+
+__Ën
+)
+
+161
+__THROW
+;
+
+165
+__END_DECLS
+
+
+ @/usr/include/gdbm.h
+
+30 #iâdeà
+_GDBM_H_
+
+
+31 
+ #_GDBM_H_
+
+
+ )
+
+35 
+ #GDBM_READER
+ 0
+
+ )
+
+36 
+ #GDBM_WRITER
+ 1
+
+ )
+
+37 
+ #GDBM_WRCREAT
+ 2
+
+ )
+
+38 
+ #GDBM_NEWDB
+ 3
+
+ )
+
+39 
+ #GDBM_FAST
+ 0x10
+
+ )
+
+40 
+ #GDBM_SYNC
+ 0x20
+
+ )
+
+41 
+ #GDBM_NOLOCK
+ 0x40
+
+ )
+
+45 
+ #GDBM_INSERT
+ 0
+
+ )
+
+46 
+ #GDBM_REPLACE
+ 1
+
+ )
+
+49 
+ #GDBM_CACHESIZE
+ 1
+
+ )
+
+50 
+ #GDBM_FASTMODE
+ 2
+
+ )
+
+51 
+ #GDBM_SYNCMODE
+ 3
+
+ )
+
+52 
+ #GDBM_CENTFREE
+ 4
+
+ )
+
+53 
+ #GDBM_COALESCEBLKS
+ 5
+
+ )
+
+57 *
+ md±r
+;
+
+58 
+ mdsize
+;
+
+59 }
+ td©um
+;
+
+63 ¡ruù {
+ mdummy
+[10];} *
+ tGDBM_FILE
+;
+
+66 #iâdeà
+__P
+
+
+67 #ià
+defšed
+(
+__STDC__
+è|| defšed(
+__ýlu¥lus
+è|| defšed(
+c_¶u¥lus
+)
+
+68 
+ #__P
+(
+x
+ )
+x
+
+70 
+ #__P
+(
+x
+è()
+
+ )
+
+75
+*
+gdbm_v”siÚ
+;
+
+79 #ià
+defšed
+(
+__ýlu¥lus
+è|| defšed(
+c_¶u¥lus
+)
+
+85
+GDBM_FILE
+
+gdbm_Ý’
+
+__P
+((*, , , , (*)()));
+
+86
+
+gdbm_þo£
+
+__P
+((
+GDBM_FILE
+));
+
+87
+
+gdbm_¡Üe
+
+__P
+((
+GDBM_FILE
+,
+d©um
+, datum, ));
+
+88
+d©um
+
+gdbm_ãtch
+
+__P
+((
+GDBM_FILE
+, datum));
+
+89
+
+gdbm_d–‘e
+
+__P
+((
+GDBM_FILE
+,
+d©um
+));
+
+90
+d©um
+
+gdbm_fœ¡key
+
+__P
+((
+GDBM_FILE
+));
+
+91
+d©um
+
+gdbm_Ãxtkey
+
+__P
+((
+GDBM_FILE
+, datum));
+
+92
+
+gdbm_»Ügªize
+
+__P
+((
+GDBM_FILE
+));
+
+93
+
+gdbm_sync
+
+__P
+((
+GDBM_FILE
+));
+
+94
+
+gdbm_exi¡s
+
+__P
+((
+GDBM_FILE
+,
+d©um
+));
+
+95
+
+gdbm_£tÝt
+
+__P
+((
+GDBM_FILE
+, , *, ));
+
+96
+
+gdbm_fdesc
+
+__P
+((
+GDBM_FILE
+));
+
+98 #ià
+defšed
+(
+__ýlu¥lus
+è|| defšed(
+c_¶u¥lus
+)
+
+102 
+ #GDBM_NO_ERROR
+ 0
+
+ )
+
+103 
+ #GDBM_MALLOC_ERROR
+ 1
+
+ )
+
+104 
+ #GDBM_BLOCK_SIZE_ERROR
+ 2
+
+ )
+
+105 
+ #GDBM_FILE_OPEN_ERROR
+ 3
+
+ )
+
+106 
+ #GDBM_FILE_WRITE_ERROR
+ 4
+
+ )
+
+107 
+ #GDBM_FILE_SEEK_ERROR
+ 5
+
+ )
+
+108 
+ #GDBM_FILE_READ_ERROR
+ 6
+
+ )
+
+109 
+ #GDBM_BAD_MAGIC_NUMBER
+ 7
+
+ )
+
+110 
+ #GDBM_EMPTY_DATABASE
+ 8
+
+ )
+
+111 
+ #GDBM_CANT_BE_READER
+ 9
+
+ )
+
+112 
+ #GDBM_CANT_BE_WRITER
+ 10
+
+ )
+
+113 
+ #GDBM_READER_CANT_DELETE
+ 11
+
+ )
+
+114 
+ #GDBM_READER_CANT_STORE
+ 12
+
+ )
+
+115 
+ #GDBM_READER_CANT_REORGANIZE
+ 13
+
+ )
+
+116 
+ #GDBM_UNKNOWN_UPDATE
+ 14
+
+ )
+
+117 
+ #GDBM_ITEM_NOT_FOUND
+ 15
+
+ )
+
+118 
+ #GDBM_REORGANIZE_FAILED
+ 16
+
+ )
+
+119 
+ #GDBM_CANNOT_REPLACE
+ 17
+
+ )
+
+120 
+ #GDBM_ILLEGAL_DATA
+ 18
+
+ )
+
+121 
+ #GDBM_OPT_ALREADY_SET
+ 19
+
+ )
+
+122 
+ #GDBM_OPT_ILLEGAL
+ 29
+
+ )
+
+123 
+ tgdbm_”rÜ
+;
+
+124
+gdbm_”rÜ
+
+gdbm_Ӽo
+;
+
+129 #ià
+defšed
+(
+__ýlu¥lus
+è|| defšed(
+c_¶u¥lus
+)
+
+133
+*
+gdbm_¡»¼Ü
+
+__P
+((
+gdbm_”rÜ
+));
+
+135 #ià
+defšed
+(
+__ýlu¥lus
+è|| defšed(
+c_¶u¥lus
+)
+
+ @/usr/include/grp.h
+
+23 #iâdef
+_GRP_H
+
+
+24 
+ #_GRP_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28
+ g__BEGIN_DECLS
+
+
+30 
+ ~<b™s/ty³s.h
+>
+
+32 
+ #__Ãed_size_t
+
+
+ )
+
+33 
+ ~<¡ddef.h
+>
+
+37 #ià
+defšed
+
+__USE_XOPEN
+ && !defšed
+__gid_t_defšed
+
+
+38 
+__gid_t
+
+ tgid_t
+;
+
+39 
+ #__gid_t_defšed
+
+
+ )
+
+43 
+ sgroup
+
+
+45 *
+ mgr_Çme
+;
+
+46 *
+ mgr_·sswd
+;
+
+47
+__gid_t
+
+ mgr_gid
+;
+
+48 **
+ mgr_mem
+;
+
+52 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_GNU
+
+
+53 
+ #__Ãed_FILE
+
+
+ )
+
+54 
+ ~<¡dio.h
+>
+
+58 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+60
+
+ $£tg»Á
+ (è
+__THROW
+;
+
+63
+
+ $’dg»Á
+ (è
+__THROW
+;
+
+66
+
+group
+ *
+ $g‘g»Á
+ (è
+__THROW
+;
+
+69 #ifdef
+__USE_SVID
+
+
+71
+
+group
+ *
+ $fg‘g»Á
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+74 #ifdeà
+__USE_GNU
+
+
+76
+
+ $putg»Á
+ (
+__cÚ¡
+ 
+group
+ *
+__»¡riù
+
+__p
+,
+
+77
+FILE
+ *
+__»¡riù
+
+__f
+__THROW
+;
+
+81
+
+group
+ *
+ $g‘grgid
+ (
+__gid_t
+
+__gid
+__THROW
+;
+
+84
+
+group
+ *
+ $g‘gºam
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+86 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+88 #ifdeà
+__USE_MISC
+
+
+91 
+ #NSS_BUFLEN_GROUP
+ 1024
+
+ )
+
+102 #ifdeà
+__USE_GNU
+
+
+103
+
+ $g‘g»Á_r
+ (
+group
+ *
+__»¡riù
+
+__»suÉbuf
+,
+
+104 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+105 
+group
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+109
+
+ $g‘grgid_r
+ (
+__gid_t
+
+__gid
+, 
+group
+ *
+__»¡riù
+
+__»suÉbuf
+,
+
+110 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+111 
+group
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+114
+
+ $g‘gºam_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+115 
+group
+ *
+__»¡riù
+
+__»suÉbuf
+,
+
+116 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+117 
+group
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+119 #ifdef
+__USE_SVID
+
+
+122
+
+ $fg‘g»Á_r
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+,
+
+123 
+group
+ *
+__»¡riù
+
+__»suÉbuf
+,
+
+124 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+125 
+group
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+131 #ifdef
+__USE_BSD
+
+
+133 
+ #__Ãed_size_t
+
+
+ )
+
+134 
+ ~<¡ddef.h
+>
+
+137
+
+ $£tgroups
+ (
+size_t
+
+__n
+,
+__cÚ¡
+
+__gid_t
+ *
+__groups
+__THROW
+;
+
+142
+
+ $g‘grou¶i¡
+ (
+__cÚ¡
+ *
+__u£r
+,
+__gid_t
+
+__group
+,
+
+143
+__gid_t
+ *
+__groups
+, *
+__ngroups
+__THROW
+;
+
+148
+
+ $š™groups
+ (
+__cÚ¡
+ *
+__u£r
+,
+__gid_t
+
+__group
+__THROW
+;
+
+152
+__END_DECLS
+
+
+ @/usr/include/netdb.h
+
+23 #iâdef
+_NETDB_H
+
+
+24 
+ #_NETDB_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28 
+ ~<Ãtš‘/š.h
+>
+
+29 
+ ~<¡dšt.h
+>
+
+30 #ifdeà
+__USE_MISC
+
+
+33 
+ ~<½c/Ãtdb.h
+>
+
+36 #ifdeà
+__USE_GNU
+
+
+37 
+ #__Ãed_sigev’t_t
+
+
+ )
+
+38 
+ ~<b™s/sigšfo.h
+>
+
+39 
+ #__Ãed_time¥ec
+
+
+ )
+
+40 
+ ~<time.h
+>
+
+43 
+ ~<b™s/Ãtdb.h
+>
+
+46 
+ #_PATH_HEQUIV
+ "/‘c/ho¡s.equiv"
+
+ )
+
+47 
+ #_PATH_HOSTS
+ "/‘c/ho¡s"
+
+ )
+
+48 
+ #_PATH_NETWORKS
+ "/‘c/ÃtwÜks"
+
+ )
+
+49 
+ #_PATH_NSSWITCH_CONF
+ "/‘c/nssw™ch.cÚf"
+
+ )
+
+50 
+ #_PATH_PROTOCOLS
+ "/‘c/´ÙocÞs"
+
+ )
+
+51 
+ #_PATH_SERVICES
+ "/‘c/£rviûs"
+
+ )
+
+54
+__BEGIN_DECLS
+
+
+57
+
+h_Ӽo
+;
+
+60
+*
+ $__h_”ºo_loÿtiÚ
+ (è
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+62 #ifdeà
+_LIBC
+
+
+63 #ifdeà
+_LIBC_REENTRANT
+
+
+64 
+šlše
+ 
+
+65
+ $__£t_h_”ºo
+ (
+__”r
+)
+
+67  *
+ `__h_”ºo_loÿtiÚ
+ (èð
+__”r
+;
+
+68
+ }
+}
+
+70 
+ #__£t_h_”ºo
+(
+x
+è(
+h_Ӽo
+ = (x))
+
+ )
+
+75 #ià!
+defšed
+
+_LIBC
+ || defšed
+_LIBC_REENTRANT
+
+
+77 
+ #h_Ӽo
+ (*
+ `__h_”ºo_loÿtiÚ
+ ())
+
+ )
+
+82 
+ #NETDB_INTERNAL
+ -1
+
+ )
+
+83 
+ #NETDB_SUCCESS
+ 0
+
+ )
+
+84 
+ #HOST_NOT_FOUND
+ 1
+
+ )
+
+85 
+ #TRY_AGAIN
+ 2
+
+ )
+
+87 
+ #NO_RECOVERY
+ 3
+
+ )
+
+89 
+ #NO_DATA
+ 4
+
+ )
+
+91 
+ #NO_ADDRESS
+
+NO_DATA
+
+
+ )
+
+93 #ifdeà
+__USE_XOPEN2K
+
+
+95 
+ #IPPORT_RESERVED
+ 1024
+
+ )
+
+98 #ifdeà
+__USE_GNU
+
+
+100 
+ #SCOPE_DELIMITER
+ '%'
+
+ )
+
+105
+
+ $h”rÜ
+ (
+__cÚ¡
+ *
+__¡r
+__THROW
+;
+
+108
+__cÚ¡
+ *
+ $h¡»¼Ü
+ (
+__”r_num
+__THROW
+;
+
+113 
+ sho¡’t
+
+
+115 *
+h_Çme
+;
+
+116 **
+h_®Ÿ£s
+;
+
+117 
+h_add¹y³
+;
+
+118 
+h_Ëngth
+;
+
+119 **
+h_addr_li¡
+;
+
+120 
+ #h_addr
+
+h_addr_li¡
+[0]
+
+ )
+
+125
+
+ $£tho¡’t
+ (
+__¡ay_Ý’
+__THROW
+;
+
+128
+
+ $’dho¡’t
+ (è
+__THROW
+;
+
+132
+
+ho¡’t
+ *
+ $g‘ho¡’t
+ (è
+__THROW
+;
+
+136
+
+ho¡’t
+ *
+ $g‘ho¡byaddr
+ (
+__cÚ¡
+ *
+__addr
+,
+__sockËn_t
+
+__Ën
+,
+
+137 
+__ty³
+__THROW
+;
+
+140
+
+ho¡’t
+ *
+ $g‘ho¡byÇme
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+142 #ifdeà
+__USE_MISC
+
+
+146
+
+ho¡’t
+ *
+ $g‘ho¡byÇme2
+ (
+__cÚ¡
+ *
+__Çme
+, 
+__af
+__THROW
+;
+
+153
+
+ $g‘ho¡’t_r
+ (
+ho¡’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+154 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+155 
+ho¡’t
+ **
+__»¡riù
+
+__»suÉ
+,
+
+156 *
+__»¡riù
+
+__h_”ºÝ
+__THROW
+;
+
+158
+
+ $g‘ho¡byaddr_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__addr
+,
+__sockËn_t
+
+__Ën
+,
+
+159 
+__ty³
+,
+
+160 
+ho¡’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+161 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+162 
+ho¡’t
+ **
+__»¡riù
+
+__»suÉ
+,
+
+163 *
+__»¡riù
+
+__h_”ºÝ
+__THROW
+;
+
+165
+
+ $g‘ho¡byÇme_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+166 
+ho¡’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+167 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+168 
+ho¡’t
+ **
+__»¡riù
+
+__»suÉ
+,
+
+169 *
+__»¡riù
+
+__h_”ºÝ
+__THROW
+;
+
+171
+
+ $g‘ho¡byÇme2_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+, 
+__af
+,
+
+172 
+ho¡’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+173 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+174 
+ho¡’t
+ **
+__»¡riù
+
+__»suÉ
+,
+
+175 *
+__»¡riù
+
+__h_”ºÝ
+__THROW
+;
+
+181
+
+ $£Š‘’t
+ (
+__¡ay_Ý’
+__THROW
+;
+
+184
+
+ $’dËÁ
+ (è
+__THROW
+;
+
+188
+
+ËÁ
+ *
+ $g‘ËÁ
+ (è
+__THROW
+;
+
+192
+
+ËÁ
+ *
+ $g‘Ãtbyaddr
+ (
+ušt32_t
+
+__Ãt
+, 
+__ty³
+)
+
+193
+__THROW
+;
+
+196
+
+ËÁ
+ *
+ $g‘ÃtbyÇme
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+198 #ifdef
+__USE_MISC
+
+
+204
+
+ $g‘ËÁ_r
+ (
+ËÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+205 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+206 
+ËÁ
+ **
+__»¡riù
+
+__»suÉ
+,
+
+207 *
+__»¡riù
+
+__h_”ºÝ
+__THROW
+;
+
+209
+
+ $g‘Ãtbyaddr_r
+ (
+ušt32_t
+
+__Ãt
+, 
+__ty³
+,
+
+210 
+ËÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+211 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+212 
+ËÁ
+ **
+__»¡riù
+
+__»suÉ
+,
+
+213 *
+__»¡riù
+
+__h_”ºÝ
+__THROW
+;
+
+215
+
+ $g‘ÃtbyÇme_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+216 
+ËÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+217 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+218 
+ËÁ
+ **
+__»¡riù
+
+__»suÉ
+,
+
+219 *
+__»¡riù
+
+__h_”ºÝ
+__THROW
+;
+
+224 
+ s£rv’t
+
+
+226 *
+s_Çme
+;
+
+227 **
+s_®Ÿ£s
+;
+
+228 
+s_pÜt
+;
+
+229 *
+s_´Ùo
+;
+
+234
+
+ $£t£rv’t
+ (
+__¡ay_Ý’
+__THROW
+;
+
+237
+
+ $’d£rv’t
+ (è
+__THROW
+;
+
+241
+
+£rv’t
+ *
+ $g‘£rv’t
+ (è
+__THROW
+;
+
+245
+
+£rv’t
+ *
+ $g‘£rvbyÇme
+ (
+__cÚ¡
+ *
+__Çme
+,
+
+246
+__cÚ¡
+ *
+__´Ùo
+__THROW
+;
+
+250
+
+£rv’t
+ *
+ $g‘£rvbypÜt
+ (
+__pÜt
+,
+__cÚ¡
+ *
+__´Ùo
+)
+
+251
+__THROW
+;
+
+254 #ifdef
+__USE_MISC
+
+
+257
+
+ $g‘£rv’t_r
+ (
+£rv’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+258 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+259 
+£rv’t
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+261
+
+ $g‘£rvbyÇme_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+262
+__cÚ¡
+ *
+__»¡riù
+
+__´Ùo
+,
+
+263 
+£rv’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+264 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+265 
+£rv’t
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+267
+
+ $g‘£rvbypÜt_r
+ (
+__pÜt
+,
+__cÚ¡
+ *
+__»¡riù
+
+__´Ùo
+,
+
+268 
+£rv’t
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+269 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+270 
+£rv’t
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+275 
+ s´ÙÛÁ
+
+
+277 *
+p_Çme
+;
+
+278 **
+p_®Ÿ£s
+;
+
+279 
+p_´Ùo
+;
+
+284
+
+ $£rÙÛÁ
+ (
+__¡ay_Ý’
+__THROW
+;
+
+287
+
+ $’d´ÙÛÁ
+ (è
+__THROW
+;
+
+291
+
+´ÙÛÁ
+ *
+ $g‘´ÙÛÁ
+ (è
+__THROW
+;
+
+294
+
+´ÙÛÁ
+ *
+ $g‘´ÙobyÇme
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+297
+
+´ÙÛÁ
+ *
+ $g‘´Ùobynumb”
+ (
+__´Ùo
+__THROW
+;
+
+300 #ifdef
+__USE_MISC
+
+
+303
+
+ $g‘´ÙÛÁ_r
+ (
+´ÙÛÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+304 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+305 
+´ÙÛÁ
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+307
+
+ $g‘´ÙobyÇme_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+308 
+´ÙÛÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+309 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+310 
+´ÙÛÁ
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+312
+
+ $g‘´Ùobynumb”_r
+ (
+__´Ùo
+,
+
+313 
+´ÙÛÁ
+ *
+__»¡riù
+
+__»suÉ_buf
+,
+
+314 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__buæ’
+,
+
+315 
+´ÙÛÁ
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+320
+
+ $£Š‘g»Á
+ (
+__cÚ¡
+ *
+__Ãtgroup
+__THROW
+;
+
+323
+
+ $’dÃtg»Á
+ (è
+__THROW
+;
+
+327
+
+ $g‘Ãtg»Á
+ (**
+__»¡riù
+
+__ho¡p
+,
+
+328 **
+__»¡riù
+
+__u£½
+,
+
+329 **
+__»¡riù
+
+__domašp
+__THROW
+;
+
+331 #ifdef
+__USE_MISC
+
+
+333
+
+ $šÃtgr
+ (
+__cÚ¡
+ *
+__Ãtgroup
+, __cÚ¡ *
+__ho¡
+,
+
+334
+__cÚ¡
+ *
+__u£r
+, __cÚ¡ *
+domaš
+__THROW
+;
+
+337
+
+ $g‘Ãtg»Á_r
+ (**
+__»¡riù
+
+__ho¡p
+,
+
+338 **
+__»¡riù
+
+__u£½
+,
+
+339 **
+__»¡riù
+
+__domašp
+,
+
+340 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+__THROW
+;
+
+344 #ifdeà
+__USE_BSD
+
+
+351
+
+ $rcmd
+ (**
+__»¡riù
+
+__aho¡
+, 
+__½Üt
+,
+
+352
+__cÚ¡
+ *
+__»¡riù
+
+__locu£r
+,
+
+353
+__cÚ¡
+ *
+__»¡riù
+
+__»mu£r
+,
+
+354
+__cÚ¡
+ *
+__»¡riù
+
+__cmd
+, *__»¡riù
+__fd2p
+)
+
+355
+__THROW
+;
+
+359
+
+ $rcmd_af
+ (**
+__»¡riù
+
+__aho¡
+, 
+__½Üt
+,
+
+360
+__cÚ¡
+ *
+__»¡riù
+
+__locu£r
+,
+
+361
+__cÚ¡
+ *
+__»¡riù
+
+__»mu£r
+,
+
+362
+__cÚ¡
+ *
+__»¡riù
+
+__cmd
+, *__»¡riù
+__fd2p
+,
+
+363
+§_çmžy_t
+
+__af
+__THROW
+;
+
+370
+
+ $»xec
+ (**
+__»¡riù
+
+__aho¡
+, 
+__½Üt
+,
+
+371
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+372
+__cÚ¡
+ *
+__»¡riù
+
+__·ss
+,
+
+373
+__cÚ¡
+ *
+__»¡riù
+
+__cmd
+, *__»¡riù
+__fd2p
+)
+
+374
+__THROW
+;
+
+378
+
+ $»xec_af
+ (**
+__»¡riù
+
+__aho¡
+, 
+__½Üt
+,
+
+379
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+380
+__cÚ¡
+ *
+__»¡riù
+
+__·ss
+,
+
+381
+__cÚ¡
+ *
+__»¡riù
+
+__cmd
+, *__»¡riù
+__fd2p
+,
+
+382
+§_çmžy_t
+
+__af
+__THROW
+;
+
+387
+
+ $ru£rok
+ (
+__cÚ¡
+ *
+__rho¡
+, 
+__su£r
+,
+
+388
+__cÚ¡
+ *
+__»mu£r
+, __cÚ¡ *
+__locu£r
+__THROW
+;
+
+392
+
+ $ru£rok_af
+ (
+__cÚ¡
+ *
+__rho¡
+, 
+__su£r
+,
+
+393
+__cÚ¡
+ *
+__»mu£r
+, __cÚ¡ *
+__locu£r
+,
+
+394
+§_çmžy_t
+
+__af
+__THROW
+;
+
+399
+
+ $¼esvpÜt
+ (*
+__®pÜt
+__THROW
+;
+
+403
+
+ $¼esvpÜt_af
+ (*
+__®pÜt
+,
+§_çmžy_t
+
+__af
+__THROW
+;
+
+408 #ifdef
+__USE_POSIX
+
+
+410 
+ saddršfo
+
+
+412 
+ai_æags
+;
+
+413 
+ai_çmžy
+;
+
+414 
+ai_sockty³
+;
+
+415 
+ai_´ÙocÞ
+;
+
+416
+sockËn_t
+
+ai_add¾’
+;
+
+417 
+sockaddr
+ *
+ai_addr
+;
+
+418 *
+ai_ÿnÚÇme
+;
+
+419 
+addršfo
+ *
+ai_Ãxt
+;
+
+422 #ifdeà
+__USE_GNU
+
+
+424 
+ sgaicb
+
+
+426 cÚ¡ *
+¬_Çme
+;
+
+427 cÚ¡ *
+¬_£rviû
+;
+
+428 cÚ¡ 
+addršfo
+ *
+¬_»que¡
+;
+
+429 
+addršfo
+ *
+¬_»suÉ
+;
+
+431 
+__»tuº
+;
+
+432 
+__unu£d
+[5];
+
+436 
+ #GAI_WAIT
+ 0
+
+ )
+
+437 
+ #GAI_NOWAIT
+ 1
+
+ )
+
+441 
+ #AI_PASSIVE
+ 0x0001
+
+ )
+
+442 
+ #AI_CANONNAME
+ 0x0002
+
+ )
+
+443 
+ #AI_NUMERICHOST
+ 0x0004
+
+ )
+
+446 
+ #EAI_BADFLAGS
+ -1
+
+ )
+
+447 
+ #EAI_NONAME
+ -2
+
+ )
+
+448 
+ #EAI_AGAIN
+ -3
+
+ )
+
+449 
+ #EAI_FAIL
+ -4
+
+ )
+
+450 
+ #EAI_NODATA
+ -5
+
+ )
+
+451 
+ #EAI_FAMILY
+ -6
+
+ )
+
+452 
+ #EAI_SOCKTYPE
+ -7
+
+ )
+
+453 
+ #EAI_SERVICE
+ -8
+
+ )
+
+454 
+ #EAI_ADDRFAMILY
+ -9
+
+ )
+
+455 
+ #EAI_MEMORY
+ -10
+
+ )
+
+456 
+ #EAI_SYSTEM
+ -11
+
+ )
+
+457 #ifdeà
+__USE_GNU
+
+
+458 
+ #EAI_INPROGRESS
+ -100
+
+ )
+
+459 
+ #EAI_CANCELED
+ -101
+
+ )
+
+460 
+ #EAI_NOTCANCELED
+ -102
+
+ )
+
+461 
+ #EAI_ALLDONE
+ -103
+
+ )
+
+462 
+ #EAI_INTR
+ -104
+
+ )
+
+465 
+ #NI_MAXHOST
+ 1025
+
+ )
+
+466 
+ #NI_MAXSERV
+ 32
+
+ )
+
+468 
+ #NI_NUMERICHOST
+ 1
+
+ )
+
+469 
+ #NI_NUMERICSERV
+ 2
+
+ )
+
+470 
+ #NI_NOFQDN
+ 4
+
+ )
+
+471 
+ #NI_NAMEREQD
+ 8
+
+ )
+
+472 
+ #NI_DGRAM
+ 16
+
+ )
+
+476
+
+ $g‘addršfo
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+477
+__cÚ¡
+ *
+__»¡riù
+
+__£rviû
+,
+
+478
+__cÚ¡
+ 
+addršfo
+ *
+__»¡riù
+
+__»q
+,
+
+479 
+addršfo
+ **
+__»¡riù
+
+__·i
+__THROW
+;
+
+482
+
+ $ä“addršfo
+ (
+addršfo
+ *
+__ai
+__THROW
+;
+
+485
+__cÚ¡
+ *
+ $gai_¡»¼Ü
+ (
+__ecode
+__THROW
+;
+
+488
+
+ $g‘Çmešfo
+ (
+__cÚ¡
+ 
+sockaddr
+ *
+__»¡riù
+
+__§
+,
+
+489
+sockËn_t
+
+__§Ën
+, *
+__»¡riù
+
+__ho¡
+,
+
+490
+sockËn_t
+
+__ho¡Ën
+, *
+__»¡riù
+
+__£rv
+,
+
+491
+sockËn_t
+
+__£rvËn
+, 
+__æags
+__THROW
+;
+
+493 #ifdeà
+__USE_GNU
+
+
+497
+
+ $g‘addršfo_a
+ (
+__mode
+, 
+gaicb
+ *
+__li¡
+[
+__»¡riù_¬r
+],
+
+498 
+__’t
+, 
+sigev’t
+ *
+__»¡riù
+
+__sig
+)
+
+499
+__THROW
+;
+
+504
+
+ $gai_su¥’d
+ (
+__cÚ¡
+ 
+gaicb
+ *__cÚ¡
+__li¡
+[], 
+__’t
+,
+
+505
+__cÚ¡
+ 
+time¥ec
+ *
+__timeout
+__THROW
+;
+
+508
+
+ $gai_”rÜ
+ (
+gaicb
+ *
+__»q
+__THROW
+;
+
+511
+
+ $gai_ÿnûl
+ (
+gaicb
+ *
+__gaicbp
+__THROW
+;
+
+515
+__END_DECLS
+
+
+ @/usr/include/netinet/in.h
+
+19 #iâdef
+_NETINET_IN_H
+
+
+20 
+ #_NETINET_IN_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+23 
+ ~<¡dšt.h
+>
+
+24 
+ ~<b™s/ty³s.h
+>
+
+27
+__BEGIN_DECLS
+
+
+32
+ mIPPROTO_IP
+ = 0,
+
+33 
+ #IPPROTO_IP
+
+IPPROTO_IP
+
+
+ )
+
+34
+ mIPPROTO_HOPOPTS
+ = 0,
+
+35 
+ #IPPROTO_HOPOPTS
+
+IPPROTO_HOPOPTS
+
+
+ )
+
+36
+ mIPPROTO_ICMP
+ = 1,
+
+37 
+ #IPPROTO_ICMP
+
+IPPROTO_ICMP
+
+
+ )
+
+38
+ mIPPROTO_IGMP
+ = 2,
+
+39 
+ #IPPROTO_IGMP
+
+IPPROTO_IGMP
+
+
+ )
+
+40
+ mIPPROTO_IPIP
+ = 4,
+
+41 
+ #IPPROTO_IPIP
+
+IPPROTO_IPIP
+
+
+ )
+
+42
+ mIPPROTO_TCP
+ = 6,
+
+43 
+ #IPPROTO_TCP
+
+IPPROTO_TCP
+
+
+ )
+
+44
+ mIPPROTO_EGP
+ = 8,
+
+45 
+ #IPPROTO_EGP
+
+IPPROTO_EGP
+
+
+ )
+
+46
+ mIPPROTO_PUP
+ = 12,
+
+47 
+ #IPPROTO_PUP
+
+IPPROTO_PUP
+
+
+ )
+
+48
+ mIPPROTO_UDP
+ = 17,
+
+49 
+ #IPPROTO_UDP
+
+IPPROTO_UDP
+
+
+ )
+
+50
+ mIPPROTO_IDP
+ = 22,
+
+51 
+ #IPPROTO_IDP
+
+IPPROTO_IDP
+
+
+ )
+
+52
+ mIPPROTO_TP
+ = 29,
+
+53 
+ #IPPROTO_TP
+
+IPPROTO_TP
+
+
+ )
+
+54
+ mIPPROTO_IPV6
+ = 41,
+
+55 
+ #IPPROTO_IPV6
+
+IPPROTO_IPV6
+
+
+ )
+
+56
+ mIPPROTO_ROUTING
+ = 43,
+
+57 
+ #IPPROTO_ROUTING
+
+IPPROTO_ROUTING
+
+
+ )
+
+58
+ mIPPROTO_FRAGMENT
+ = 44,
+
+59 
+ #IPPROTO_FRAGMENT
+
+IPPROTO_FRAGMENT
+
+
+ )
+
+60
+ mIPPROTO_RSVP
+ = 46,
+
+61 
+ #IPPROTO_RSVP
+
+IPPROTO_RSVP
+
+
+ )
+
+62
+ mIPPROTO_GRE
+ = 47,
+
+63 
+ #IPPROTO_GRE
+
+IPPROTO_GRE
+
+
+ )
+
+64
+ mIPPROTO_ESP
+ = 50,
+
+65 
+ #IPPROTO_ESP
+
+IPPROTO_ESP
+
+
+ )
+
+66
+ mIPPROTO_AH
+ = 51,
+
+67 
+ #IPPROTO_AH
+
+IPPROTO_AH
+
+
+ )
+
+68
+ mIPPROTO_ICMPV6
+ = 58,
+
+69 
+ #IPPROTO_ICMPV6
+
+IPPROTO_ICMPV6
+
+
+ )
+
+70
+ mIPPROTO_NONE
+ = 59,
+
+71 
+ #IPPROTO_NONE
+
+IPPROTO_NONE
+
+
+ )
+
+72
+ mIPPROTO_DSTOPTS
+ = 60,
+
+73 
+ #IPPROTO_DSTOPTS
+
+IPPROTO_DSTOPTS
+
+
+ )
+
+74
+ mIPPROTO_MTP
+ = 92,
+
+75 
+ #IPPROTO_MTP
+
+IPPROTO_MTP
+
+
+ )
+
+76
+ mIPPROTO_ENCAP
+ = 98,
+
+77 
+ #IPPROTO_ENCAP
+
+IPPROTO_ENCAP
+
+
+ )
+
+78
+ mIPPROTO_PIM
+ = 103,
+
+79 
+ #IPPROTO_PIM
+
+IPPROTO_PIM
+
+
+ )
+
+80
+ mIPPROTO_COMP
+ = 108,
+
+81 
+ #IPPROTO_COMP
+
+IPPROTO_COMP
+
+
+ )
+
+82
+ mIPPROTO_RAW
+ = 255,
+
+83 
+ #IPPROTO_RAW
+
+IPPROTO_RAW
+
+
+ )
+
+84
+ mIPPROTO_MAX
+
+
+89 
+ušt16_t
+
+ tš_pÜt_t
+;
+
+94
+ mIPPORT_ECHO
+ = 7,
+
+95
+ mIPPORT_DISCARD
+ = 9,
+
+96
+ mIPPORT_SYSTAT
+ = 11,
+
+97
+ mIPPORT_DAYTIME
+ = 13,
+
+98
+ mIPPORT_NETSTAT
+ = 15,
+
+99
+ mIPPORT_FTP
+ = 21,
+
+100
+ mIPPORT_TELNET
+ = 23,
+
+101
+ mIPPORT_SMTP
+ = 25,
+
+102
+ mIPPORT_TIMESERVER
+ = 37,
+
+103
+ mIPPORT_NAMESERVER
+ = 42,
+
+104
+ mIPPORT_WHOIS
+ = 43,
+
+105
+ mIPPORT_MTP
+ = 57,
+
+107
+ mIPPORT_TFTP
+ = 69,
+
+108
+ mIPPORT_RJE
+ = 77,
+
+109
+ mIPPORT_FINGER
+ = 79,
+
+110
+ mIPPORT_TTYLINK
+ = 87,
+
+111
+ mIPPORT_SUPDUP
+ = 95,
+
+114
+ mIPPORT_EXECSERVER
+ = 512,
+
+115
+ mIPPORT_LOGINSERVER
+ = 513,
+
+116
+ mIPPORT_CMDSERVER
+ = 514,
+
+117
+ mIPPORT_EFSSERVER
+ = 520,
+
+120
+ mIPPORT_BIFFUDP
+ = 512,
+
+121
+ mIPPORT_WHOSERVER
+ = 513,
+
+122
+ mIPPORT_ROUTESERVER
+ = 520,
+
+125
+ mIPPORT_RESERVED
+ = 1024,
+
+128
+ mIPPORT_USERRESERVED
+ = 5000
+
+133 
+ušt32_t
+
+ tš_addr_t
+;
+
+134 
+ sš_addr
+
+
+136
+š_addr_t
+
+ ms_addr
+;
+
+145 
+ #IN_CLASSA
+(
+a
+è((((
+š_addr_t
+)×)è& 0x80000000è=ð0)
+
+ )
+
+146 
+ #IN_CLASSA_NET
+ 0xff000000
+
+ )
+
+147 
+ #IN_CLASSA_NSHIFT
+ 24
+
+ )
+
+148 
+ #IN_CLASSA_HOST
+ (0xfffffffà& ~
+IN_CLASSA_NET
+)
+
+ )
+
+149 
+ #IN_CLASSA_MAX
+ 128
+
+ )
+
+151 
+ #IN_CLASSB
+(
+a
+è((((
+š_addr_t
+)×)è& 0xc0000000è=ð0x80000000)
+
+ )
+
+152 
+ #IN_CLASSB_NET
+ 0xffff0000
+
+ )
+
+153 
+ #IN_CLASSB_NSHIFT
+ 16
+
+ )
+
+154 
+ #IN_CLASSB_HOST
+ (0xfffffffà& ~
+IN_CLASSB_NET
+)
+
+ )
+
+155 
+ #IN_CLASSB_MAX
+ 65536
+
+ )
+
+157 
+ #IN_CLASSC
+(
+a
+è((((
+š_addr_t
+)×)è& 0xe0000000è=ð0xc0000000)
+
+ )
+
+158 
+ #IN_CLASSC_NET
+ 0xffffff00
+
+ )
+
+159 
+ #IN_CLASSC_NSHIFT
+ 8
+
+ )
+
+160 
+ #IN_CLASSC_HOST
+ (0xfffffffà& ~
+IN_CLASSC_NET
+)
+
+ )
+
+162 
+ #IN_CLASSD
+(
+a
+è((((
+š_addr_t
+)×)è& 0xf0000000è=ð0xe0000000)
+
+ )
+
+163 
+ #IN_MULTICAST
+(
+a
+ `IN_CLASSD
+×)
+
+ )
+
+165 
+ #IN_EXPERIMENTAL
+(
+a
+è((((
+š_addr_t
+)×)è& 0xe0000000è=ð0xe0000000)
+
+ )
+
+166 
+ #IN_BADCLASS
+(
+a
+è((((
+š_addr_t
+)×)è& 0xf0000000è=ð0xf0000000)
+
+ )
+
+169 
+ #INADDR_ANY
+ ((
+š_addr_t
+è0x00000000)
+
+ )
+
+171 
+ #INADDR_BROADCAST
+ ((
+š_addr_t
+è0xffffffff)
+
+ )
+
+173 
+ #INADDR_NONE
+ ((
+š_addr_t
+è0xffffffff)
+
+ )
+
+176 
+ #IN_LOOPBACKNET
+ 127
+
+ )
+
+178 #iâdeà
+INADDR_LOOPBACK
+
+
+179 
+ #INADDR_LOOPBACK
+ ((
+š_addr_t
+è0x7f000001è
+
+ )
+
+183 
+ #INADDR_UNSPEC_GROUP
+ ((
+š_addr_t
+è0xe0000000è
+
+ )
+
+184 
+ #INADDR_ALLHOSTS_GROUP
+ ((
+š_addr_t
+è0xe0000001è
+
+ )
+
+185 
+ #INADDR_ALLRTRS_GROUP
+ ((
+š_addr_t
+è0xe0000002è
+
+ )
+
+186 
+ #INADDR_MAX_LOCAL_GROUP
+ ((
+š_addr_t
+è0xe00000ffè
+
+ )
+
+190 
+ sš6_addr
+
+
+194
+ušt8_t
+
+ mu6_addr8
+[16];
+
+195
+ušt16_t
+
+ mu6_addr16
+[8];
+
+196
+ušt32_t
+
+ mu6_addr32
+[4];
+
+197 }
+ mš6_u
+;
+
+198 
+ #s6_addr
+
+š6_u
+.
+u6_addr8
+
+
+ )
+
+199 
+ #s6_addr16
+
+š6_u
+.
+u6_addr16
+
+
+ )
+
+200 
+ #s6_addr32
+
+š6_u
+.
+u6_addr32
+
+
+ )
+
+203
+cÚ¡ 
+š6_addr
+
+š6addr_ªy
+;
+
+204
+cÚ¡ 
+š6_addr
+
+š6addr_loÝback
+;
+
+205 
+ #IN6ADDR_ANY_INIT
+ { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
+
+ )
+
+206 
+ #IN6ADDR_LOOPBACK_INIT
+ { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
+
+ )
+
+208 
+ #INET_ADDRSTRLEN
+ 16
+
+ )
+
+209 
+ #INET6_ADDRSTRLEN
+ 46
+
+ )
+
+212 
+ ~<b™s/sock‘.h
+>
+
+216 
+ ssockaddr_š
+
+
+218
+__SOCKADDR_COMMON
+ (
+sš_
+);
+
+219
+š_pÜt_t
+
+ msš_pÜt
+;
+
+220 
+š_addr
+
+ msš_addr
+;
+
+223 
+ msš_z”o
+[ (
+sockaddr
+) -
+
+224
+__SOCKADDR_COMMON_SIZE
+ -
+
+225  (
+š_pÜt_t
+) -
+
+226  (
+š_addr
+)];
+
+230 
+ ssockaddr_š6
+
+
+232
+__SOCKADDR_COMMON
+ (
+sš6_
+);
+
+233
+š_pÜt_t
+
+ msš6_pÜt
+;
+
+234
+ušt32_t
+
+ msš6_æowšfo
+;
+
+235 
+š6_addr
+
+ msš6_addr
+;
+
+236
+ušt32_t
+
+ msš6_scÝe_id
+;
+
+240 
+ sv6_m»q
+
+
+243 
+š6_addr
+
+ mv6mr_muÉŸddr
+;
+
+246 
+ mv6mr_š‹rçû
+;
+
+250 
+ ~<b™s/š.h
+>
+
+259
+ušt32_t
+
+ $Áohl
+ (
+ušt32_t
+
+__ÃŽÚg
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+260
+ušt16_t
+
+ $Áohs
+ (
+ušt16_t
+
+__ÃtshÜt
+)
+
+261
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+262
+ušt32_t
+
+ $htÚl
+ (
+ušt32_t
+
+__ho¡lÚg
+)
+
+263
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+264
+ušt16_t
+
+ $htÚs
+ (
+ušt16_t
+
+__ho¡shÜt
+)
+
+265
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+267 
+ ~<’dŸn.h
+>
+
+270 
+ ~<b™s/by‹sw­.h
+>
+
+272 #ifdeà
+__OPTIMIZE__
+
+
+276 #ià
+__BYTE_ORDER
+ =ð
+__BIG_ENDIAN
+
+
+279 
+ #Áohl
+(
+x
+è(x)
+
+ )
+
+280 
+ #Áohs
+(
+x
+è(x)
+
+ )
+
+281 
+ #htÚl
+(
+x
+è(x)
+
+ )
+
+282 
+ #htÚs
+(
+x
+è(x)
+
+ )
+
+284 #ià
+__BYTE_ORDER
+ =ð
+__LITTLE_ENDIAN
+
+
+285 
+ #Áohl
+(
+x
+ `__bsw­_32
+ (x)
+
+ )
+
+286 
+ #Áohs
+(
+x
+ `__bsw­_16
+ (x)
+
+ )
+
+287 
+ #htÚl
+(
+x
+ `__bsw­_32
+ (x)
+
+ )
+
+288 
+ #htÚs
+(
+x
+ `__bsw­_16
+ (x)
+
+ )
+
+293 
+ #IN6_IS_ADDR_UNSPECIFIED
+(
+a
+) \
+
+294 (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[0] == 0 \
+
+295 && ((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[1] == 0 \
+
+296 && ((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[2] == 0 \
+
+297 && ((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[3] =ð0)
+
+ )
+
+299 
+ #IN6_IS_ADDR_LOOPBACK
+(
+a
+) \
+
+300 (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[0] == 0 \
+
+301 && ((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[1] == 0 \
+
+302 && ((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[2] == 0 \
+
+303 && ((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[3] =ð
+ `htÚl
+ (1))
+
+ )
+
+305 
+ #IN6_IS_ADDR_MULTICAST
+(
+a
+è(((
+__cÚ¡
+
+ušt8_t
+ *è×))[0] =ð0xff)
+
+ )
+
+307 
+ #IN6_IS_ADDR_LINKLOCAL
+(
+a
+) \
+
+308 ((((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[0] &
+ `htÚl
+ (0xffc00000)) \
+
+309 =ð
+ `htÚl
+ (0xã800000))
+
+ )
+
+311 
+ #IN6_IS_ADDR_SITELOCAL
+(
+a
+) \
+
+312 ((((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[0] &
+ `htÚl
+ (0xffc00000)) \
+
+313 =ð
+ `htÚl
+ (0xãc00000))
+
+ )
+
+315 
+ #IN6_IS_ADDR_V4MAPPED
+(
+a
+) \
+
+316 ((((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[0] == 0) \
+
+317 && (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[1] == 0) \
+
+318 && (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[2] =ð
+ `htÚl
+ (0xffff)))
+
+ )
+
+320 
+ #IN6_IS_ADDR_V4COMPAT
+(
+a
+) \
+
+321 ((((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[0] == 0) \
+
+322 && (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[1] == 0) \
+
+323 && (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[2] == 0) \
+
+324 && (
+ `Áohl
+ (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[3]è> 1))
+
+ )
+
+326 
+ #IN6_ARE_ADDR_EQUAL
+(
+a
+,
+b
+) \
+
+327 ((((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[0] =ð((__cÚ¡ ušt32_ˆ*è(
+b
+))[0]) \
+
+328 && (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[1] =ð((__cÚ¡ ušt32_ˆ*è(
+b
+))[1]) \
+
+329 && (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[2] =ð((__cÚ¡ ušt32_ˆ*è(
+b
+))[2]) \
+
+330 && (((
+__cÚ¡
+
+ušt32_t
+ *è(
+a
+))[3] =ð((__cÚ¡ ušt32_ˆ*è(
+b
+))[3]))
+
+ )
+
+333
+
+ $bšd»svpÜt
+ (
+__sockfd
+, 
+sockaddr_š
+ *
+__sock_š
+__THROW
+;
+
+336
+
+ $bšd»svpÜt6
+ (
+__sockfd
+, 
+sockaddr_š6
+ *
+__sock_š
+)
+
+337
+__THROW
+;
+
+340 
+ #IN6_IS_ADDR_MC_NODELOCAL
+(
+a
+) \
+
+341 (
+ `IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+342 && ((((
+__cÚ¡
+
+ušt8_t
+ *è(
+a
+))[1] & 0xfè=ð0x1))
+
+ )
+
+344 
+ #IN6_IS_ADDR_MC_LINKLOCAL
+(
+a
+) \
+
+345 (
+ `IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+346 && ((((
+__cÚ¡
+
+ušt8_t
+ *è(
+a
+))[1] & 0xfè=ð0x2))
+
+ )
+
+348 
+ #IN6_IS_ADDR_MC_SITELOCAL
+(
+a
+) \
+
+349 (
+ `IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+350 && ((((
+__cÚ¡
+
+ušt8_t
+ *è(
+a
+))[1] & 0xfè=ð0x5))
+
+ )
+
+352 
+ #IN6_IS_ADDR_MC_ORGLOCAL
+(
+a
+) \
+
+353 (
+ `IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+354 && ((((
+__cÚ¡
+
+ušt8_t
+ *è(
+a
+))[1] & 0xfè=ð0x8))
+
+ )
+
+356 
+ #IN6_IS_ADDR_MC_GLOBAL
+(
+a
+) \
+
+357 (
+ `IN6_IS_ADDR_MULTICAST
+(
+a
+) \
+
+358 && ((((
+__cÚ¡
+
+ušt8_t
+ *è(
+a
+))[1] & 0xfè=ð0xe))
+
+ )
+
+361 
+ sš6_pktšfo
+
+
+363 
+š6_addr
+
+i6_addr
+;
+
+364 
+i6_ifšdex
+;
+
+367
+__END_DECLS
+
+
+ @/usr/include/pwd.h
+
+23 #iâdef
+_PWD_H
+
+
+24 
+ #_PWD_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28
+ g__BEGIN_DECLS
+
+
+30 
+ ~<b™s/ty³s.h
+>
+
+32 
+ #__Ãed_size_t
+
+
+ )
+
+33 
+ ~<¡ddef.h
+>
+
+35 #ifdeà
+__USE_XOPEN
+
+
+38 #iâdeà
+__gid_t_defšed
+
+
+39 
+__gid_t
+
+ tgid_t
+;
+
+40 
+ #__gid_t_defšed
+
+
+ )
+
+43 #iâdeà
+__uid_t_defšed
+
+
+44 
+__uid_t
+
+ tuid_t
+;
+
+45 
+ #__uid_t_defšed
+
+
+ )
+
+50 
+ s·sswd
+
+
+52 *
+ mpw_Çme
+;
+
+53 *
+ mpw_·sswd
+;
+
+54
+__uid_t
+
+ mpw_uid
+;
+
+55
+__gid_t
+
+ mpw_gid
+;
+
+56 *
+ mpw_gecos
+;
+
+57 *
+ mpw_dœ
+;
+
+58 *
+ mpw_sh–l
+;
+
+62 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_GNU
+
+
+63 
+ #__Ãed_FILE
+
+
+ )
+
+64 
+ ~<¡dio.h
+>
+
+68 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+70
+
+ $£w’t
+ (è
+__THROW
+;
+
+73
+
+ $’dpw’t
+ (è
+__THROW
+;
+
+76
+
+·sswd
+ *
+ $g‘pw’t
+ (è
+__THROW
+;
+
+79 #ifdef
+__USE_SVID
+
+
+81
+
+·sswd
+ *
+ $fg‘pw’t
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+84
+
+ $puw’t
+ (
+__cÚ¡
+ 
+·sswd
+ *
+__»¡riù
+
+__p
+,
+
+85
+FILE
+ *
+__»¡riù
+
+__f
+__THROW
+;
+
+89
+
+·sswd
+ *
+ $g‘pwuid
+ (
+__uid_t
+
+__uid
+__THROW
+;
+
+92
+
+·sswd
+ *
+ $g‘pwÇm
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+94 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+96 #ifdeà
+__USE_MISC
+
+
+99 
+ #NSS_BUFLEN_PASSWD
+ 1024
+
+ )
+
+110 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_MISC
+
+
+111
+
+ $g‘pw’t_r
+ (
+·sswd
+ *
+__»¡riù
+
+__»suÉbuf
+,
+
+112 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+113 
+·sswd
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+116
+
+ $g‘pwuid_r
+ (
+__uid_t
+
+__uid
+,
+
+117 
+·sswd
+ *
+__»¡riù
+
+__»suÉbuf
+,
+
+118 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+119 
+·sswd
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+121
+
+ $g‘pwÇm_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+122 
+·sswd
+ *
+__»¡riù
+
+__»suÉbuf
+,
+
+123 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+124 
+·sswd
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+127 #ifdef
+__USE_SVID
+
+
+130
+
+ $fg‘pw’t_r
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+,
+
+131 
+·sswd
+ *
+__»¡riù
+
+__»suÉbuf
+,
+
+132 *
+__»¡riù
+
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+133 
+·sswd
+ **
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+138 #ifdeà
+__USE_GNU
+
+
+142
+
+ $g‘pw
+ (
+__uid_t
+
+__uid
+, *
+__bufãr
+__THROW
+;
+
+145
+__END_DECLS
+
+
+ @/usr/include/setjmp.h
+
+23 #iâdef
+_SETJMP_H
+
+
+24 
+ #_SETJMP_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28
+ g__BEGIN_DECLS
+
+
+30 
+ ~<b™s/£tjmp.h
+>
+
+31 
+ ~<b™s/sig£t.h
+>
+
+34 
+ s__jmp_buf_g
+
+
+40
+__jmp_buf
+
+ m__jmpbuf
+;
+
+41 
+ m__mask_was_§ved
+;
+
+42
+__sig£t_t
+
+ m__§ved_mask
+;
+
+43 }
+ tjmp_buf
+[1];
+
+48
+
+ $£tjmp
+ (
+jmp_buf
+
+__’v
+__THROW
+;
+
+52
+
+ $_£tjmp
+ (
+jmp_buf
+
+__’v
+__THROW
+;
+
+57
+
+ $__sig£tjmp
+ (
+jmp_buf
+
+__’v
+, 
+__§vemask
+__THROW
+;
+
+59 #iâdef
+__FAVOR_BSD
+
+
+62 
+ #£tjmp
+(
+’v
+ `_£tjmp
+ (’v)
+
+ )
+
+67 
+ #£tjmp
+(
+’v
+ `£tjmp
+ (’v)
+
+ )
+
+73
+
+ $lÚgjmp
+ (
+jmp_buf
+
+__’v
+, 
+__v®
+)
+
+74
+__THROW
+
+ `__©Œibu‹__
+ ((
+__nÜ‘uº__
+));
+
+75 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN
+
+
+79
+
+ $_lÚgjmp
+ (
+jmp_buf
+
+__’v
+, 
+__v®
+)
+
+80
+__THROW
+
+ `__©Œibu‹__
+ ((
+__nÜ‘uº__
+));
+
+84 #ifdef
+__USE_POSIX
+
+
+88 
+jmp_buf
+
+ tsigjmp_buf
+;
+
+92 
+ #sig£tjmp
+(
+’v
+,
+§vemask
+ `__sig£tjmp
+ (’v, savemask)
+
+ )
+
+98
+
+ $siglÚgjmp
+ (
+sigjmp_buf
+
+__’v
+, 
+__v®
+)
+
+99
+__THROW
+
+ `__©Œibu‹__
+ ((
+__nÜ‘uº__
+));
+
+102
+__END_DECLS
+
+
+ @/usr/include/signal.h
+
+23 #iâdef
+_SIGNAL_H
+
+
+25 #ià!
+defšed
+
+__Ãed_sig_©omic_t
+ && !defšed
+__Ãed_sig£t_t
+
+
+26 
+ #_SIGNAL_H
+
+
+ )
+
+29 
+ ~<ã©u»s.h
+>
+
+31
+ g__BEGIN_DECLS
+
+
+33 
+ ~<b™s/sig£t.h
+>
+
+37 #ià
+defšed
+
+__Ãed_sig_©omic_t
+ || defšed
+_SIGNAL_H
+
+
+38 #iâdeà
+__sig_©omic_t_defšed
+
+
+39 
+ #__sig_©omic_t_defšed
+
+
+ )
+
+40 
+__sig_©omic_t
+
+ tsig_©omic_t
+;
+
+42 #undeà
+__Ãed_sig_©omic_t
+
+
+45 #ià
+defšed
+
+__Ãed_sig£t_t
+ || (defšed
+_SIGNAL_H
+ && defšed
+__USE_POSIX
+)
+
+46 #iâdeà
+__sig£t_t_defšed
+
+
+47 
+ #__sig£t_t_defšed
+
+
+ )
+
+48 
+__sig£t_t
+
+ tsig£t_t
+;
+
+50 #undeà
+__Ãed_sig£t_t
+
+
+53 #ifdeà
+_SIGNAL_H
+
+
+55 
+ ~<b™s/ty³s.h
+>
+
+56 
+ ~<b™s/signum.h
+>
+
+58 #ifdeà
+__USE_XOPEN
+
+
+59 #iâdeà
+__pid_t_defšed
+
+
+60 
+__pid_t
+
+ tpid_t
+;
+
+61 
+ #__pid_t_defšed
+
+
+ )
+
+63 #iâdeà
+__uid_t_defšed
+
+
+64 
+__uid_t
+
+ tuid_t
+;
+
+65 
+ #__uid_t_defšed
+
+
+ )
+
+71 (*
+ t__sighªdËr_t
+) ();
+
+76
+__sighªdËr_t
+
+ $__sysv_sigÇl
+ (
+__sig
+,
+__sighªdËr_t
+
+__hªdËr
+)
+
+77
+__THROW
+;
+
+78 #ifdeà
+__USE_GNU
+
+
+79
+__sighªdËr_t
+
+ $sysv_sigÇl
+ (
+__sig
+,
+__sighªdËr_t
+
+__hªdËr
+)
+
+80
+__THROW
+;
+
+86 #ifdeà
+__USE_BSD
+
+
+87
+__sighªdËr_t
+
+ $sigÇl
+ (
+__sig
+,
+__sighªdËr_t
+
+__hªdËr
+__THROW
+;
+
+90 #ifdeà
+__REDIRECT
+
+
+91
+__sighªdËr_t
+
+ `__REDIRECT
+ (
+sigÇl
+,
+
+92 (
+__sig
+,
+
+93
+__sighªdËr_t
+
+__hªdËr
+__THROW
+,
+
+94
+__sysv_sigÇl
+);
+
+96 
+ #sigÇl
+
+__sysv_sigÇl
+
+
+ )
+
+100 #ifdeà
+__USE_XOPEN
+
+
+103
+__sighªdËr_t
+
+ $bsd_sigÇl
+ (
+__sig
+,
+__sighªdËr_t
+
+__hªdËr
+__THROW
+;
+
+109 #ifdeà
+__USE_POSIX
+
+
+110
+
+ $kžl
+ (
+__pid_t
+
+__pid
+, 
+__sig
+__THROW
+;
+
+113 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+117
+
+ $kžÍg
+ (
+__pid_t
+
+__pg½
+, 
+__sig
+__THROW
+;
+
+121
+
+ $¿i£
+ (
+__sig
+__THROW
+;
+
+123 #ifdeà
+__USE_SVID
+
+
+125
+__sighªdËr_t
+
+ $ssigÇl
+ (
+__sig
+,
+__sighªdËr_t
+
+__hªdËr
+__THROW
+;
+
+126
+
+ $gsigÇl
+ (
+__sig
+__THROW
+;
+
+129 #ifdeà
+__USE_MISC
+
+
+131
+
+ $psigÇl
+ (
+__sig
+,
+__cÚ¡
+ *
+__s
+__THROW
+;
+
+140
+
+ $__sig·u£
+ (
+__sig_Ü_mask
+, 
+__is_sig
+__THROW
+;
+
+142 #ifdeà
+__USE_BSD
+
+
+145
+
+ $sig·u£
+ (
+__mask
+__THROW
+;
+
+146 
+ #sig·u£
+(
+mask
+ `__sig·u£
+ ((mask), 0)
+
+ )
+
+148 #ifdeà
+__USE_XOPEN
+
+
+149 #ifdeà
+__GNUC__
+
+
+150
+
+ $sig·u£
+ (
+__sig
+__THROW
+
+ `__asm__
+ ("__xpg_sigpause");
+
+153 
+ #sig·u£
+(
+sig
+ `__sig·u£
+ ((sig), 1)
+
+ )
+
+158 #ifdeà
+__USE_BSD
+
+
+165 
+ #sigmask
+(
+sig
+ `__sigmask
+(sig)
+
+ )
+
+168
+
+ $sigblock
+ (
+__mask
+__THROW
+;
+
+171
+
+ $sig£tmask
+ (
+__mask
+__THROW
+;
+
+174
+
+ $sigg‘mask
+ (è
+__THROW
+;
+
+178 #ifdeà
+__USE_MISC
+
+
+179 
+ #NSIG
+
+_NSIG
+
+
+ )
+
+182 #ifdeà
+__USE_GNU
+
+
+183 
+__sighªdËr_t
+
+ tsighªdËr_t
+;
+
+187 #ifdeà
+__USE_BSD
+
+
+188 
+__sighªdËr_t
+
+ tsig_t
+;
+
+191 #ifdeà
+__USE_POSIX
+
+
+193 #ifdeà
+__USE_POSIX199309
+
+
+195 
+ #__Ãed_time¥ec
+
+
+ )
+
+196 
+ ~<time.h
+>
+
+199 
+ ~<b™s/sigšfo.h
+>
+
+203
+
+ $sigem±y£t
+ (
+sig£t_t
+ *
+__£t
+__THROW
+;
+
+206
+
+ $sigfžl£t
+ (
+sig£t_t
+ *
+__£t
+__THROW
+;
+
+209
+
+ $sigadd£t
+ (
+sig£t_t
+ *
+__£t
+, 
+__signo
+__THROW
+;
+
+212
+
+ $sigd–£t
+ (
+sig£t_t
+ *
+__£t
+, 
+__signo
+__THROW
+;
+
+215
+
+ $sigismemb”
+ (
+__cÚ¡
+
+sig£t_t
+ *
+__£t
+, 
+__signo
+__THROW
+;
+
+217 #ifdeà
+__USE_GNU
+
+
+219
+
+ $sigi£m±y£t
+ (
+__cÚ¡
+
+sig£t_t
+ *
+__£t
+__THROW
+;
+
+222
+
+ $sigªd£t
+ (
+sig£t_t
+ *
+__£t
+,
+__cÚ¡
+ sig£t_ˆ*
+__Ëá
+,
+
+223
+__cÚ¡
+
+sig£t_t
+ *
+__right
+__THROW
+;
+
+226
+
+ $sigܣt
+ (
+sig£t_t
+ *
+__£t
+,
+__cÚ¡
+ sig£t_ˆ*
+__Ëá
+,
+
+227
+__cÚ¡
+
+sig£t_t
+ *
+__right
+__THROW
+;
+
+232 
+ ~<b™s/sigaùiÚ.h
+>
+
+235
+
+ $sig´ocmask
+ (
+__how
+,
+__cÚ¡
+
+sig£t_t
+ *
+__»¡riù
+
+__£t
+,
+
+236
+sig£t_t
+ *
+__»¡riù
+
+__o£t
+__THROW
+;
+
+240
+
+ $sigsu¥’d
+ (
+__cÚ¡
+
+sig£t_t
+ *
+__£t
+__THROW
+;
+
+243
+
+ $sigaùiÚ
+ (
+__sig
+,
+__cÚ¡
+ 
+sigaùiÚ
+ *
+__»¡riù
+
+__aù
+,
+
+244 
+sigaùiÚ
+ *
+__»¡riù
+
+__ßù
+__THROW
+;
+
+247
+
+ $sig³ndšg
+ (
+sig£t_t
+ *
+__£t
+__THROW
+;
+
+251
+
+ $sigwa™
+ (
+__cÚ¡
+
+sig£t_t
+ *
+__»¡riù
+
+__£t
+, *__»¡riù
+__sig
+)
+
+252
+__THROW
+;
+
+254 #ifdeà
+__USE_POSIX199309
+
+
+256
+
+ $sigwa™šfo
+ (
+__cÚ¡
+
+sig£t_t
+ *
+__»¡riù
+
+__£t
+,
+
+257
+sigšfo_t
+ *
+__»¡riù
+
+__šfo
+__THROW
+;
+
+261
+
+ $sigtimedwa™
+ (
+__cÚ¡
+
+sig£t_t
+ *
+__»¡riù
+
+__£t
+,
+
+262
+sigšfo_t
+ *
+__»¡riù
+
+__šfo
+,
+
+263
+__cÚ¡
+ 
+time¥ec
+ *
+__»¡riù
+
+__timeout
+)
+
+264
+__THROW
+;
+
+268
+
+ $sigqueue
+ (
+__pid_t
+
+__pid
+, 
+__sig
+,
+__cÚ¡
+ 
+sigv®
+
+__v®
+)
+
+269
+__THROW
+;
+
+274 #ifdeà
+__USE_BSD
+
+
+278
+__cÚ¡
+ *__cÚ¡
+_sys_sigli¡
+[
+_NSIG
+];
+
+279
+__cÚ¡
+ *__cÚ¡
+sys_sigli¡
+[
+_NSIG
+];
+
+282 
+ ssigvec
+
+
+284
+__sighªdËr_t
+
+sv_hªdËr
+;
+
+285 
+sv_mask
+;
+
+287 
+sv_æags
+;
+
+288 
+ #sv_Ú¡ack
+
+sv_æags
+
+
+ )
+
+292 
+ #SV_ONSTACK
+ (1 << 0)
+
+ )
+
+293 
+ #SV_INTERRUPT
+ (1 << 1)
+
+ )
+
+294 
+ #SV_RESETHAND
+ (1 << 2)
+
+ )
+
+302
+
+ $sigvec
+ (
+__sig
+,
+__cÚ¡
+ 
+sigvec
+ *
+__vec
+,
+
+303 
+sigvec
+ *
+__ovec
+__THROW
+;
+
+307 
+ ~<b™s/sigcÚ‹xt.h
+>
+
+310
+
+ $sig»tuº
+ (
+sigcÚ‹xt
+ *
+__sý
+__THROW
+;
+
+315 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+320
+
+ $sigš‹¼u±
+ (
+__sig
+, 
+__š‹¼u±
+__THROW
+;
+
+322 
+ ~<b™s/sig¡ack.h
+>
+
+323 #ifdeà
+__USE_XOPEN
+
+
+324 
+ ~<ucÚ‹xt.h
+>
+
+330
+
+ $sig¡ack
+ (
+sig¡ack
+ *
+__ss
+, sig¡ack *
+__oss
+__THROW
+;
+
+334
+
+ $sig®t¡ack
+ (
+__cÚ¡
+ 
+sig®t¡ack
+ *
+__»¡riù
+
+__ss
+,
+
+335 
+sig®t¡ack
+ *
+__»¡riù
+
+__oss
+__THROW
+;
+
+339 #ifdeà
+__USE_UNIX98
+
+
+343
+
+ $sighÞd
+ (
+__sig
+__THROW
+;
+
+346
+
+ $sig»l£
+ (
+__sig
+__THROW
+;
+
+349
+
+ $sigignÜe
+ (
+__sig
+__THROW
+;
+
+352
+__sighªdËr_t
+
+ $sig£t
+ (
+__sig
+,
+__sighªdËr_t
+
+__di¥
+__THROW
+;
+
+355 #ià
+defšed
+
+__USE_POSIX199506
+ || defšed
+__USE_UNIX98
+
+
+358 
+ ~<b™s/sigth»ad.h
+>
+
+365
+
+ $__libc_cu¼’t_sig¹mš
+ (è
+__THROW
+;
+
+367
+
+ $__libc_cu¼’t_sig¹max
+ (è
+__THROW
+;
+
+371
+__END_DECLS
+
+
+ @/usr/include/stdio.h
+
+24 #iâdeà
+_STDIO_H
+
+
+26 #ià!
+defšed
+
+__Ãed_FILE
+ && !defšed
+__Ãed___FILE
+
+
+27 
+ #_STDIO_H
+ 1
+
+ )
+
+28 
+ ~<ã©u»s.h
+>
+
+30
+ g__BEGIN_DECLS
+
+
+32 
+ #__Ãed_size_t
+
+
+ )
+
+33 
+ #__Ãed_NULL
+
+
+ )
+
+34 
+ ~<¡ddef.h
+>
+
+36 
+ ~<b™s/ty³s.h
+>
+
+37 
+ #__Ãed_FILE
+
+
+ )
+
+38 
+ #__Ãed___FILE
+
+
+ )
+
+42 #ià!
+defšed
+
+__FILE_defšed
+ && defšed
+__Ãed_FILE
+
+
+45 
+_IO_FILE
+
+ tFILE
+;
+
+47 
+ #__FILE_defšed
+ 1
+
+ )
+
+49 #undeà
+__Ãed_FILE
+
+
+52 #ià!
+defšed
+
+____FILE_defšed
+ && defšed
+__Ãed___FILE
+
+
+55 
+_IO_FILE
+
+ t__FILE
+;
+
+57 
+ #____FILE_defšed
+ 1
+
+ )
+
+59 #undeà
+__Ãed___FILE
+
+
+62 #ifdef
+_STDIO_H
+
+
+63 
+ #_STDIO_USES_IOSTREAM
+
+
+ )
+
+65 
+ ~<libio.h
+>
+
+67 #ifdeà
+__USE_XOPEN
+
+
+68 #ifdeà
+__GNUC__
+
+
+69 #iâdeà
+_VA_LIST_DEFINED
+
+
+70 
+_G_va_li¡
+
+ tva_li¡
+;
+
+71 
+ #_VA_LIST_DEFINED
+
+
+ )
+
+74 
+ ~<¡d¬g.h
+>
+
+79 #iâdeà
+__USE_FILE_OFFSET64
+
+
+80 
+_G_åos_t
+
+ tåos_t
+;
+
+82 
+_G_åos64_t
+
+ tåos_t
+;
+
+84 #ifdeà
+__USE_LARGEFILE64
+
+
+85 
+_G_åos64_t
+
+ tåos64_t
+;
+
+89 
+ #_IOFBF
+ 0
+
+ )
+
+90 
+ #_IOLBF
+ 1
+
+ )
+
+91 
+ #_IONBF
+ 2
+
+ )
+
+95 #iâdeà
+BUFSIZ
+
+
+96 
+ #BUFSIZ
+
+_IO_BUFSIZ
+
+
+ )
+
+102 #iâdeà
+EOF
+
+
+103 
+ #EOF
+ (-1)
+
+ )
+
+109 
+ #SEEK_SET
+ 0
+
+ )
+
+110 
+ #SEEK_CUR
+ 1
+
+ )
+
+111 
+ #SEEK_END
+ 2
+
+ )
+
+114 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN
+
+
+116 
+ #P_tmpdœ
+ "/tmp"
+
+ )
+
+129 
+ ~<b™s/¡dio_lim.h
+>
+
+133
+FILE
+ *
+¡dš
+;
+
+134
+FILE
+ *
+¡dout
+;
+
+135
+FILE
+ *
+¡d”r
+;
+
+136 #ifdeà
+__STDC__
+
+
+138 
+ #¡dš
+
+¡dš
+
+
+ )
+
+139 
+ #¡dout
+
+¡dout
+
+
+ )
+
+140 
+ #¡d”r
+
+¡d”r
+
+
+ )
+
+144
+
+ $»move
+ (
+__cÚ¡
+ *
+__fž’ame
+__THROW
+;
+
+146
+
+ $Ȃme
+ (
+__cÚ¡
+ *
+__Þd
+, __cÚ¡ *
+__Ãw
+__THROW
+;
+
+150 #iâdeà
+__USE_FILE_OFFSET64
+
+
+151
+FILE
+ *
+ $tmpfže
+ (è
+__THROW
+;
+
+153 #ifdeà
+__REDIRECT
+
+
+154
+FILE
+ *
+ `__REDIRECT
+ (
+tmpfže
+, (è
+__THROW
+,
+tmpfže64
+);
+
+156 
+ #tmpfže
+
+tmpfže64
+
+
+ )
+
+159 #ifdeà
+__USE_LARGEFILE64
+
+
+160
+FILE
+ *
+ $tmpfže64
+ (è
+__THROW
+;
+
+163
+*
+ $tm²am
+ (*
+__s
+__THROW
+;
+
+165 #ifdeà
+__USE_MISC
+
+
+168
+*
+ $tm²am_r
+ (*
+__s
+__THROW
+;
+
+172 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN
+
+
+180
+*
+ $‹m²am
+ (
+__cÚ¡
+ *
+__dœ
+, __cÚ¡ *
+__pfx
+)
+
+181
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+186
+
+ $fþo£
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+188
+
+ $fæush
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+190 #ifdeà
+__USE_MISC
+
+
+192
+
+ $fæush_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+195 #ifdeà
+__USE_GNU
+
+
+197
+
+ $fþo£®l
+ (è
+__THROW
+;
+
+201 #iâdeà
+__USE_FILE_OFFSET64
+
+
+203
+FILE
+ *
+ $fÝ’
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fž’ame
+,
+
+204
+__cÚ¡
+ *
+__»¡riù
+
+__modes
+__THROW
+;
+
+206
+FILE
+ *
+ $äeÝ’
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fž’ame
+,
+
+207
+__cÚ¡
+ *
+__»¡riù
+
+__modes
+,
+
+208
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+210 #ifdeà
+__REDIRECT
+
+
+211
+FILE
+ *
+ `__REDIRECT
+ (
+fÝ’
+, (
+__cÚ¡
+ *
+__»¡riù
+
+__fž’ame
+,
+
+212
+__cÚ¡
+ *
+__»¡riù
+
+__modes
+__THROW
+,
+
+213
+fÝ’64
+);
+
+214
+FILE
+ *
+ `__REDIRECT
+ (
+äeÝ’
+, (
+__cÚ¡
+ *
+__»¡riù
+
+__fž’ame
+,
+
+215
+__cÚ¡
+ *
+__»¡riù
+
+__modes
+,
+
+216
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+,
+
+217
+äeÝ’64
+);
+
+219 
+ #fÝ’
+
+fÝ’64
+
+
+ )
+
+220 
+ #äeÝ’
+
+äeÝ’64
+
+
+ )
+
+223 #ifdeà
+__USE_LARGEFILE64
+
+
+224
+FILE
+ *
+ $fÝ’64
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fž’ame
+,
+
+225
+__cÚ¡
+ *
+__»¡riù
+
+__modes
+__THROW
+;
+
+226
+FILE
+ *
+ $äeÝ’64
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fž’ame
+,
+
+227
+__cÚ¡
+ *
+__»¡riù
+
+__modes
+,
+
+228
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+231 #ifdef
+__USE_POSIX
+
+
+233
+FILE
+ *
+ $fdÝ’
+ (
+__fd
+,
+__cÚ¡
+ *
+__modes
+__THROW
+;
+
+236 #ifdef
+__USE_GNU
+
+
+239
+FILE
+ *
+ $fÝ’cook›
+ (*
+__»¡riù
+
+__magic_cook›
+,
+
+240
+__cÚ¡
+ *
+__»¡riù
+
+__modes
+,
+
+241
+_IO_cook›_io_funùiÚs_t
+
+__io_funcs
+__THROW
+;
+
+244
+FILE
+ *
+ $fmemÝ’
+ (*
+__s
+,
+size_t
+
+__Ën
+,
+__cÚ¡
+ *
+__modes
+__THROW
+;
+
+249
+FILE
+ *
+ $Ý’_mem¡»am
+ (**
+__»¡riù
+
+__buæoc
+,
+
+250
+size_t
+ *
+__»¡riù
+
+__siz–oc
+__THROW
+;
+
+256
+
+ $£tbuf
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+, *__»¡riù
+__buf
+__THROW
+;
+
+260
+
+ $£tvbuf
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+, *__»¡riù
+__buf
+,
+
+261 
+__modes
+,
+size_t
+
+__n
+__THROW
+;
+
+263 #ifdef
+__USE_BSD
+
+
+266
+
+ $£tbufãr
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+, *__»¡riù
+__buf
+,
+
+267
+size_t
+
+__size
+__THROW
+;
+
+270
+
+ $£Žšebuf
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+275
+
+ $årštf
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+,
+
+276
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+, ...è
+__THROW
+;
+
+278
+
+ $´štf
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+, ...è
+__THROW
+;
+
+280
+
+ $¥rštf
+ (*
+__»¡riù
+
+__s
+,
+
+281
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+, ...è
+__THROW
+;
+
+284
+
+ $vårštf
+ (
+FILE
+ *
+__»¡riù
+
+__s
+,
+__cÚ¡
+ *__»¡riù
+__fÜm©
+,
+
+285
+_G_va_li¡
+
+__¬g
+__THROW
+;
+
+287
+
+ $v´štf
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+,
+_G_va_li¡
+
+__¬g
+)
+
+288
+__THROW
+;
+
+290
+
+ $v¥rštf
+ (*
+__»¡riù
+
+__s
+,
+__cÚ¡
+ *__»¡riù
+__fÜm©
+,
+
+291
+_G_va_li¡
+
+__¬g
+__THROW
+;
+
+293 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_ISOC99
+ || defšed
+__USE_UNIX98
+
+
+295
+
+ $¢´štf
+ (*
+__»¡riù
+
+__s
+,
+size_t
+
+__maxËn
+,
+
+296
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+, ...)
+
+297
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__´štf__
+, 3, 4)));
+
+299
+
+ $v¢´štf
+ (*
+__»¡riù
+
+__s
+,
+size_t
+
+__maxËn
+,
+
+300
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+,
+_G_va_li¡
+
+__¬g
+)
+
+301
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__´štf__
+, 3, 0)));
+
+304 #ifdeà
+__USE_GNU
+
+
+307
+
+ $va¥rštf
+ (**
+__»¡riù
+
+__±r
+,
+__cÚ¡
+ *__»¡riù
+__f
+,
+
+308
+_G_va_li¡
+
+__¬g
+)
+
+309
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__´štf__
+, 2, 0)));
+
+310
+
+ $__a¥rštf
+ (**
+__»¡riù
+
+__±r
+,
+
+311
+__cÚ¡
+ *
+__»¡riù
+
+__fmt
+, ...)
+
+312
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__´štf__
+, 2, 3)));
+
+313
+
+ $a¥rštf
+ (**
+__»¡riù
+
+__±r
+,
+
+314
+__cÚ¡
+ *
+__»¡riù
+
+__fmt
+, ...)
+
+315
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__´štf__
+, 2, 3)));
+
+318
+
+ $vd´štf
+ (
+__fd
+,
+__cÚ¡
+ *
+__»¡riù
+
+__fmt
+,
+
+319
+_G_va_li¡
+
+__¬g
+)
+
+320
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__´štf__
+, 2, 0)));
+
+321
+
+ $d´štf
+ (
+__fd
+,
+__cÚ¡
+ *
+__»¡riù
+
+__fmt
+, ...)
+
+322
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__´štf__
+, 2, 3)));
+
+327
+
+ $fsÿnf
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+,
+
+328
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+, ...è
+__THROW
+;
+
+330
+
+ $sÿnf
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+, ...è
+__THROW
+;
+
+332
+
+ $ssÿnf
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+
+333
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+, ...è
+__THROW
+;
+
+335 #ifdef
+__USE_ISOC99
+
+
+337
+
+ $vfsÿnf
+ (
+FILE
+ *
+__»¡riù
+
+__s
+,
+__cÚ¡
+ *__»¡riù
+__fÜm©
+,
+
+338
+_G_va_li¡
+
+__¬g
+)
+
+339
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__sÿnf__
+, 2, 0)));
+
+342
+
+ $vsÿnf
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+,
+_G_va_li¡
+
+__¬g
+)
+
+343
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__sÿnf__
+, 1, 0)));
+
+346
+
+ $vssÿnf
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+
+347
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+,
+_G_va_li¡
+
+__¬g
+)
+
+348
+__THROW
+
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__sÿnf__
+, 2, 0)));
+
+353
+
+ $fg‘c
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+354
+
+ $g‘c
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+357
+
+ $g‘ch¬
+ (è
+__THROW
+;
+
+361 
+ #g‘c
+(
+_å
+ `_IO_g‘c
+ (_å)
+
+ )
+
+363 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+365
+
+ $g‘c_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+366
+
+ $g‘ch¬_uÆocked
+ (è
+__THROW
+;
+
+369 #ifdeà
+__USE_MISC
+
+
+371
+
+ $fg‘c_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+376
+
+ $åutc
+ (
+__c
+,
+FILE
+ *
+__¡»am
+__THROW
+;
+
+377
+
+ $putc
+ (
+__c
+,
+FILE
+ *
+__¡»am
+__THROW
+;
+
+380
+
+ $putch¬
+ (
+__c
+__THROW
+;
+
+384 
+ #putc
+(
+_ch
+,
+_å
+ `_IO_putc
+ (_ch, _å)
+
+ )
+
+386 #ifdeà
+__USE_MISC
+
+
+388
+
+ $åutc_uÆocked
+ (
+__c
+,
+FILE
+ *
+__¡»am
+__THROW
+;
+
+391 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+393
+
+ $putc_uÆocked
+ (
+__c
+,
+FILE
+ *
+__¡»am
+__THROW
+;
+
+394
+
+ $putch¬_uÆocked
+ (
+__c
+__THROW
+;
+
+398 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN
+
+
+400
+
+ $g‘w
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+403
+
+ $putw
+ (
+__w
+,
+FILE
+ *
+__¡»am
+__THROW
+;
+
+408
+*
+ $fg‘s
+ (*
+__»¡riù
+
+__s
+, 
+__n
+,
+FILE
+ *__»¡riù
+__¡»am
+)
+
+409
+__THROW
+;
+
+411 #ifdeà
+__USE_GNU
+
+
+413
+*
+ $fg‘s_uÆocked
+ (*
+__»¡riù
+
+__s
+, 
+__n
+,
+
+414
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+419
+*
+ $g‘s
+ (*
+__s
+__THROW
+;
+
+422 #ifdef
+__USE_GNU
+
+
+428
+_IO_ssize_t
+
+ $__g‘d–im
+ (**
+__»¡riù
+
+__lš•Œ
+,
+
+429
+size_t
+ *
+__»¡riù
+
+__n
+, 
+__d–im™”
+,
+
+430
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+431
+_IO_ssize_t
+
+ $g‘d–im
+ (**
+__»¡riù
+
+__lš•Œ
+,
+
+432
+size_t
+ *
+__»¡riù
+
+__n
+, 
+__d–im™”
+,
+
+433
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+436
+_IO_ssize_t
+
+ $g‘lše
+ (**
+__»¡riù
+
+__lš•Œ
+,
+
+437
+size_t
+ *
+__»¡riù
+
+__n
+,
+
+438
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+443
+
+ $åuts
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+FILE
+ *__»¡riù
+__¡»am
+)
+
+444
+__THROW
+;
+
+446 #ifdeà
+__USE_GNU
+
+
+448
+
+ $åuts_uÆocked
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+
+449
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+453
+
+ $puts
+ (
+__cÚ¡
+ *
+__s
+__THROW
+;
+
+457
+
+ $ung‘c
+ (
+__c
+,
+FILE
+ *
+__¡»am
+__THROW
+;
+
+461
+size_t
+
+ $ä—d
+ (*
+__»¡riù
+
+__±r
+,
+size_t
+
+__size
+,
+
+462
+size_t
+
+__n
+,
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+464
+size_t
+
+ $fwr™e
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__±r
+,
+size_t
+
+__size
+,
+
+465
+size_t
+
+__n
+,
+FILE
+ *
+__»¡riù
+
+__s
+__THROW
+;
+
+467 #ifdeà
+__USE_MISC
+
+
+469
+size_t
+
+ $ä—d_uÆocked
+ (*
+__»¡riù
+
+__±r
+,
+size_t
+
+__size
+,
+
+470
+size_t
+
+__n
+,
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+471
+size_t
+
+ $fwr™e_uÆocked
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__±r
+,
+size_t
+
+__size
+,
+
+472
+size_t
+
+__n
+,
+FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+477
+
+ $f£ek
+ (
+FILE
+ *
+__¡»am
+, 
+__off
+, 
+__wh’û
+__THROW
+;
+
+479
+
+ $á–l
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+481
+
+ $»wšd
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+488 #iâdeà
+__USE_FILE_OFFSET64
+
+
+489 #ifdeà
+__USE_LARGEFILE
+
+
+491
+
+ $f£eko
+ (
+FILE
+ *
+__¡»am
+,
+__off_t
+
+__off
+, 
+__wh’û
+__THROW
+;
+
+493
+__off_t
+
+ $á–lo
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+497
+
+ $fg‘pos
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+,
+åos_t
+ *__»¡riù
+__pos
+)
+
+498
+__THROW
+;
+
+500
+
+ $f£os
+ (
+FILE
+ *
+__¡»am
+,
+__cÚ¡
+
+åos_t
+ *
+__pos
+__THROW
+;
+
+502 #ifdeà
+__REDIRECT
+
+
+503 #ifdeà
+__USE_LARGEFILE
+
+
+504
+
+ `__REDIRECT
+ (
+f£eko
+,
+
+505 (
+FILE
+ *
+__¡»am
+,
+__off64_t
+
+__off
+, 
+__wh’û
+__THROW
+,
+
+506
+f£eko64
+);
+
+507
+__off64_t
+
+ `__REDIRECT
+ (
+á–lo
+, (
+FILE
+ *
+__¡»am
+__THROW
+,
+á–lo64
+);
+
+509
+
+ `__REDIRECT
+ (
+fg‘pos
+, (
+FILE
+ *
+__»¡riù
+
+__¡»am
+,
+
+510
+åos_t
+ *
+__»¡riù
+
+__pos
+__THROW
+,
+fg‘pos64
+);
+
+511
+
+ `__REDIRECT
+ (
+f£os
+,
+
+512 (
+FILE
+ *
+__¡»am
+,
+__cÚ¡
+
+åos_t
+ *
+__pos
+__THROW
+,
+
+513
+f£os64
+);
+
+515 #ifdeà
+__USE_LARGEFILE
+
+
+516 
+ #f£eko
+
+f£eko64
+
+
+ )
+
+517 
+ #á–lo
+
+á–lo64
+
+
+ )
+
+519 
+ #fg‘pos
+
+fg‘pos64
+
+
+ )
+
+520 
+ #f£os
+
+f£os64
+
+
+ )
+
+524 #ifdeà
+__USE_LARGEFILE64
+
+
+525
+
+ $f£eko64
+ (
+FILE
+ *
+__¡»am
+,
+__off64_t
+
+__off
+, 
+__wh’û
+__THROW
+;
+
+526
+__off64_t
+
+ $á–lo64
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+527
+
+ $fg‘pos64
+ (
+FILE
+ *
+__»¡riù
+
+__¡»am
+,
+åos64_t
+ *__»¡riù
+__pos
+)
+
+528
+__THROW
+;
+
+529
+
+ $f£os64
+ (
+FILE
+ *
+__¡»am
+,
+__cÚ¡
+
+åos64_t
+ *
+__pos
+__THROW
+;
+
+533
+
+ $þ—»¼
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+535
+
+ $ãof
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+537
+
+ $ã¼Ü
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+539 #ifdeà
+__USE_MISC
+
+
+541
+
+ $þ—»¼_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+542
+
+ $ãof_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+543
+
+ $ã¼Ü_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+548
+
+ $³¼Ü
+ (
+__cÚ¡
+ *
+__s
+__THROW
+;
+
+552 #ifdef
+__USE_BSD
+
+
+553
+
+sys_ü
+;
+
+554
+__cÚ¡
+ *__cÚ¡
+sys_”¾i¡
+[];
+
+556 #ifdef
+__USE_GNU
+
+
+557
+
+_sys_ü
+;
+
+558
+__cÚ¡
+ *__cÚ¡
+_sys_”¾i¡
+[];
+
+562 #ifdef
+__USE_POSIX
+
+
+564
+
+ $fž’o
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+567 #ifdeà
+__USE_MISC
+
+
+569
+
+ $fž’o_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+573 #ià(
+defšed
+
+__USE_POSIX2
+ || defšed
+__USE_SVID
+ || defšed
+__USE_BSD
+ || \
+
+574
+defšed
+
+__USE_MISC
+)
+
+576
+FILE
+ *
+ $pÝ’
+ (
+__cÚ¡
+ *
+__commªd
+, __cÚ¡ *
+__modes
+__THROW
+;
+
+579
+
+ $pþo£
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+583 #ifdef
+__USE_POSIX
+
+
+585
+*
+ $ù”mid
+ (*
+__s
+__THROW
+;
+
+589 #ifdeà
+__USE_XOPEN
+
+
+591
+*
+ $cu£rid
+ (*
+__s
+__THROW
+;
+
+595 #ifdef
+__USE_GNU
+
+
+596 
+ob¡ack
+;
+
+599
+
+ $ob¡ack_´štf
+ (
+ob¡ack
+ *
+__»¡riù
+
+__ob¡ack
+,
+
+600
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+, ...è
+__THROW
+;
+
+601
+
+ $ob¡ack_v´štf
+ (
+ob¡ack
+ *
+__»¡riù
+
+__ob¡ack
+,
+
+602
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+,
+
+603
+_G_va_li¡
+
+__¬gs
+__THROW
+;
+
+607 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+611
+
+ $æockfže
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+615
+
+ $árylockfže
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+618
+
+ $fuÆockfže
+ (
+FILE
+ *
+__¡»am
+__THROW
+;
+
+621 #ià
+defšed
+
+__USE_XOPEN
+ && !defšed
+__USE_XOPEN2K
+ && !defšed
+__USE_GNU
+
+
+625 
+ #__Ãed_g‘Ýt
+
+
+ )
+
+626 
+ ~<g‘Ýt.h
+>
+
+631 #ifdeà
+__USE_EXTERN_INLINES
+
+
+632 
+ ~<b™s/¡dio.h
+>
+
+635
+__END_DECLS
+
+
+ @/usr/include/stdlib.h
+
+23 #iâdef
+_STDLIB_H
+
+
+25 
+ ~<ã©u»s.h
+>
+
+28 
+ #__Ãed_size_t
+
+
+ )
+
+29 #iâdeà
+__Ãed_m®loc_ªd_ÿÎoc
+
+
+30 
+ #__Ãed_wch¬_t
+
+
+ )
+
+31 
+ #__Ãed_NULL
+
+
+ )
+
+33 
+ ~<¡ddef.h
+>
+
+35
+ g__BEGIN_DECLS
+
+
+37 #iâdeà
+__Ãed_m®loc_ªd_ÿÎoc
+
+
+38 
+ #_STDLIB_H
+ 1
+
+ )
+
+40 #ià
+defšed
+
+__USE_XOPEN
+ && !defšed
+_SYS_WAIT_H
+
+
+42 
+ ~<b™s/wa™æags.h
+>
+
+43 
+ ~<b™s/wa™¡©us.h
+>
+
+45 #ifdeà
+__USE_BSD
+
+
+50 #ià
+defšed
+
+__GNUC__
+ && !defšed
+__ýlu¥lus
+
+
+51 
+ #__WAIT_INT
+(
+¡©us
+) \
+
+52 (
+ `__ex‹nsiÚ__
+ ({ uniÚ {
+ `__ty³of
+(
+¡©us
+__š
+; 
+__i
+; }
+__u
+; \
+
+53
+__u
+.
+__š
+ = (
+¡©us
+); __u.
+__i
+; }))
+
+ )
+
+55 
+ #__WAIT_INT
+(
+¡©us
+è(*(*è&(¡©us))
+
+ )
+
+63 #ià!
+defšed
+
+__GNUC__
+ || __GNUC__ < 2 || defšed
+__ýlu¥lus
+
+
+64 
+ #__WAIT_STATUS
+ *
+
+ )
+
+65 
+ #__WAIT_STATUS_DEFN
+ *
+
+ )
+
+70 
+wa™
+ *
+ m__u±r
+;
+
+71 *
+ m__Œ
+;
+
+72 }
+ t__WAIT_STATUS
+
+ t__©Œibu‹__
+ ((
+ t__Œª¥¬’t_uniÚ__
+));
+
+73 
+ #__WAIT_STATUS_DEFN
+ *
+
+ )
+
+78 
+ #__WAIT_INT
+(
+¡©us
+è(¡©us)
+
+ )
+
+79 
+ #__WAIT_STATUS
+ *
+
+ )
+
+80 
+ #__WAIT_STATUS_DEFN
+ *
+
+ )
+
+85 
+ #WEXITSTATUS
+(
+¡©us
+ `__WEXITSTATUS
+(
+ `__WAIT_INT
+(¡©us))
+
+ )
+
+86 
+ #WTERMSIG
+(
+¡©us
+ `__WTERMSIG
+(
+ `__WAIT_INT
+(¡©us))
+
+ )
+
+87 
+ #WSTOPSIG
+(
+¡©us
+ `__WSTOPSIG
+(
+ `__WAIT_INT
+(¡©us))
+
+ )
+
+88 
+ #WIFEXITED
+(
+¡©us
+ `__WIFEXITED
+(
+ `__WAIT_INT
+(¡©us))
+
+ )
+
+89 
+ #WIFSIGNALED
+(
+¡©us
+ `__WIFSIGNALED
+(
+ `__WAIT_INT
+(¡©us))
+
+ )
+
+90 
+ #WIFSTOPPED
+(
+¡©us
+ `__WIFSTOPPED
+(
+ `__WAIT_INT
+(¡©us))
+
+ )
+
+96 
+ mquÙ
+;
+
+97 
+ m»m
+;
+
+98 }
+ tdiv_t
+;
+
+101 #iâdeà
+__ldiv_t_defšed
+
+
+104 
+ mquÙ
+;
+
+105 
+ m»m
+;
+
+106 }
+ tldiv_t
+;
+
+107 
+ #__ldiv_t_defšed
+ 1
+
+ )
+
+110 #ià
+defšed
+
+__USE_ISOC99
+ && !defšed
+__Îdiv_t_defšed
+
+
+112
+__ex‹nsiÚ__
+ struct
+
+114 
+ mquÙ
+;
+
+115 
+ m»m
+;
+
+116 }
+ tÎdiv_t
+;
+
+117 
+ #__Îdiv_t_defšed
+ 1
+
+ )
+
+122 
+ #RAND_MAX
+ 2147483647
+
+ )
+
+127 
+ #EXIT_FAILURE
+ 1
+
+ )
+
+128 
+ #EXIT_SUCCESS
+ 0
+
+ )
+
+132 
+ #MB_CUR_MAX
+ (
+ `__ùy³_g‘_mb_cur_max
+ ())
+
+ )
+
+133
+size_t
+
+ $__ùy³_g‘_mb_cur_max
+ (è
+__THROW
+;
+
+137
+
+ $©of
+ (
+__cÚ¡
+ *
+__Ō
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+139
+
+ $©oi
+ (
+__cÚ¡
+ *
+__Ō
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+141
+
+ $©Þ
+ (
+__cÚ¡
+ *
+__Ō
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+143 #ià
+defšed
+
+__USE_ISOC99
+ || (defšed
+__GLIBC_HAVE_LONG_LONG
+ && defšed
+__USE_MISC
+)
+
+145
+__ex‹nsiÚ__
+
+
+ $©Þl
+ (
+__cÚ¡
+ *
+__Ō
+)
+
+146
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+150
+
+ $¡¹od
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+151 **
+__»¡riù
+
+__’d±r
+__THROW
+;
+
+153 #ifdef
+__USE_ISOC99
+
+
+155
+
+ $¡¹of
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+156 **
+__»¡riù
+
+__’d±r
+__THROW
+;
+
+158
+
+ $¡¹Þd
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+159 **
+__»¡riù
+
+__’d±r
+__THROW
+;
+
+163
+
+ $¡¹Þ
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+164 **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+__THROW
+;
+
+166
+
+ $¡¹oul
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+167 **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+)
+
+168
+__THROW
+;
+
+170 #ià
+defšed
+
+__GLIBC_HAVE_LONG_LONG
+ && defšed
+__USE_BSD
+
+
+172
+__ex‹nsiÚ__
+
+
+173
+
+ $¡¹oq
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+174 **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+__THROW
+;
+
+176
+__ex‹nsiÚ__
+
+
+177
+
+ $¡¹ouq
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+178 **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+)
+
+179
+__THROW
+;
+
+182 #ià
+defšed
+
+__USE_ISOC99
+ || (defšed
+__GLIBC_HAVE_LONG_LONG
+ && defšed
+__USE_MISC
+)
+
+186
+__ex‹nsiÚ__
+
+
+187
+
+ $¡¹Þl
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+188 **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+__THROW
+;
+
+190
+__ex‹nsiÚ__
+
+
+191
+
+ $¡¹ouÎ
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+192 **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+)
+
+193
+__THROW
+;
+
+197 #ifdeà
+__USE_GNU
+
+
+211 
+ ~<xloÿË.h
+>
+
+215
+
+ $__¡¹Þ_l
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+216 **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+,
+
+217
+__loÿË_t
+
+__loc
+__THROW
+;
+
+219
+
+ $__¡¹oul_l
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+220 **
+__»¡riù
+
+__’d±r
+,
+
+221 
+__ba£
+,
+__loÿË_t
+
+__loc
+__THROW
+;
+
+223
+__ex‹nsiÚ__
+
+
+224
+
+ $__¡¹Þl_l
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+225 **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+,
+
+226
+__loÿË_t
+
+__loc
+__THROW
+;
+
+228
+__ex‹nsiÚ__
+
+
+229
+
+ $__¡¹ouÎ_l
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+230 **
+__»¡riù
+
+__’d±r
+,
+
+231 
+__ba£
+,
+__loÿË_t
+
+__loc
+)
+
+232
+__THROW
+;
+
+234
+
+ $__¡¹od_l
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+235 **
+__»¡riù
+
+__’d±r
+,
+__loÿË_t
+
+__loc
+)
+
+236
+__THROW
+;
+
+238
+
+ $__¡¹of_l
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+239 **
+__»¡riù
+
+__’d±r
+,
+__loÿË_t
+
+__loc
+__THROW
+;
+
+241
+
+ $__¡¹Þd_l
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+242 **
+__»¡riù
+
+__’d±r
+,
+
+243
+__loÿË_t
+
+__loc
+__THROW
+;
+
+250
+
+ $__¡¹od_š‹º®
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+251 **
+__»¡riù
+
+__’d±r
+, 
+__group
+)
+
+252
+__THROW
+;
+
+253
+
+ $__¡¹of_š‹º®
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+254 **
+__»¡riù
+
+__’d±r
+, 
+__group
+)
+
+255
+__THROW
+;
+
+256
+
+ $__¡¹Þd_š‹º®
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+257 **
+__»¡riù
+
+__’d±r
+,
+
+258 
+__group
+__THROW
+;
+
+259 #iâdeà
+__¡¹Þ_š‹º®_defšed
+
+
+260
+
+ $__¡¹Þ_š‹º®
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+261 **
+__»¡riù
+
+__’d±r
+,
+
+262 
+__ba£
+, 
+__group
+__THROW
+;
+
+263 
+ #__¡¹Þ_š‹º®_defšed
+ 1
+
+ )
+
+265 #iâdeà
+__¡¹oul_š‹º®_defšed
+
+
+266
+
+ $__¡¹oul_š‹º®
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+267 **
+__»¡riù
+
+__’d±r
+,
+
+268 
+__ba£
+, 
+__group
+__THROW
+;
+
+269 
+ #__¡¹oul_š‹º®_defšed
+ 1
+
+ )
+
+271 #ià
+defšed
+
+__GNUC__
+ || defšed
+__USE_ISOC99
+
+
+272 #iâdeà
+__¡¹Þl_š‹º®_defšed
+
+
+273
+__ex‹nsiÚ__
+
+
+274
+
+ $__¡¹Þl_š‹º®
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+,
+
+275 **
+__»¡riù
+
+__’d±r
+,
+
+276 
+__ba£
+, 
+__group
+__THROW
+;
+
+277 
+ #__¡¹Þl_š‹º®_defšed
+ 1
+
+ )
+
+279 #iâdeà
+__¡¹ouÎ_š‹º®_defšed
+
+
+280
+__ex‹nsiÚ__
+
+
+281
+
+ $__¡¹ouÎ_š‹º®
+ (
+__cÚ¡
+ *
+
+282
+__»¡riù
+
+__Ō
+,
+
+283 **
+__»¡riù
+
+__’d±r
+,
+
+284 
+__ba£
+, 
+__group
+)
+
+285
+__THROW
+;
+
+286 
+ #__¡¹ouÎ_š‹º®_defšed
+ 1
+
+ )
+
+290 #ifdeà
+__USE_EXTERN_INLINES
+
+
+293
+__šlše
+ 
+
+294
+ $¡¹od
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+__THROW
+
+
+296 
+ `__¡¹od_š‹º®
+ (
+__Ō
+,
+__’d±r
+, 0);
+
+297
+ }
+}
+
+298
+__šlše
+ 
+
+299
+ $¡¹Þ
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+,
+
+300 
+__ba£
+__THROW
+
+
+302 
+ `__¡¹Þ_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+
+303
+ }
+}
+
+304
+__šlše
+ 
+
+305
+ $¡¹oul
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+,
+
+306 
+__ba£
+__THROW
+
+
+308 
+ `__¡¹oul_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+
+309
+ }
+}
+
+311 #ifdeà
+__USE_ISOC99
+
+
+312
+__šlše
+ 
+
+313
+ $¡¹of
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+__THROW
+
+
+315 
+ `__¡¹of_š‹º®
+ (
+__Ō
+,
+__’d±r
+, 0);
+
+316
+ }
+}
+
+317
+__šlše
+ 
+
+318
+ $¡¹Þd
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+__THROW
+
+
+320 
+ `__¡¹Þd_š‹º®
+ (
+__Ō
+,
+__’d±r
+, 0);
+
+321
+ }
+}
+
+324 #ifdeà
+__USE_BSD
+
+
+325
+__ex‹nsiÚ__
+
+__šlše
+ 
+
+326
+ $¡¹oq
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+,
+
+327 
+__ba£
+__THROW
+
+
+329 
+ `__¡¹Þl_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+
+330
+ }
+}
+
+331
+__ex‹nsiÚ__
+
+__šlše
+ 
+
+332
+ $¡¹ouq
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+,
+
+333 
+__ba£
+__THROW
+
+
+335 
+ `__¡¹ouÎ_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+
+336
+ }
+}
+
+339 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_ISOC99
+
+
+340
+__ex‹nsiÚ__
+
+__šlše
+ 
+
+341
+ $¡¹Þl
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+,
+
+342 
+__ba£
+__THROW
+
+
+344 
+ `__¡¹Þl_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+
+345
+ }
+}
+
+346
+__ex‹nsiÚ__
+
+__šlše
+ 
+
+347
+ $¡¹ouÎ
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Ō
+, **__»¡riù
+__’d±r
+,
+
+348 
+__ba£
+__THROW
+
+
+350 
+ `__¡¹ouÎ_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+
+351
+ }
+}
+
+354
+__šlše
+ 
+
+355
+ $©of
+ (
+__cÚ¡
+ *
+__Ō
+__THROW
+
+
+357 
+ `¡¹od
+ (
+__Ō
+, (**è
+NULL
+);
+
+358
+ }
+}
+
+359
+__šlše
+ 
+
+360
+ $©oi
+ (
+__cÚ¡
+ *
+__Ō
+__THROW
+
+
+362  (è
+ `¡¹Þ
+ (
+__Ō
+, (**è
+NULL
+, 10);
+
+363
+ }
+}
+
+364
+__šlše
+ 
+
+365
+ $©Þ
+ (
+__cÚ¡
+ *
+__Ō
+__THROW
+
+
+367 
+ `¡¹Þ
+ (
+__Ō
+, (**è
+NULL
+, 10);
+
+368
+ }
+}
+
+370 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_ISOC99
+
+
+371
+__ex‹nsiÚ__
+
+__šlše
+ 
+
+372
+ $©Þl
+ (
+__cÚ¡
+ *
+__Ō
+__THROW
+
+
+374 
+ `¡¹Þl
+ (
+__Ō
+, (**è
+NULL
+, 10);
+
+375
+ }
+}
+
+380 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+384
+*
+ $l64a
+ (
+__n
+__THROW
+;
+
+387
+
+ $a64l
+ (
+__cÚ¡
+ *
+__s
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+390 
+ ~<sys/ty³s.h
+>
+
+397
+
+ $¿ndom
+ (è
+__THROW
+;
+
+400
+
+ $¤ªdom
+ (
+__£ed
+__THROW
+;
+
+406
+*
+ $š™¡©e
+ (
+__£ed
+, *
+__¡©ebuf
+,
+
+407
+size_t
+
+__¡©–’
+__THROW
+;
+
+411
+*
+ $£t¡©e
+ (*
+__¡©ebuf
+__THROW
+;
+
+414 #ifdeà
+__USE_MISC
+
+
+419 
+ s¿ndom_d©a
+
+
+421
+št32_t
+ *
+åŒ
+;
+
+422
+št32_t
+ *
+½Œ
+;
+
+423
+št32_t
+ *
+¡©e
+;
+
+424 
+¿nd_ty³
+;
+
+425 
+¿nd_deg
+;
+
+426 
+¿nd_£p
+;
+
+427
+št32_t
+ *
+’d_±r
+;
+
+430
+
+ $¿ndom_r
+ (
+¿ndom_d©a
+ *
+__»¡riù
+
+__buf
+,
+
+431
+št32_t
+ *
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+433
+
+ $¤ªdom_r
+ (
+__£ed
+, 
+¿ndom_d©a
+ *
+__buf
+__THROW
+;
+
+435
+
+ $š™¡©e_r
+ (
+__£ed
+, *
+__»¡riù
+
+__¡©ebuf
+,
+
+436
+size_t
+
+__¡©–’
+,
+
+437 
+¿ndom_d©a
+ *
+__»¡riù
+
+__buf
+__THROW
+;
+
+439
+
+ $£t¡©e_r
+ (*
+__»¡riù
+
+__¡©ebuf
+,
+
+440 
+¿ndom_d©a
+ *
+__»¡riù
+
+__buf
+__THROW
+;
+
+446
+
+ $¿nd
+ (è
+__THROW
+;
+
+448
+
+ $¤ªd
+ (
+__£ed
+__THROW
+;
+
+450 #ifdeà
+__USE_POSIX
+
+
+452
+
+ $¿nd_r
+ (*
+__£ed
+__THROW
+;
+
+456 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN
+
+
+460
+
+ $d¿nd48
+ (è
+__THROW
+;
+
+461
+
+ `ӻd48
+ (
+__xsubi
+[3]è
+__THROW
+;
+
+464
+
+ $̪d48
+ (è
+__THROW
+;
+
+465
+
+ `Īd48
+ (
+__xsubi
+[3]è
+__THROW
+;
+
+468
+
+ $m¿nd48
+ (è
+__THROW
+;
+
+469
+
+ `j¿nd48
+ (
+__xsubi
+[3]è
+__THROW
+;
+
+472
+
+ $¤ªd48
+ (
+__£edv®
+__THROW
+;
+
+473
+*
+ `£ed48
+ (
+__£ed16v
+[3]è
+__THROW
+;
+
+474
+
+ `lcÚg48
+ (
+__·¿m
+[7]è
+__THROW
+;
+
+476 #ifdeà
+__USE_MISC
+
+
+480 
+ sd¿nd48_d©a
+
+
+482 
+__x
+[3];
+
+483 
+__Þd_x
+[3];
+
+484 
+__c
+;
+
+485 
+__š™
+;
+
+486 
+__a
+;
+
+490
+
+ $d¿nd48_r
+ (
+d¿nd48_d©a
+ *
+__»¡riù
+
+__bufãr
+,
+
+491 *
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+492
+
+ `ӻd48_r
+ (
+__xsubi
+[3],
+
+493 
+d¿nd48_d©a
+ *
+__»¡riù
+
+__bufãr
+,
+
+494 *
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+497
+
+ $̪d48_r
+ (
+d¿nd48_d©a
+ *
+__»¡riù
+
+__bufãr
+,
+
+498 *
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+499
+
+ `Īd48_r
+ (
+__xsubi
+[3],
+
+500 
+d¿nd48_d©a
+ *
+__»¡riù
+
+__bufãr
+,
+
+501 *
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+504
+
+ $m¿nd48_r
+ (
+d¿nd48_d©a
+ *
+__»¡riù
+
+__bufãr
+,
+
+505 *
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+506
+
+ `j¿nd48_r
+ (
+__xsubi
+[3],
+
+507 
+d¿nd48_d©a
+ *
+__»¡riù
+
+__bufãr
+,
+
+508 *
+__»¡riù
+
+__»suÉ
+__THROW
+;
+
+511
+
+ $¤ªd48_r
+ (
+__£edv®
+, 
+d¿nd48_d©a
+ *
+__bufãr
+)
+
+512
+__THROW
+;
+
+514
+
+ `£ed48_r
+ (
+__£ed16v
+[3],
+
+515 
+d¿nd48_d©a
+ *
+__bufãr
+__THROW
+;
+
+517
+
+ `lcÚg48_r
+ (
+__·¿m
+[7],
+
+518 
+d¿nd48_d©a
+ *
+__bufãr
+__THROW
+;
+
+524 #iâdeà
+__m®loc_ªd_ÿÎoc_defšed
+
+
+525 
+ #__m®loc_ªd_ÿÎoc_defšed
+
+
+ )
+
+527
+*
+ $m®loc
+ (
+size_t
+
+__size
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+529
+*
+ $ÿÎoc
+ (
+size_t
+
+__nmemb
+, size_ˆ
+__size
+)
+
+530
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+533 #iâdeà
+__Ãed_m®loc_ªd_ÿÎoc
+
+
+536
+*
+ $»®loc
+ (*
+__±r
+,
+size_t
+
+__size
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+538
+
+ $ä“
+ (*
+__±r
+__THROW
+;
+
+540 #ifdef
+__USE_MISC
+
+
+542
+
+ $cä“
+ (*
+__±r
+__THROW
+;
+
+545 #ià
+defšed
+
+__USE_GNU
+ || defšed
+__USE_BSD
+ || defšed
+__USE_MISC
+
+
+546 
+ ~<®loÿ.h
+>
+
+549 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+551
+*
+ $v®loc
+ (
+size_t
+
+__size
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+554 #ifdeà
+__USE_XOPEN2K
+
+
+556
+
+ $posix_mem®ign
+ (**
+__mem±r
+,
+size_t
+
+__®ignm’t
+, size_ˆ
+__size
+)
+
+557
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+561
+
+ $abÜt
+ (è
+__THROW
+
+ `__©Œibu‹__
+ ((
+__nÜ‘uº__
+));
+
+565
+
+ `©ex™
+ ((*
+__func
+è()è
+__THROW
+;
+
+567 #ifdef
+__USE_MISC
+
+
+570
+
+ `Ú_ex™
+ ((*
+__func
+è(
+__¡©us
+, *
+__¬g
+), *__arg)
+
+571
+__THROW
+;
+
+577
+
+ $ex™
+ (
+__¡©us
+__THROW
+
+ `__©Œibu‹__
+ ((
+__nÜ‘uº__
+));
+
+579 #ifdeà
+__USE_ISOC99
+
+
+582
+
+ $_Ex™
+ (
+__¡©us
+__THROW
+
+ `__©Œibu‹__
+ ((
+__nÜ‘uº__
+));
+
+587
+*
+ $g‘’v
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+591
+*
+ $__£cu»_g‘’v
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+593 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN
+
+
+597
+
+ $pu‹nv
+ (*
+__¡ršg
+__THROW
+;
+
+600 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN2K
+
+
+603
+
+ $£‹nv
+ (
+__cÚ¡
+ *
+__Çme
+, __cÚ¡ *
+__v®ue
+, 
+__»¶aû
+)
+
+604
+__THROW
+;
+
+607
+
+ $un£‹nv
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+610 #ifdef
+__USE_MISC
+
+
+614
+
+ $þ—»nv
+ (è
+__THROW
+;
+
+618 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+623
+*
+ $mk‹mp
+ (*
+__‹m¶©e
+__THROW
+;
+
+630 #iâdeà
+__USE_FILE_OFFSET64
+
+
+631
+
+ $mk¡emp
+ (*
+__‹m¶©e
+__THROW
+;
+
+633 #ifdeà
+__REDIRECT
+
+
+634
+
+ `__REDIRECT
+ (
+mk¡emp
+, (*
+__‹m¶©e
+__THROW
+,
+mk¡emp64
+);
+
+636 
+ #mk¡emp
+
+mk¡emp64
+
+
+ )
+
+639 #ifdeà
+__USE_LARGEFILE64
+
+
+640
+
+ $mk¡emp64
+ (*
+__‹m¶©e
+__THROW
+;
+
+644 #ifdeà
+__USE_BSD
+
+
+650
+*
+ $mkd‹mp
+ (*
+__‹m¶©e
+__THROW
+;
+
+655
+
+ $sy¡em
+ (
+__cÚ¡
+ *
+__commªd
+__THROW
+;
+
+658 #ifdef
+__USE_GNU
+
+
+662
+*
+ $ÿnÚiÿlize_fže_Çme
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+665 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+672
+*
+ $»®·th
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__Çme
+,
+
+673 *
+__»¡riù
+
+__»sÞved
+__THROW
+;
+
+678 #iâdeà
+__COMPAR_FN_T
+
+
+679 
+ #__COMPAR_FN_T
+
+
+ )
+
+680 (*
+ t__com·r_â_t
+è(
+ t__cÚ¡
+ *, __const *);
+
+682 #ifdef
+__USE_GNU
+
+
+683 
+__com·r_â_t
+
+ tcom·risÚ_â_t
+;
+
+689
+*
+ `b£¬ch
+ (
+__cÚ¡
+ *
+__key
+, __cÚ¡ *
+__ba£
+,
+
+690
+size_t
+
+__nmemb
+, size_ˆ
+__size
+,
+__com·r_â_t
+
+__com·r
+);
+
+694
+
+ `qsÜt
+ (*
+__ba£
+,
+size_t
+
+__nmemb
+, size_ˆ
+__size
+,
+
+695
+__com·r_â_t
+
+__com·r
+);
+
+699
+
+ $abs
+ (
+__x
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+700
+
+ $Ïbs
+ (
+__x
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+701 #ifdeà
+__USE_ISOC99
+
+
+702
+__ex‹nsiÚ__
+
+
+ $Îabs
+ (
+__x
+)
+
+703
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+710
+div_t
+
+ $div
+ (
+__num”
+, 
+__d’om
+)
+
+711
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+712
+ldiv_t
+
+ $ldiv
+ (
+__num”
+, 
+__d’om
+)
+
+713
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+714 #ifdeà
+__USE_ISOC99
+
+
+715
+__ex‹nsiÚ__
+
+Îdiv_t
+
+ $Îdiv
+ (
+__num”
+,
+
+716 
+__d’om
+)
+
+717
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+721 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+728
+*
+ $ecvt
+ (
+__v®ue
+, 
+__ndig™
+, *
+__»¡riù
+
+__deýt
+,
+
+729 *
+__»¡riù
+
+__sign
+__THROW
+;
+
+734
+*
+ $fcvt
+ (
+__v®ue
+, 
+__ndig™
+, *
+__»¡riù
+
+__deýt
+,
+
+735 *
+__»¡riù
+
+__sign
+__THROW
+;
+
+740
+*
+ $gcvt
+ (
+__v®ue
+, 
+__ndig™
+, *
+__buf
+__THROW
+;
+
+743 #ifdeà
+__USE_MISC
+
+
+745
+*
+ $qecvt
+ (
+__v®ue
+, 
+__ndig™
+,
+
+746 *
+__»¡riù
+
+__deýt
+, *__»¡riù
+__sign
+__THROW
+;
+
+747
+*
+ $qfcvt
+ (
+__v®ue
+, 
+__ndig™
+,
+
+748 *
+__»¡riù
+
+__deýt
+, *__»¡riù
+__sign
+__THROW
+;
+
+749
+*
+ $qgcvt
+ (
+__v®ue
+, 
+__ndig™
+, *
+__buf
+__THROW
+;
+
+754
+
+ $ecvt_r
+ (
+__v®ue
+, 
+__ndig™
+, *
+__»¡riù
+
+__deýt
+,
+
+755 *
+__»¡riù
+
+__sign
+, *__»¡riù
+__buf
+,
+
+756
+size_t
+
+__Ën
+__THROW
+;
+
+757
+
+ $fcvt_r
+ (
+__v®ue
+, 
+__ndig™
+, *
+__»¡riù
+
+__deýt
+,
+
+758 *
+__»¡riù
+
+__sign
+, *__»¡riù
+__buf
+,
+
+759
+size_t
+
+__Ën
+__THROW
+;
+
+761
+
+ $qecvt_r
+ (
+__v®ue
+, 
+__ndig™
+,
+
+762 *
+__»¡riù
+
+__deýt
+, *__»¡riù
+__sign
+,
+
+763 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__Ën
+__THROW
+;
+
+764
+
+ $qfcvt_r
+ (
+__v®ue
+, 
+__ndig™
+,
+
+765 *
+__»¡riù
+
+__deýt
+, *__»¡riù
+__sign
+,
+
+766 *
+__»¡riù
+
+__buf
+,
+size_t
+
+__Ën
+__THROW
+;
+
+773
+
+ $mbËn
+ (
+__cÚ¡
+ *
+__s
+,
+size_t
+
+__n
+__THROW
+;
+
+776
+
+ $mbtowc
+ (
+wch¬_t
+ *
+__»¡riù
+
+__pwc
+,
+
+777
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__n
+__THROW
+;
+
+780
+
+ $wùomb
+ (*
+__s
+,
+wch¬_t
+
+__wch¬
+__THROW
+;
+
+784
+size_t
+
+ $mb¡owcs
+ (
+wch¬_t
+ *
+__»¡riù
+
+__pwcs
+,
+
+785
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__n
+__THROW
+;
+
+787
+size_t
+
+ $wc¡ombs
+ (*
+__»¡riù
+
+__s
+,
+
+788
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__pwcs
+,
+size_t
+
+__n
+)
+
+789
+__THROW
+;
+
+792 #ifdeà
+__USE_SVID
+
+
+797
+
+ $½m©ch
+ (
+__cÚ¡
+ *
+__»¥Ú£
+__THROW
+;
+
+801 #ifdeà
+__USE_XOPEN_EXTENDED
+
+
+808
+
+ $g‘subÝt
+ (**
+__»¡riù
+
+__ÝtiÚp
+,
+
+809 *
+__cÚ¡
+ *
+__»¡riù
+
+__tok’s
+,
+
+810 **
+__»¡riù
+
+__v®u•
+__THROW
+;
+
+814 #ifdeà
+__USE_XOPEN
+
+
+816
+
+ $£tkey
+ (
+__cÚ¡
+ *
+__key
+__THROW
+;
+
+822 #ifdeà
+__USE_XOPEN2K
+
+
+824
+
+ $posix_Ý’±
+ (
+__oæag
+__THROW
+;
+
+827 #ifdeà
+__USE_XOPEN
+
+
+832
+
+ $g¿Á±
+ (
+__fd
+__THROW
+;
+
+836
+
+ $uÆock±
+ (
+__fd
+__THROW
+;
+
+841
+*
+ $±¢ame
+ (
+__fd
+__THROW
+;
+
+844 #ifdeà
+__USE_GNU
+
+
+848
+
+ $±¢ame_r
+ (
+__fd
+, *
+__buf
+,
+size_t
+
+__buæ’
+__THROW
+;
+
+851
+
+ $g‘±
+ (è
+__THROW
+;
+
+854 #ifdeà
+__USE_BSD
+
+
+858
+
+ $g‘lßdavg
+ (
+__lßdavg
+[], 
+__ÃËm
+__THROW
+;
+
+862 #undeà
+__Ãed_m®loc_ªd_ÿÎoc
+
+
+864
+__END_DECLS
+
+
+ @/usr/include/string.h
+
+23 #iâdef
+_STRING_H
+
+
+24 
+ #_STRING_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28
+ g__BEGIN_DECLS
+
+
+31 
+ #__Ãed_size_t
+
+
+ )
+
+32 
+ #__Ãed_NULL
+
+
+ )
+
+33 
+ ~<¡ddef.h
+>
+
+37
+*
+ $memýy
+ (*
+__»¡riù
+
+__de¡
+,
+
+38
+__cÚ¡
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+__THROW
+;
+
+41
+*
+ $memmove
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+,
+size_t
+
+__n
+)
+
+42
+__THROW
+;
+
+47 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_BSD
+ || defšed
+__USE_XOPEN
+
+
+48
+*
+ $memcýy
+ (*
+__»¡riù
+
+__de¡
+,
+__cÚ¡
+ *__»¡riù
+__¤c
+,
+
+49 
+__c
+,
+size_t
+
+__n
+)
+
+50
+__THROW
+;
+
+55
+*
+ $mem£t
+ (*
+__s
+, 
+__c
+,
+size_t
+
+__n
+__THROW
+;
+
+58
+
+ $memcmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+,
+size_t
+
+__n
+)
+
+59
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+62
+*
+ $memchr
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+,
+size_t
+
+__n
+)
+
+63
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+65 #ifdeà
+__USE_GNU
+
+
+68
+*
+ $¿wmemchr
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+71
+*
+ $memrchr
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+,
+size_t
+
+__n
+)
+
+72
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+77
+*
+ $¡rýy
+ (*
+__»¡riù
+
+__de¡
+,
+__cÚ¡
+ *__»¡riù
+__¤c
+)
+
+78
+__THROW
+;
+
+80
+*
+ $¡ºýy
+ (*
+__»¡riù
+
+__de¡
+,
+
+81
+__cÚ¡
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+__THROW
+;
+
+84
+*
+ $¡rÿt
+ (*
+__»¡riù
+
+__de¡
+,
+__cÚ¡
+ *__»¡riù
+__¤c
+)
+
+85
+__THROW
+;
+
+87
+*
+ $¡ºÿt
+ (*
+__»¡riù
+
+__de¡
+,
+__cÚ¡
+ *__»¡riù
+__¤c
+,
+
+88
+size_t
+
+__n
+__THROW
+;
+
+91
+
+ $¡rcmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+)
+
+92
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+94
+
+ $¡ºcmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+,
+size_t
+
+__n
+)
+
+95
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+98
+
+ $¡rcÞl
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+)
+
+99
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+101
+size_t
+
+ $¡rxäm
+ (*
+__»¡riù
+
+__de¡
+,
+
+102
+__cÚ¡
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+__THROW
+;
+
+104 #ifdeà
+__USE_GNU
+
+
+108 
+ ~<xloÿË.h
+>
+
+111
+
+ $__¡rcÞl_l
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+,
+__loÿË_t
+
+__l
+)
+
+112
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+114
+size_t
+
+ $__¡rxäm_l
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+,
+size_t
+
+__n
+,
+
+115
+__loÿË_t
+
+__l
+__THROW
+;
+
+118 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+120
+*
+ $¡rdup
+ (
+__cÚ¡
+ *
+__s
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+126 #ià
+defšed
+
+__USE_GNU
+
+
+127
+*
+ $¡ºdup
+ (
+__cÚ¡
+ *
+__¡ršg
+,
+size_t
+
+__n
+)
+
+128
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+131 #ià
+defšed
+
+__USE_GNU
+ && defšed
+__GNUC__
+
+
+133 
+ #¡rdu·
+(
+s
+) \
+
+134 (
+__ex‹nsiÚ__
+ \
+
+136
+__cÚ¡
+ *
+__Þd
+ = (
+s
+); \
+
+137
+size_t
+
+__Ën
+ =
+ `¡¾’
+ (
+__Þd
+) + 1; \
+
+138 *
+__Ãw
+ = (*è
+ `__bužtš_®loÿ
+ (
+__Ën
+); \
+
+139 (*è
+ `memýy
+ (
+__Ãw
+,
+__Þd
+,
+__Ën
+); \
+
+140
+ }
+}))
+
+ )
+
+143 
+ #¡ºdu·
+(
+s
+,
+n
+) \
+
+144 (
+__ex‹nsiÚ__
+ \
+
+146
+__cÚ¡
+ *
+__Þd
+ = (
+s
+); \
+
+147
+size_t
+
+__Ën
+ =
+ `¡ºËn
+ (
+__Þd
+, (
+n
+)); \
+
+148 *
+__Ãw
+ = (*è
+ `__bužtš_®loÿ
+ (
+__Ën
+ + 1); \
+
+149
+__Ãw
+[
+__Ën
+] = '\0'; \
+
+150 (*è
+ `memýy
+ (
+__Ãw
+,
+__Þd
+,
+__Ën
+); \
+
+151 }))
+
+ )
+
+155
+*
+ $¡rchr
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+157
+*
+ $¡¼chr
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+159 #ifdeà
+__USE_GNU
+
+
+162
+*
+ $¡rchºul
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+167
+size_t
+
+ $¡rc¥n
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__»jeù
+)
+
+168
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+171
+size_t
+
+ $¡r¥n
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__acû±
+)
+
+172
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+174
+*
+ $¡½brk
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__acû±
+)
+
+175
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+177
+*
+ $¡r¡r
+ (
+__cÚ¡
+ *
+__hay¡ack
+, __cÚ¡ *
+__ÃedË
+)
+
+178
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+180 #ifdeà
+__USE_GNU
+
+
+182
+*
+ $¡rÿ£¡r
+ (
+__cÚ¡
+ *
+__hay¡ack
+, __cÚ¡ *
+__ÃedË
+)
+
+183
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+187
+*
+ $¡¹ok
+ (*
+__»¡riù
+
+__s
+,
+__cÚ¡
+ *__»¡riù
+__d–im
+)
+
+188
+__THROW
+;
+
+192
+*
+ $__¡¹ok_r
+ (*
+__»¡riù
+
+__s
+,
+
+193
+__cÚ¡
+ *
+__»¡riù
+
+__d–im
+,
+
+194 **
+__»¡riù
+
+__§ve_±r
+__THROW
+;
+
+195 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+196
+*
+ $¡¹ok_r
+ (*
+__»¡riù
+
+__s
+,
+__cÚ¡
+ *__»¡riù
+__d–im
+,
+
+197 **
+__»¡riù
+
+__§ve_±r
+__THROW
+;
+
+200 #ifdeà
+__USE_GNU
+
+
+204
+*
+ $memmem
+ (
+__cÚ¡
+ *
+__hay¡ack
+,
+size_t
+
+__hay¡ackËn
+,
+
+205
+__cÚ¡
+ *
+__ÃedË
+,
+size_t
+
+__ÃedËËn
+)
+
+206
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+210
+*
+ $__mempýy
+ (*
+__»¡riù
+
+__de¡
+,
+
+211
+__cÚ¡
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+__THROW
+;
+
+212
+*
+ $mempýy
+ (*
+__»¡riù
+
+__de¡
+,
+
+213
+__cÚ¡
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+__THROW
+;
+
+218
+size_t
+
+ $¡¾’
+ (
+__cÚ¡
+ *
+__s
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+220 #ifdef
+__USE_GNU
+
+
+223
+size_t
+
+ $¡ºËn
+ (
+__cÚ¡
+ *
+__¡ršg
+,
+size_t
+
+__maxËn
+)
+
+224
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+229
+*
+ $¡»¼Ü
+ (
+__Ӽum
+__THROW
+;
+
+230 #ifdef
+__USE_MISC
+
+
+233
+*
+ $¡»¼Ü_r
+ (
+__Ӽum
+, *
+__buf
+,
+size_t
+
+__buæ’
+__THROW
+;
+
+238
+
+ $__bz”o
+ (*
+__s
+,
+size_t
+
+__n
+__THROW
+;
+
+240 #ià
+defšed
+
+__USE_BSD
+
+
+242
+
+ $bcÝy
+ (
+__cÚ¡
+ *
+__¤c
+, *
+__de¡
+,
+size_t
+
+__n
+__THROW
+;
+
+245
+
+ $bz”o
+ (*
+__s
+,
+size_t
+
+__n
+__THROW
+;
+
+248
+
+ $bcmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+,
+size_t
+
+__n
+)
+
+249
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+252
+*
+ $šdex
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+255
+*
+ $ršdex
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+259
+
+ $ffs
+ (
+__i
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+263 #ifdef
+__USE_GNU
+
+
+264
+
+ $ff¦
+ (
+__l
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+265 #ifdeà
+__GNUC__
+
+
+266
+__ex‹nsiÚ__
+
+
+ $ff¦l
+ (
+__Î
+)
+
+267
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+272
+
+ $¡rÿ£cmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+)
+
+273
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+276
+
+ $¡ºÿ£cmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+,
+size_t
+
+__n
+)
+
+277
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+280 #ifdef
+__USE_GNU
+
+
+283
+
+ $__¡rÿ£cmp_l
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+,
+
+284
+__loÿË_t
+
+__loc
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+286
+
+ $__¡ºÿ£cmp_l
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+,
+
+287
+size_t
+
+__n
+,
+__loÿË_t
+
+__loc
+)
+
+288
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+291 #ifdef
+__USE_BSD
+
+
+294
+*
+ $¡r£p
+ (**
+__»¡riù
+
+__¡ršgp
+,
+
+295
+__cÚ¡
+ *
+__»¡riù
+
+__d–im
+__THROW
+;
+
+298 #ifdef
+__USE_GNU
+
+
+300
+
+ $¡rv”scmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+)
+
+301
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+304
+*
+ $¡rsigÇl
+ (
+__sig
+__THROW
+;
+
+307
+*
+ $__¡pýy
+ (*
+__»¡riù
+
+__de¡
+,
+__cÚ¡
+ *__»¡riù
+__¤c
+)
+
+308
+__THROW
+;
+
+309
+*
+ $¡pýy
+ (*
+__»¡riù
+
+__de¡
+,
+__cÚ¡
+ *__»¡riù
+__¤c
+)
+
+310
+__THROW
+;
+
+314
+*
+ $__¡²ýy
+ (*
+__»¡riù
+
+__de¡
+,
+
+315
+__cÚ¡
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+__THROW
+;
+
+316
+*
+ $¡²ýy
+ (*
+__»¡riù
+
+__de¡
+,
+
+317
+__cÚ¡
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+__THROW
+;
+
+320
+*
+ $¡räy
+ (*
+__¡ršg
+__THROW
+;
+
+323
+*
+ $memäob
+ (*
+__s
+,
+size_t
+
+__n
+__THROW
+;
+
+325 #iâdeà
+ba£Çme
+
+
+330
+*
+ $ba£Çme
+ (
+__cÚ¡
+ *
+__fž’ame
+__THROW
+;
+
+335 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+336 #ià
+defšed
+
+__OPTIMIZE__
+ && !defšed
+__OPTIMIZE_SIZE__
+ \
+
+337 && !
+defšed
+
+__NO_INLINE__
+ && !defšed
+__ýlu¥lus
+
+
+357 
+ ~<b™s/¡ršg.h
+>
+
+360 
+ ~<b™s/¡ršg2.h
+>
+
+364
+__END_DECLS
+
+
+ @/usr/include/sys/dir.h
+
+19 #iâdef
+_SYS_DIR_H
+
+
+20 
+ #_SYS_DIR_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24 
+ ~<dœ’t.h
+>
+
+26 
+ #dœeù
+
+dœ’t
+
+
+ )
+
+ @/usr/include/sys/file.h
+
+19 #iâdef
+_SYS_FILE_H
+
+
+20 
+ #_SYS_FILE_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24 #iâdef
+_FCNTL_H
+
+
+25 
+ ~<fúŽ.h
+>
+
+28
+ g__BEGIN_DECLS
+
+
+33 #iâdeà
+L_SET
+
+
+34 
+ #L_SET
+ 0
+
+ )
+
+35 
+ #L_INCR
+ 1
+
+ )
+
+36 
+ #L_XTND
+ 2
+
+ )
+
+41 
+ #LOCK_SH
+ 1
+
+ )
+
+42 
+ #LOCK_EX
+ 2
+
+ )
+
+43 
+ #LOCK_UN
+ 8
+
+ )
+
+46 
+ #LOCK_NB
+ 4
+
+ )
+
+51
+
+ $æock
+ (
+__fd
+, 
+__Ý”©iÚ
+__THROW
+;
+
+54
+__END_DECLS
+
+
+ @/usr/include/sys/ioctl.h
+
+19 #iâdef
+_SYS_IOCTL_H
+
+
+20 
+ #_SYS_IOCTL_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24
+ g__BEGIN_DECLS
+
+
+27 
+ ~<b™s/ioùls.h
+>
+
+30 
+ ~<b™s/ioùl-ty³s.h
+>
+
+37 
+ ~<sys/‰ydeçuÉs.h
+>
+
+42
+
+ $ioùl
+ (
+__fd
+, 
+__»que¡
+, ...è
+__THROW
+;
+
+44
+__END_DECLS
+
+
+ @/usr/include/sys/ipc.h
+
+19 #iâdeà
+_SYS_IPC_H
+
+
+20 
+ #_SYS_IPC_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24 #ià!
+defšed
+
+__USE_SVID
+ && !defšed
+__USE_XOPEN
+ &&
+__GNUC__
+ >= 2
+
+29 
+ ~<b™s/c.h
+>
+
+31 #iâdeà
+__uid_t_defšed
+
+
+32 
+__uid_t
+
+ tuid_t
+;
+
+33 
+ #__uid_t_defšed
+
+
+ )
+
+36 #iâdeà
+__gid_t_defšed
+
+
+37 
+__gid_t
+
+ tgid_t
+;
+
+38 
+ #__gid_t_defšed
+
+
+ )
+
+41 #iâdeà
+__mode_t_defšed
+
+
+42 
+__mode_t
+
+ tmode_t
+;
+
+43 
+ #__mode_t_defšed
+
+
+ )
+
+46 #iâdeà
+__key_t_defšed
+
+
+47 
+__key_t
+
+ tkey_t
+;
+
+48 
+ #__key_t_defšed
+
+
+ )
+
+51
+__BEGIN_DECLS
+
+
+54
+key_t
+
+ $áok
+ (
+__cÚ¡
+ *
+__·thÇme
+, 
+__´oj_id
+__THROW
+;
+
+56
+__END_DECLS
+
+
+ @/usr/include/sys/msg.h
+
+19 #iâdeà
+_SYS_MSG_H
+
+
+20 
+ #_SYS_MSG_H
+
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+25 
+ ~<sys/c.h
+>
+
+28 
+ ~<b™s/msq.h
+>
+
+31 
+ #__Ãed_time_t
+
+
+ )
+
+32 
+ ~<time.h
+>
+
+34 #iâdeà
+__pid_t_defšed
+
+
+35 
+__pid_t
+
+ tpid_t
+;
+
+36 
+ #__pid_t_defšed
+
+
+ )
+
+39 #iâdeà
+__ssize_t_defšed
+
+
+40 
+__ssize_t
+
+ tssize_t
+;
+
+41 
+ #__ssize_t_defšed
+
+
+ )
+
+47 #ifdeà
+__USE_GNU
+
+
+49 
+ smsgbuf
+
+
+51 
+ mmty³
+;
+
+52 
+ mm‹xt
+[1];
+
+57
+__BEGIN_DECLS
+
+
+60
+
+ $msgùl
+ (
+__msqid
+, 
+__cmd
+, 
+msqid_ds
+ *
+__buf
+__THROW
+;
+
+63
+
+ $msgg‘
+ (
+key_t
+
+__key
+, 
+__msgæg
+__THROW
+;
+
+66
+
+ $msgrcv
+ (
+__msqid
+, *
+__msgp
+,
+size_t
+
+__msgsz
+,
+
+67 
+__msgtyp
+, 
+__msgæg
+__THROW
+;
+
+70
+
+ $msg¢d
+ (
+__msqid
+,
+__cÚ¡
+ *
+__msgp
+,
+size_t
+
+__msgsz
+,
+
+71 
+__msgæg
+__THROW
+;
+
+73
+__END_DECLS
+
+
+ @/usr/include/sys/param.h
+
+19 #iâdeà
+_SYS_PARAM_H
+
+
+20 
+ #_SYS_PARAM_H
+ 1
+
+ )
+
+22 
+ ~<lim™s.h
+>
+
+23 
+ ~<lšux/lim™s.h
+>
+
+24 
+ ~<lšux/·¿m.h
+>
+
+28 
+ #NBBY
+
+CHAR_BIT
+
+
+ )
+
+29 #iâdef
+NGROUPS
+
+
+30 
+ #NGROUPS
+
+NGROUPS_MAX
+
+
+ )
+
+32 
+ #MAXSYMLINKS
+ 20
+
+ )
+
+33 
+ #CANBSIZ
+
+MAX_CANON
+
+
+ )
+
+34 
+ #NCARGS
+
+ARG_MAX
+
+
+ )
+
+35 
+ #MAXPATHLEN
+
+PATH_MAX
+
+
+ )
+
+39 
+ #NOFILE
+ 256
+
+ )
+
+42 
+ ~<sys/ty³s.h
+>
+
+45 
+ #£tb™
+(
+a
+,
+i
+è(×)[(i)/
+NBBY
+] |ð1<<((i)%NBBY))
+
+ )
+
+46 
+ #þrb™
+(
+a
+,
+i
+è(×)[(i)/
+NBBY
+] &ð~(1<<((i)%NBBY)))
+
+ )
+
+47 
+ #is£t
+(
+a
+,
+i
+è(×)[(i)/
+NBBY
+] & (1<<((i)%NBBY)))
+
+ )
+
+48 
+ #isþr
+(
+a
+,
+i
+è((×)[(i)/
+NBBY
+] & (1<<((i)%NBBY))è=ð0)
+
+ )
+
+51 #iâdeà
+howmªy
+
+
+52 
+ #howmªy
+(
+x
+,
+y
+è(((x)+((y)-1))/(y))
+
+ )
+
+54 
+ #roundup
+(
+x
+,
+y
+è((((x)+((y)-1))/(y))*(y))
+
+ )
+
+55 
+ #pow”of2
+(
+x
+è((((x)-1)&(x))==0)
+
+ )
+
+58 
+ #MIN
+(
+a
+,
+b
+è((×)<(b))?×):(b))
+
+ )
+
+59 
+ #MAX
+(
+a
+,
+b
+è((×)>(b))?×):(b))
+
+ )
+
+63 
+ #DEV_BSIZE
+ 512
+
+ )
+
+ @/usr/include/sys/select.h
+
+22 #iâdeà
+_SYS_SELECT_H
+
+
+23 
+ #_SYS_SELECT_H
+ 1
+
+ )
+
+25 
+ ~<ã©u»s.h
+>
+
+28 
+ ~<b™s/ty³s.h
+>
+
+31 
+ ~<b™s/£Ëù.h
+>
+
+34 
+ ~<b™s/sig£t.h
+>
+
+36 #iâdeà
+__sig£t_t_defšed
+
+
+37 
+ #__sig£t_t_defšed
+
+
+ )
+
+38 
+__sig£t_t
+
+ tsig£t_t
+;
+
+42 
+ #__Ãed_time_t
+
+
+ )
+
+43 
+ #__Ãed_time¥ec
+
+
+ )
+
+44 
+ ~<time.h
+>
+
+45 
+ #__Ãed_timev®
+
+
+ )
+
+46 
+ ~<b™s/time.h
+>
+
+48 #iâdeà
+__su£cÚds_t_defšed
+
+
+49 
+__su£cÚds_t
+
+ tsu£cÚds_t
+;
+
+50 
+ #__su£cÚds_t_defšed
+
+
+ )
+
+55 
+ t__fd_mask
+;
+
+58 
+ #__NFDBITS
+ (8 *  (
+__fd_mask
+))
+
+ )
+
+59 
+ #__FDELT
+(
+d
+è((dè/
+__NFDBITS
+)
+
+ )
+
+60 
+ #__FDMASK
+(
+d
+è((
+__fd_mask
+è1 << ((dè%
+__NFDBITS
+))
+
+ )
+
+67 #ifdeà
+__USE_XOPEN
+
+
+68
+__fd_mask
+
+ mfds_b™s
+[
+__FD_SETSIZE
+ /
+__NFDBITS
+];
+
+69 
+ #__FDS_BITS
+(
+£t
+è((£t)->
+fds_b™s
+)
+
+ )
+
+71
+__fd_mask
+
+ m__fds_b™s
+[
+__FD_SETSIZE
+ /
+__NFDBITS
+];
+
+72 
+ #__FDS_BITS
+(
+£t
+è((£t)->
+__fds_b™s
+)
+
+ )
+
+74 }
+ tfd_£t
+;
+
+77 
+ #FD_SETSIZE
+
+__FD_SETSIZE
+
+
+ )
+
+79 #ifdeà
+__USE_MISC
+
+
+81 
+__fd_mask
+
+ tfd_mask
+;
+
+84 
+ #NFDBITS
+
+__NFDBITS
+
+
+ )
+
+89 
+ #FD_SET
+(
+fd
+,
+fd£
+ `__FD_SET
+ (fd, fd£)
+
+ )
+
+90 
+ #FD_CLR
+(
+fd
+,
+fd£
+ `__FD_CLR
+ (fd, fd£)
+
+ )
+
+91 
+ #FD_ISSET
+(
+fd
+,
+fd£
+ `__FD_ISSET
+ (fd, fd£)
+
+ )
+
+92 
+ #FD_ZERO
+(
+fd£
+ `__FD_ZERO
+ (fd£)
+
+ )
+
+95
+__BEGIN_DECLS
+
+
+102
+
+ $£Ëù
+ (
+__nfds
+,
+fd_£t
+ *
+__»¡riù
+
+__»adfds
+,
+
+103
+fd_£t
+ *
+__»¡riù
+
+__wr™efds
+,
+
+104
+fd_£t
+ *
+__»¡riù
+
+__exû±fds
+,
+
+105 
+timev®
+ *
+__»¡riù
+
+__timeout
+__THROW
+;
+
+107 #ifdeà
+__USE_XOPEN2K
+
+
+111
+
+ $p£Ëù
+ (
+__nfds
+,
+fd_£t
+ *
+__»¡riù
+
+__»adfds
+,
+
+112
+fd_£t
+ *
+__»¡riù
+
+__wr™efds
+,
+
+113
+fd_£t
+ *
+__»¡riù
+
+__exû±fds
+,
+
+114 cÚ¡ 
+time¥ec
+ *
+__»¡riù
+
+__timeout
+,
+
+115 cÚ¡
+__sig£t_t
+ *
+__»¡riù
+
+__sigmask
+__THROW
+;
+
+118
+__END_DECLS
+
+
+ @/usr/include/sys/sem.h
+
+19 #iâdeà
+_SYS_SEM_H
+
+
+20 
+ #_SYS_SEM_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24 
+ #__Ãed_size_t
+
+
+ )
+
+25 
+ ~<¡ddef.h
+>
+
+28 
+ ~<sys/c.h
+>
+
+31 
+ ~<b™s/£m.h
+>
+
+37 
+ s£mbuf
+
+
+39 
+ m£m_num
+;
+
+40 
+ m£m_Ý
+;
+
+41 
+ m£m_æg
+;
+
+45
+__BEGIN_DECLS
+
+
+48
+
+ $£mùl
+ (
+__£mid
+, 
+__£mnum
+, 
+__cmd
+, ...è
+__THROW
+;
+
+51
+
+ $£mg‘
+ (
+key_t
+
+__key
+, 
+__n£ms
+, 
+__£mæg
+__THROW
+;
+
+54
+
+ $£mÝ
+ (
+__£mid
+, 
+£mbuf
+ *
+__sÝs
+,
+size_t
+
+__nsÝs
+__THROW
+;
+
+56
+__END_DECLS
+
+
+ @/usr/include/sys/shm.h
+
+19 #iâdeà
+_SYS_SHM_H
+
+
+20 
+ #_SYS_SHM_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24 
+ #__Ãed_size_t
+
+
+ )
+
+25 
+ ~<¡ddef.h
+>
+
+28 
+ ~<sys/c.h
+>
+
+31 
+ ~<b™s/shm.h
+>
+
+34 
+ #__Ãed_time_t
+
+
+ )
+
+35 
+ ~<time.h
+>
+
+37 #ifdeà
+__USE_XOPEN
+
+
+38 #iâdeà
+__pid_t_defšed
+
+
+39 
+__pid_t
+
+ tpid_t
+;
+
+40 
+ #__pid_t_defšed
+
+
+ )
+
+44
+ g__BEGIN_DECLS
+
+
+47 
+ #SHMLBA
+ (
+ `__g‘·gesize
+ ())
+
+ )
+
+48
+
+ $__g‘·gesize
+ (è
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+55
+
+ $shmùl
+ (
+__shmid
+, 
+__cmd
+, 
+shmid_ds
+ *
+__buf
+__THROW
+;
+
+58
+
+ $shmg‘
+ (
+key_t
+
+__key
+,
+size_t
+
+__size
+, 
+__shmæg
+__THROW
+;
+
+61
+*
+ $shm©
+ (
+__shmid
+,
+__cÚ¡
+ *
+__shmaddr
+, 
+__shmæg
+)
+
+62
+__THROW
+;
+
+65
+
+ $shmdt
+ (
+__cÚ¡
+ *
+__shmaddr
+__THROW
+;
+
+67
+__END_DECLS
+
+
+ @/usr/include/sys/socket.h
+
+20 #iâdef
+_SYS_SOCKET_H
+
+
+21 
+ #_SYS_SOCKET_H
+ 1
+
+ )
+
+23 
+ ~<ã©u»s.h
+>
+
+25
+ g__BEGIN_DECLS
+
+
+27 
+ ~<sys/uio.h
+>
+
+28 
+ #__Ãed_size_t
+
+
+ )
+
+29 
+ ~<¡ddef.h
+>
+
+35 
+ ~<b™s/sock‘.h
+>
+
+37 #ifdeà
+__USE_BSD
+
+
+40 
+ sosockaddr
+
+
+42 
+ m§_çmžy
+;
+
+43 
+ m§_d©a
+[14];
+
+51
+ mSHUT_RD
+ = 0,
+
+52 
+ #SHUT_RD
+
+SHUT_RD
+
+
+ )
+
+53
+ mSHUT_WR
+,
+
+54 
+ #SHUT_WR
+
+SHUT_WR
+
+
+ )
+
+55
+ mSHUT_RDWR
+
+
+56 
+ #SHUT_RDWR
+
+SHUT_RDWR
+
+
+ )
+
+65 #ià
+defšed
+
+__ýlu¥lus
+ || !
+__GNUC_PREREQ
+ (2, 7è|| !defšed
+__USE_GNU
+
+
+66 
+ #__SOCKADDR_ARG
+ 
+sockaddr
+ *
+__»¡riù
+
+
+ )
+
+67 
+ #__CONST_SOCKADDR_ARG
+
+__cÚ¡
+ 
+sockaddr
+ *
+
+ )
+
+71 
+ #__SOCKADDR_ALLTYPES
+ \
+
+72
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr
+) \
+
+73
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_©
+) \
+
+74
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_ax25
+) \
+
+75
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_dl
+) \
+
+76
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_eÚ
+) \
+
+77
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_š
+) \
+
+78
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_š6
+) \
+
+79
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_š¬p
+) \
+
+80
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_x
+) \
+
+81
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_iso
+) \
+
+82
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_ns
+) \
+
+83
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_un
+) \
+
+84
+ `__SOCKADDR_ONETYPE
+ (
+sockaddr_x25
+)
+
+ )
+
+86 
+ #__SOCKADDR_ONETYPE
+(
+ty³
+èty³ *
+__»¡riù
+
+__
+##ty³##__;
+
+ )
+
+87 uniÚ {
+ m__SOCKADDR_ALLTYPES
+
+
+88 }
+ t__SOCKADDR_ARG
+
+ t__©Œibu‹__
+ ((
+ t__Œª¥¬’t_uniÚ__
+));
+
+89 #undeà
+__SOCKADDR_ONETYPE
+
+
+90 
+ #__SOCKADDR_ONETYPE
+(
+ty³
+__cÚ¡
+ ty³ *
+__»¡riù
+
+__
+##ty³##__;
+
+ )
+
+91 uniÚ {
+ m__SOCKADDR_ALLTYPES
+
+
+92 }
+ t__CONST_SOCKADDR_ARG
+
+ t__©Œibu‹__
+ ((
+ t__Œª¥¬’t_uniÚ__
+));
+
+93 #undeà
+__SOCKADDR_ONETYPE
+
+
+100
+
+ $sock‘
+ (
+__domaš
+, 
+__ty³
+, 
+__´ÙocÞ
+__THROW
+;
+
+106
+
+ `sock‘·œ
+ (
+__domaš
+, 
+__ty³
+, 
+__´ÙocÞ
+,
+
+107 
+__fds
+[2]è
+__THROW
+;
+
+110
+
+ $bšd
+ (
+__fd
+,
+__CONST_SOCKADDR_ARG
+
+__addr
+,
+sockËn_t
+
+__Ën
+)
+
+111
+__THROW
+;
+
+114
+
+ $g‘sockÇme
+ (
+__fd
+,
+__SOCKADDR_ARG
+
+__addr
+,
+
+115
+sockËn_t
+ *
+__»¡riù
+
+__Ën
+__THROW
+;
+
+121
+
+ $cÚÃù
+ (
+__fd
+,
+__CONST_SOCKADDR_ARG
+
+__addr
+,
+sockËn_t
+
+__Ën
+)
+
+122
+__THROW
+;
+
+126
+
+ $g‘³”Çme
+ (
+__fd
+,
+__SOCKADDR_ARG
+
+__addr
+,
+
+127
+sockËn_t
+ *
+__»¡riù
+
+__Ën
+__THROW
+;
+
+131
+ssize_t
+
+ $£nd
+ (
+__fd
+,
+__cÚ¡
+ *
+__buf
+,
+size_t
+
+__n
+, 
+__æags
+)
+
+132
+__THROW
+;
+
+136
+ssize_t
+
+ $»cv
+ (
+__fd
+, *
+__buf
+,
+size_t
+
+__n
+, 
+__æags
+)
+
+137
+__THROW
+;
+
+141
+ssize_t
+
+ $£ndto
+ (
+__fd
+,
+__cÚ¡
+ *
+__buf
+,
+size_t
+
+__n
+,
+
+142 
+__æags
+,
+__CONST_SOCKADDR_ARG
+
+__addr
+,
+
+143
+sockËn_t
+
+__addr_Ën
+__THROW
+;
+
+149
+ssize_t
+
+ $»cväom
+ (
+__fd
+, *
+__»¡riù
+
+__buf
+,
+size_t
+
+__n
+, 
+__æags
+,
+
+150
+__SOCKADDR_ARG
+
+__addr
+,
+sockËn_t
+ *
+__»¡riù
+
+__addr_Ën
+)
+
+151
+__THROW
+;
+
+156
+ssize_t
+
+ $£ndmsg
+ (
+__fd
+,
+__cÚ¡
+ 
+msghdr
+ *
+__mes§ge
+, 
+__æags
+)
+
+157
+__THROW
+;
+
+161
+ssize_t
+
+ $»cvmsg
+ (
+__fd
+, 
+msghdr
+ *
+__mes§ge
+, 
+__æags
+)
+
+162
+__THROW
+;
+
+168
+
+ $g‘sockÝt
+ (
+__fd
+, 
+__Ëv–
+, 
+__ÝŠame
+,
+
+169 *
+__»¡riù
+
+__Ýtv®
+,
+
+170
+sockËn_t
+ *
+__»¡riù
+
+__ÝŽ’
+__THROW
+;
+
+175
+
+ $£tsockÝt
+ (
+__fd
+, 
+__Ëv–
+, 
+__ÝŠame
+,
+
+176
+__cÚ¡
+ *
+__Ýtv®
+,
+sockËn_t
+
+__ÝŽ’
+__THROW
+;
+
+182
+
+ $li¡’
+ (
+__fd
+, 
+__n
+__THROW
+;
+
+189
+
+ $acû±
+ (
+__fd
+,
+__SOCKADDR_ARG
+
+__addr
+,
+
+190
+sockËn_t
+ *
+__»¡riù
+
+__addr_Ën
+)
+
+191
+__THROW
+;
+
+199
+
+ $shutdown
+ (
+__fd
+, 
+__how
+__THROW
+;
+
+202 #ifdeà
+__USE_XOPEN2K
+
+
+204
+
+ $sock©m¬k
+ (
+__fd
+__THROW
+;
+
+208 #ifdeà
+__USE_MISC
+
+
+212
+
+ $isfdty³
+ (
+__fd
+, 
+__fdty³
+__THROW
+;
+
+215
+__END_DECLS
+
+
+ @/usr/include/sys/stat.h
+
+23 #iâdef
+_SYS_STAT_H
+
+
+24 
+ #_SYS_STAT_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28 
+ ~<b™s/ty³s.h
+>
+
+30 #ifdeà
+__USE_XOPEN
+
+
+31 
+ #__Ãed_time_t
+
+
+ )
+
+32 
+ ~<time.h
+>
+
+36 #iâdeà
+__dev_t_defšed
+
+
+37 
+__dev_t
+
+ tdev_t
+;
+
+38 
+ #__dev_t_defšed
+
+
+ )
+
+41 #iâdeà
+__gid_t_defšed
+
+
+42 
+__gid_t
+
+ tgid_t
+;
+
+43 
+ #__gid_t_defšed
+
+
+ )
+
+46 #iâdeà
+__šo_t_defšed
+
+
+47 #iâdeà
+__USE_FILE_OFFSET64
+
+
+48 
+__šo_t
+
+ tšo_t
+;
+
+50 
+__šo64_t
+
+ tšo_t
+;
+
+52 
+ #__šo_t_defšed
+
+
+ )
+
+55 #iâdeà
+__mode_t_defšed
+
+
+56 
+__mode_t
+
+ tmode_t
+;
+
+57 
+ #__mode_t_defšed
+
+
+ )
+
+60 #iâdeà
+__Æšk_t_defšed
+
+
+61 
+__Æšk_t
+
+ tÆšk_t
+;
+
+62 
+ #__Æšk_t_defšed
+
+
+ )
+
+65 #iâdeà
+__off_t_defšed
+
+
+66 #iâdeà
+__USE_FILE_OFFSET64
+
+
+67 
+__off_t
+
+ toff_t
+;
+
+69 
+__off64_t
+
+ toff_t
+;
+
+71 
+ #__off_t_defšed
+
+
+ )
+
+74 #iâdeà
+__uid_t_defšed
+
+
+75 
+__uid_t
+
+ tuid_t
+;
+
+76 
+ #__uid_t_defšed
+
+
+ )
+
+80 #ifdeà
+__USE_UNIX98
+
+
+81 #iâdeà
+__blkút_t_defšed
+
+
+82 #iâdeà
+__USE_FILE_OFFSET64
+
+
+83 
+__blkút_t
+
+ tblkút_t
+;
+
+85 
+__blkút64_t
+
+ tblkút_t
+;
+
+87 
+ #__blkút_t_defšed
+
+
+ )
+
+90 #iâdeà
+__blksize_t_defšed
+
+
+91 
+__blksize_t
+
+ tblksize_t
+;
+
+92 
+ #__blksize_t_defšed
+
+
+ )
+
+96
+ g__BEGIN_DECLS
+
+
+98 
+ ~<b™s/¡©.h
+>
+
+100 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN
+
+
+101 
+ #S_IFMT
+
+__S_IFMT
+
+
+ )
+
+102 
+ #S_IFDIR
+
+__S_IFDIR
+
+
+ )
+
+103 
+ #S_IFCHR
+
+__S_IFCHR
+
+
+ )
+
+104 
+ #S_IFBLK
+
+__S_IFBLK
+
+
+ )
+
+105 
+ #S_IFREG
+
+__S_IFREG
+
+
+ )
+
+106 #ifdeà
+__S_IFIFO
+
+
+107 
+ #S_IFIFO
+
+__S_IFIFO
+
+
+ )
+
+109 #ifdeà
+__S_IFLNK
+
+
+110 
+ #S_IFLNK
+
+__S_IFLNK
+
+
+ )
+
+112 #ià(
+defšed
+
+__USE_BSD
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN2K
+) \
+
+113 &&
+defšed
+
+ g__S_IFSOCK
+
+
+114 
+ #S_IFSOCK
+
+__S_IFSOCK
+
+
+ )
+
+120 
+ #__S_ISTYPE
+(
+mode
+,
+mask
+è(((modeè&
+__S_IFMT
+è=ð(mask))
+
+ )
+
+122 
+ #S_ISDIR
+(
+mode
+ `__S_ISTYPE
+((mode),
+__S_IFDIR
+)
+
+ )
+
+123 
+ #S_ISCHR
+(
+mode
+ `__S_ISTYPE
+((mode),
+__S_IFCHR
+)
+
+ )
+
+124 
+ #S_ISBLK
+(
+mode
+ `__S_ISTYPE
+((mode),
+__S_IFBLK
+)
+
+ )
+
+125 
+ #S_ISREG
+(
+mode
+ `__S_ISTYPE
+((mode),
+__S_IFREG
+)
+
+ )
+
+126 #ifdeà
+__S_IFIFO
+
+
+127 
+ #S_ISFIFO
+(
+mode
+ `__S_ISTYPE
+((mode),
+__S_IFIFO
+)
+
+ )
+
+129 #ifdeà
+__S_IFLNK
+
+
+130 
+ #S_ISLNK
+(
+mode
+ `__S_ISTYPE
+((mode),
+__S_IFLNK
+)
+
+ )
+
+133 #ifdef
+__USE_BSD
+
+
+134 #iâdeà
+__S_IFLNK
+
+
+135 
+ #S_ISLNK
+(
+mode
+è0
+
+ )
+
+137 #ifdeà
+__S_IFSOCK
+
+
+138 
+ #S_ISSOCK
+(
+mode
+ `__S_ISTYPE
+((mode),
+__S_IFSOCK
+)
+
+ )
+
+146 #ifdef
+__USE_POSIX199309
+
+
+147 
+ #S_TYPEISMQ
+(
+buf
+ `__S_TYPEISMQ
+(buf)
+
+ )
+
+148 
+ #S_TYPEISSEM
+(
+buf
+ `__S_TYPEISSEM
+(buf)
+
+ )
+
+149 
+ #S_TYPEISSHM
+(
+buf
+ `__S_TYPEISSHM
+(buf)
+
+ )
+
+155 
+ #S_ISUID
+
+__S_ISUID
+
+
+ )
+
+156 
+ #S_ISGID
+
+__S_ISGID
+
+
+ )
+
+158 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_MISC
+ || defšed
+__USE_XOPEN
+
+
+160 
+ #S_ISVTX
+
+__S_ISVTX
+
+
+ )
+
+163 
+ #S_IRUSR
+
+__S_IREAD
+
+
+ )
+
+164 
+ #S_IWUSR
+
+__S_IWRITE
+
+
+ )
+
+165 
+ #S_IXUSR
+
+__S_IEXEC
+
+
+ )
+
+167 
+ #S_IRWXU
+ (
+__S_IREAD
+|
+__S_IWRITE
+|
+__S_IEXEC
+)
+
+ )
+
+169 #ià
+defšed
+
+__USE_MISC
+ && defšed
+__USE_BSD
+
+
+170 
+ #S_IREAD
+
+S_IRUSR
+
+
+ )
+
+171 
+ #S_IWRITE
+
+S_IWUSR
+
+
+ )
+
+172 
+ #S_IEXEC
+
+S_IXUSR
+
+
+ )
+
+175 
+ #S_IRGRP
+ (
+S_IRUSR
+ >> 3è
+
+ )
+
+176 
+ #S_IWGRP
+ (
+S_IWUSR
+ >> 3è
+
+ )
+
+177 
+ #S_IXGRP
+ (
+S_IXUSR
+ >> 3è
+
+ )
+
+179 
+ #S_IRWXG
+ (
+S_IRWXU
+ >> 3)
+
+ )
+
+181 
+ #S_IROTH
+ (
+S_IRGRP
+ >> 3è
+
+ )
+
+182 
+ #S_IWOTH
+ (
+S_IWGRP
+ >> 3è
+
+ )
+
+183 
+ #S_IXOTH
+ (
+S_IXGRP
+ >> 3è
+
+ )
+
+185 
+ #S_IRWXO
+ (
+S_IRWXG
+ >> 3)
+
+ )
+
+188 #ifdef
+__USE_BSD
+
+
+190 
+ #ACCESSPERMS
+ (
+S_IRWXU
+|
+S_IRWXG
+|
+S_IRWXO
+
+ )
+
+191 
+ #ALLPERMS
+ (
+S_ISUID
+|
+S_ISGID
+|
+S_ISVTX
+|
+S_IRWXU
+|
+S_IRWXG
+|
+S_IRWXO
+)
+
+ )
+
+192 
+ #DEFFILEMODE
+ (
+S_IRUSR
+|
+S_IWUSR
+|
+S_IRGRP
+|
+S_IWGRP
+|
+S_IROTH
+|
+S_IWOTH
+)
+
+ )
+
+194 
+ #S_BLKSIZE
+ 512
+
+ )
+
+198 #iâdeà
+__USE_FILE_OFFSET64
+
+
+200
+
+ $¡©
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fže
+,
+
+201 
+¡©
+ *
+__»¡riù
+
+__buf
+__THROW
+;
+
+205
+
+ $f¡©
+ (
+__fd
+, 
+¡©
+ *
+__buf
+__THROW
+;
+
+207 #ifdeà
+__REDIRECT
+
+
+208
+
+ `__REDIRECT
+ (
+¡©
+,
+
+209 (
+__cÚ¡
+ *
+__»¡riù
+
+__fže
+,
+
+210 
+¡©
+ *
+__»¡riù
+
+__buf
+__THROW
+,
+
+211
+¡©64
+);
+
+212
+
+ `__REDIRECT
+ (
+f¡©
+, (
+__fd
+, 
+¡©
+ *
+__buf
+__THROW
+,
+f¡©64
+);
+
+214 
+ #¡©
+
+¡©64
+
+
+ )
+
+215 
+ #f¡©
+
+f¡©64
+
+
+ )
+
+218 #ifdeà
+__USE_LARGEFILE64
+
+
+219
+
+ $¡©64
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fže
+,
+
+220 
+¡©64
+ *
+__»¡riù
+
+__buf
+__THROW
+;
+
+221
+
+ $f¡©64
+ (
+__fd
+, 
+¡©64
+ *
+__buf
+__THROW
+;
+
+224 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+225 #iâdeà
+__USE_FILE_OFFSET64
+
+
+228
+
+ $l¡©
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fže
+,
+
+229 
+¡©
+ *
+__»¡riù
+
+__buf
+__THROW
+;
+
+231 #ifdeà
+__REDIRECT
+
+
+232
+
+ `__REDIRECT
+ (
+l¡©
+,
+
+233 (
+__cÚ¡
+ *
+__»¡riù
+
+__fže
+,
+
+234 
+¡©
+ *
+__»¡riù
+
+__buf
+__THROW
+,
+
+235
+l¡©64
+);
+
+237 
+ #l¡©
+
+l¡©64
+
+
+ )
+
+240 #ifdeà
+__USE_LARGEFILE64
+
+
+241
+
+ $l¡©64
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fže
+,
+
+242 
+¡©64
+ *
+__»¡riù
+
+__buf
+__THROW
+;
+
+249
+
+ $chmod
+ (
+__cÚ¡
+ *
+__fže
+,
+__mode_t
+
+__mode
+__THROW
+;
+
+252 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+253
+
+ $fchmod
+ (
+__fd
+,
+__mode_t
+
+__mode
+__THROW
+;
+
+259
+__mode_t
+
+ $umask
+ (
+__mode_t
+
+__mask
+__THROW
+;
+
+261 #ifdef
+__USE_GNU
+
+
+264
+__mode_t
+
+ $g‘umask
+ (è
+__THROW
+;
+
+268
+
+ $mkdœ
+ (
+__cÚ¡
+ *
+__·th
+,
+__mode_t
+
+__mode
+__THROW
+;
+
+273 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+274
+
+ $mknod
+ (
+__cÚ¡
+ *
+__·th
+,
+__mode_t
+
+__mode
+,
+__dev_t
+
+__dev
+)
+
+275
+__THROW
+;
+
+280
+
+ $mkfifo
+ (
+__cÚ¡
+ *
+__·th
+,
+__mode_t
+
+__mode
+__THROW
+;
+
+297 #iâdeà
+_STAT_VER
+
+
+298 
+ #_STAT_VER
+ 0
+
+ )
+
+300 #iâdeà
+_MKNOD_VER
+
+
+301 
+ #_MKNOD_VER
+ 0
+
+ )
+
+305 #iâdeà
+__USE_FILE_OFFSET64
+
+
+306
+
+ $__fx¡©
+ (
+__v”
+, 
+__fždes
+, 
+¡©
+ *
+__¡©_buf
+__THROW
+;
+
+307
+
+ $__x¡©
+ (
+__v”
+,
+__cÚ¡
+ *
+__fž’ame
+,
+
+308 
+¡©
+ *
+__¡©_buf
+__THROW
+;
+
+309
+
+ $__lx¡©
+ (
+__v”
+,
+__cÚ¡
+ *
+__fž’ame
+,
+
+310 
+¡©
+ *
+__¡©_buf
+__THROW
+;
+
+312 #ifdeà
+__REDIRECT
+
+
+313
+
+ `__REDIRECT
+ (
+__fx¡©
+, (
+__v”
+, 
+__fždes
+,
+
+314 
+¡©
+ *
+__¡©_buf
+__THROW
+,
+
+315
+__fx¡©64
+);
+
+316
+
+ `__REDIRECT
+ (
+__x¡©
+, (
+__v”
+,
+__cÚ¡
+ *
+__fž’ame
+,
+
+317 
+¡©
+ *
+__¡©_buf
+__THROW
+,
+__x¡©64
+);
+
+318
+
+ `__REDIRECT
+ (
+__lx¡©
+, (
+__v”
+,
+__cÚ¡
+ *
+__fž’ame
+,
+
+319 
+¡©
+ *
+__¡©_buf
+__THROW
+,
+
+320
+__lx¡©64
+);
+
+323 
+ #__fx¡©
+
+__fx¡©64
+
+
+ )
+
+324 
+ #__x¡©
+
+__x¡©64
+
+
+ )
+
+325 
+ #__lx¡©
+
+__lx¡©64
+
+
+ )
+
+329 #ifdeà
+__USE_LARGEFILE64
+
+
+330
+
+ $__fx¡©64
+ (
+__v”
+, 
+__fždes
+, 
+¡©64
+ *
+__¡©_buf
+)
+
+331
+__THROW
+;
+
+332
+
+ $__x¡©64
+ (
+__v”
+,
+__cÚ¡
+ *
+__fž’ame
+,
+
+333 
+¡©64
+ *
+__¡©_buf
+__THROW
+;
+
+334
+
+ $__lx¡©64
+ (
+__v”
+,
+__cÚ¡
+ *
+__fž’ame
+,
+
+335 
+¡©64
+ *
+__¡©_buf
+__THROW
+;
+
+337
+
+ $__xmknod
+ (
+__v”
+,
+__cÚ¡
+ *
+__·th
+,
+__mode_t
+
+__mode
+,
+
+338
+__dev_t
+ *
+__dev
+__THROW
+;
+
+340 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+343
+__šlše__
+ 
+ $¡©
+ (
+__cÚ¡
+ *
+__·th
+,
+
+344 
+¡©
+ *
+__¡©buf
+__THROW
+
+
+346 
+ `__x¡©
+ (
+_STAT_VER
+,
+__·th
+,
+__¡©buf
+);
+
+347
+ }
+}
+
+349 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+350
+__šlše__
+ 
+ $l¡©
+ (
+__cÚ¡
+ *
+__·th
+,
+
+351 
+¡©
+ *
+__¡©buf
+__THROW
+
+
+353 
+ `__lx¡©
+ (
+_STAT_VER
+,
+__·th
+,
+__¡©buf
+);
+
+354
+ }
+}
+
+357
+__šlše__
+ 
+ $f¡©
+ (
+__fd
+, 
+¡©
+ *
+__¡©buf
+__THROW
+
+
+359 
+ `__fx¡©
+ (
+_STAT_VER
+,
+__fd
+,
+__¡©buf
+);
+
+360
+ }
+}
+
+362 #ià
+defšed
+
+__USE_MISC
+ || defšed
+__USE_BSD
+
+
+363
+__šlše__
+ 
+ $mknod
+ (
+__cÚ¡
+ *
+__·th
+,
+__mode_t
+
+__mode
+,
+
+364
+__dev_t
+
+__dev
+__THROW
+
+
+366 
+ `__xmknod
+ (
+_MKNOD_VER
+,
+__·th
+,
+__mode
+, &
+__dev
+);
+
+367
+ }
+}
+
+370 #ià
+defšed
+
+__USE_LARGEFILE64
+ \
+
+371 && (!
+defšed
+
+__USE_FILE_OFFSET64
+ \
+
+372 || (
+defšed
+
+__REDIRECT
+ && defšed
+__OPTIMIZE__
+))
+
+373
+__šlše__
+ 
+ $¡©64
+ (
+__cÚ¡
+ *
+__·th
+,
+
+374 
+¡©64
+ *
+__¡©buf
+__THROW
+
+
+376 
+ `__x¡©64
+ (
+_STAT_VER
+,
+__·th
+,
+__¡©buf
+);
+
+377
+ }
+}
+
+379 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+380
+__šlše__
+ 
+ $l¡©64
+ (
+__cÚ¡
+ *
+__·th
+,
+
+381 
+¡©64
+ *
+__¡©buf
+__THROW
+
+
+383 
+ `__lx¡©64
+ (
+_STAT_VER
+,
+__·th
+,
+__¡©buf
+);
+
+384
+ }
+}
+
+387
+__šlše__
+ 
+ $f¡©64
+ (
+__fd
+, 
+¡©64
+ *
+__¡©buf
+__THROW
+
+
+389 
+ `__fx¡©64
+ (
+_STAT_VER
+,
+__fd
+,
+__¡©buf
+);
+
+390
+ }
+}
+
+395
+__END_DECLS
+
+
+ @/usr/include/sys/time.h
+
+19 #iâdeà
+_SYS_TIME_H
+
+
+20 
+ #_SYS_TIME_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24 
+ ~<b™s/ty³s.h
+>
+
+25 
+ #__Ãed_time_t
+
+
+ )
+
+26 
+ ~<time.h
+>
+
+27 
+ #__Ãed_timev®
+
+
+ )
+
+28 
+ ~<b™s/time.h
+>
+
+30 
+ ~<sys/£Ëù.h
+>
+
+32 #iâdeà
+__su£cÚds_t_defšed
+
+
+33 
+__su£cÚds_t
+
+ tsu£cÚds_t
+;
+
+34 
+ #__su£cÚds_t_defšed
+
+
+ )
+
+38
+ g__BEGIN_DECLS
+
+
+40 #ifdeà
+__USE_GNU
+
+
+42 
+ #TIMEVAL_TO_TIMESPEC
+(
+tv
+,
+ts
+) { \
+
+43 (
+ts
+)->
+tv_£c
+ = (
+tv
+)->tv_sec; \
+
+44 (
+ts
+)->
+tv_n£c
+ = (
+tv
+)->
+tv_u£c
+ * 1000; \
+
+45 }
+
+ )
+
+46 
+ #TIMESPEC_TO_TIMEVAL
+(
+tv
+,
+ts
+) { \
+
+47 (
+tv
+)->
+tv_£c
+ = (
+ts
+)->tv_sec; \
+
+48 (
+tv
+)->
+tv_u£c
+ = (
+ts
+)->
+tv_n£c
+ / 1000; \
+
+49 }
+
+ )
+
+53 #ifdeà
+__USE_BSD
+
+
+56 
+ stimezÚe
+
+
+58 
+ mtz_mšu‹swe¡
+;
+
+59 
+ mtz_d¡time
+;
+
+62 
+timezÚe
+ *
+ t__»¡riù
+
+ t__timezÚe_±r_t
+;
+
+64 *
+ t__»¡riù
+
+ t__timezÚe_±r_t
+;
+
+72
+
+ $g‘timeofday
+ (
+timev®
+ *
+__»¡riù
+
+__tv
+,
+
+73
+__timezÚe_±r_t
+
+__tz
+__THROW
+;
+
+75 #ifdeà
+__USE_BSD
+
+
+78
+
+ $£‰imeofday
+ (
+__cÚ¡
+ 
+timev®
+ *
+__tv
+,
+
+79
+__cÚ¡
+ 
+timezÚe
+ *
+__tz
+__THROW
+;
+
+85
+
+ $adjtime
+ (
+__cÚ¡
+ 
+timev®
+ *
+__d–
+,
+
+86 
+timev®
+ *
+__Þdd–
+__THROW
+;
+
+91
+ e__™im”_which
+
+
+94
+ITIMER_REAL
+ = 0,
+
+95 
+ #ITIMER_REAL
+
+ITIMER_REAL
+
+
+ )
+
+97
+ITIMER_VIRTUAL
+ = 1,
+
+98 
+ #ITIMER_VIRTUAL
+
+ITIMER_VIRTUAL
+
+
+ )
+
+101
+ITIMER_PROF
+ = 2
+
+102 
+ #ITIMER_PROF
+
+ITIMER_PROF
+
+
+ )
+
+107 
+ s™im”v®
+
+
+110 
+timev®
+
+™_š‹rv®
+;
+
+112 
+timev®
+
+™_v®ue
+;
+
+115 #ià
+defšed
+
+__USE_GNU
+ && !defšed
+__ýlu¥lus
+
+
+118 
+__™im”_which
+
+ t__™im”_which_t
+;
+
+120 
+ t__™im”_which_t
+;
+
+125
+
+ $g‘™im”
+ (
+__™im”_which_t
+
+__which
+,
+
+126 
+™im”v®
+ *
+__v®ue
+__THROW
+;
+
+131
+
+ $£t™im”
+ (
+__™im”_which_t
+
+__which
+,
+
+132
+__cÚ¡
+ 
+™im”v®
+ *
+__»¡riù
+
+__Ãw
+,
+
+133 
+™im”v®
+ *
+__»¡riù
+
+__Þd
+__THROW
+;
+
+137
+
+ `utimes
+ (
+__cÚ¡
+ *
+__fže
+, __cÚ¡ 
+timev®
+
+__tvp
+[2])
+
+138
+__THROW
+;
+
+141 #ifdeà
+__USE_BSD
+
+
+144 
+ #tim”is£t
+(
+tvp
+è(Ñvp)->
+tv_£c
+ || (tvp)->
+tv_u£c
+)
+
+ )
+
+145 
+ #tim”þ—r
+(
+tvp
+è(Ñvp)->
+tv_£c
+ = (tvp)->
+tv_u£c
+ = 0)
+
+ )
+
+146 
+ #tim”cmp
+(
+a
+,
+b
+,
+CMP
+) \
+
+147 (((
+a
+)->
+tv_£c
+ =ð(
+b
+)->tv_sec) ? \
+
+148 ((
+a
+)->
+tv_u£c
+
+ `CMP
+ (
+b
+)->tv_usec) : \
+
+149 ((
+a
+)->
+tv_£c
+
+ `CMP
+ (
+b
+)->tv_£c))
+
+ )
+
+150 
+ #tim”add
+(
+a
+,
+b
+,
+»suÉ
+) \
+
+152 (
+»suÉ
+)->
+tv_£c
+ = (
+a
+)->tv_£ø+ (
+b
+)->tv_sec; \
+
+153 (
+»suÉ
+)->
+tv_u£c
+ = (
+a
+)->tv_u£ø+ (
+b
+)->tv_usec; \
+
+154 ià((
+»suÉ
+)->
+tv_u£c
+ >= 1000000) \
+
+156 ++(
+»suÉ
+)->
+tv_£c
+; \
+
+157 (
+»suÉ
+)->
+tv_u£c
+ -= 1000000; \
+
+159
+ }
+} 0)
+
+ )
+
+160 
+ #tim”sub
+(
+a
+,
+b
+,
+»suÉ
+) \
+
+162 (
+»suÉ
+)->
+tv_£c
+ = (
+a
+)->tv_£ø- (
+b
+)->tv_sec; \
+
+163 (
+»suÉ
+)->
+tv_u£c
+ = (
+a
+)->tv_u£ø- (
+b
+)->tv_usec; \
+
+164 ià((
+»suÉ
+)->
+tv_u£c
+ < 0) { \
+
+165 --(
+»suÉ
+)->
+tv_£c
+; \
+
+166 (
+»suÉ
+)->
+tv_u£c
+ += 1000000; \
+
+168 } 0)
+
+ )
+
+171
+ g__END_DECLS
+
+
+ @/usr/include/sys/times.h
+
+23 #iâdef
+_SYS_TIMES_H
+
+
+24 
+ #_SYS_TIMES_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28 
+ #__Ãed_þock_t
+
+
+ )
+
+29 
+ ~<time.h
+>
+
+32
+__BEGIN_DECLS
+
+
+35 
+ stms
+
+
+37
+þock_t
+
+ mtms_utime
+;
+
+38
+þock_t
+
+ mtms_¡ime
+;
+
+40
+þock_t
+
+ mtms_cutime
+;
+
+41
+þock_t
+
+ mtms_c¡ime
+;
+
+49
+þock_t
+
+ $times
+ (
+tms
+ *
+__bufãr
+__THROW
+;
+
+51
+__END_DECLS
+
+
+ @/usr/include/sys/types.h
+
+23 #iâdef
+_SYS_TYPES_H
+
+
+24 
+ #_SYS_TYPES_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28
+ g__BEGIN_DECLS
+
+
+30 
+ ~<b™s/ty³s.h
+>
+
+32 #ifdef
+__USE_BSD
+
+
+33 #iâdeà
+__u_ch¬_defšed
+
+
+34 
+__u_ch¬
+
+ tu_ch¬
+;
+
+35 
+__u_shÜt
+
+ tu_shÜt
+;
+
+36 
+__u_št
+
+ tu_št
+;
+
+37 
+__u_lÚg
+
+ tu_lÚg
+;
+
+38 
+__quad_t
+
+ tquad_t
+;
+
+39 
+__u_quad_t
+
+ tu_quad_t
+;
+
+40 
+__fsid_t
+
+ tfsid_t
+;
+
+41 
+ #__u_ch¬_defšed
+
+
+ )
+
+45 
+__loff_t
+
+ tloff_t
+;
+
+47 #iâdeà
+__šo_t_defšed
+
+
+48 #iâdeà
+__USE_FILE_OFFSET64
+
+
+49 
+__šo_t
+
+ tšo_t
+;
+
+51 
+__šo64_t
+
+ tšo_t
+;
+
+53 
+ #__šo_t_defšed
+
+
+ )
+
+55 #ià
+defšed
+
+__USE_LARGEFILE64
+ && !defšed
+__šo64_t_defšed
+
+
+56 
+__šo64_t
+
+ tšo64_t
+;
+
+57 
+ #__šo64_t_defšed
+
+
+ )
+
+60 #iâdeà
+__dev_t_defšed
+
+
+61 
+__dev_t
+
+ tdev_t
+;
+
+62 
+ #__dev_t_defšed
+
+
+ )
+
+65 #iâdeà
+__gid_t_defšed
+
+
+66 
+__gid_t
+
+ tgid_t
+;
+
+67 
+ #__gid_t_defšed
+
+
+ )
+
+70 #iâdeà
+__mode_t_defšed
+
+
+71 
+__mode_t
+
+ tmode_t
+;
+
+72 
+ #__mode_t_defšed
+
+
+ )
+
+75 #iâdeà
+__Æšk_t_defšed
+
+
+76 
+__Æšk_t
+
+ tÆšk_t
+;
+
+77 
+ #__Æšk_t_defšed
+
+
+ )
+
+80 #iâdeà
+__uid_t_defšed
+
+
+81 
+__uid_t
+
+ tuid_t
+;
+
+82 
+ #__uid_t_defšed
+
+
+ )
+
+85 #iâdeà
+__off_t_defšed
+
+
+86 #iâdeà
+__USE_FILE_OFFSET64
+
+
+87 
+__off_t
+
+ toff_t
+;
+
+89 
+__off64_t
+
+ toff_t
+;
+
+91 
+ #__off_t_defšed
+
+
+ )
+
+93 #ià
+defšed
+
+__USE_LARGEFILE64
+ && !defšed
+__off64_t_defšed
+
+
+94 
+__off64_t
+
+ toff64_t
+;
+
+95 
+ #__off64_t_defšed
+
+
+ )
+
+98 #iâdeà
+__pid_t_defšed
+
+
+99 
+__pid_t
+
+ tpid_t
+;
+
+100 
+ #__pid_t_defšed
+
+
+ )
+
+103 #ià(
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN
+è&& !defšed
+__id_t_defšed
+
+
+104 
+__id_t
+
+ tid_t
+;
+
+105 
+ #__id_t_defšed
+
+
+ )
+
+108 #iâdeà
+__ssize_t_defšed
+
+
+109 
+__ssize_t
+
+ tssize_t
+;
+
+110 
+ #__ssize_t_defšed
+
+
+ )
+
+113 #ifdef
+__USE_BSD
+
+
+114 #iâdeà
+__daddr_t_defšed
+
+
+115 
+__daddr_t
+
+ tdaddr_t
+;
+
+116 
+__ÿddr_t
+
+ tÿddr_t
+;
+
+117 
+ #__daddr_t_defšed
+
+
+ )
+
+121 #ià(
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN
+è&& !defšed
+__key_t_defšed
+
+
+122 
+__key_t
+
+ tkey_t
+;
+
+123 
+ #__key_t_defšed
+
+
+ )
+
+126 #ifdeà
+__USE_XOPEN
+
+
+127 
+ #__Ãed_þock_t
+
+
+ )
+
+129 
+ #__Ãed_time_t
+
+
+ )
+
+130 
+ #__Ãed_tim”_t
+
+
+ )
+
+131 
+ #__Ãed_þockid_t
+
+
+ )
+
+132 
+ ~<time.h
+>
+
+134 #ifdeà
+__USE_XOPEN
+
+
+135 #iâdeà
+__u£cÚds_t_defšed
+
+
+136 
+__u£cÚds_t
+
+ tu£cÚds_t
+;
+
+137 
+ #__u£cÚds_t_defšed
+
+
+ )
+
+139 #iâdeà
+__su£cÚds_t_defšed
+
+
+140 
+__su£cÚds_t
+
+ tsu£cÚds_t
+;
+
+141 
+ #__su£cÚds_t_defšed
+
+
+ )
+
+145 
+ #__Ãed_size_t
+
+
+ )
+
+146 
+ ~<¡ddef.h
+>
+
+148 #ifdeà
+__USE_MISC
+
+
+150 
+ tulÚg
+;
+
+151 
+ tushÜt
+;
+
+152 
+ tušt
+;
+
+157 #ià!
+__GNUC_PREREQ
+ (2, 7)
+
+160 #iâdeà
+__št8_t_defšed
+
+
+161 
+ #__št8_t_defšed
+
+
+ )
+
+162 
+ tšt8_t
+;
+
+163 
+ tšt16_t
+;
+
+164 
+ tšt32_t
+;
+
+165 #ià
+__GLIBC_HAVE_LONG_LONG
+
+
+166
+__ex‹nsiÚ__
+ 
+ tšt64_t
+;
+
+171 
+ tu_št8_t
+;
+
+172 
+ tu_št16_t
+;
+
+173 
+ tu_št32_t
+;
+
+174 #ià
+__GLIBC_HAVE_LONG_LONG
+
+
+175
+__ex‹nsiÚ__
+ 
+ tu_št64_t
+;
+
+178 
+ t»gi¡”_t
+;
+
+183 
+ #__štN_t
+(
+N
+,
+MODE
+) \
+
+184 ##
+ tN
+##
+ t_t
+
+ t__©Œibu‹__
+ ((
+ t__mode__
+ (
+ tMODE
+)))
+
+ )
+
+185 
+ t__u_štN_t
+(
+ tN
+,
+ tMODE
+) \
+
+186 
+ tu_št
+##
+ tN
+##
+ t_t
+
+ t__©Œibu‹__
+ ((
+ t__mode__
+ (
+ tMODE
+)))
+
+ )
+
+188 #iâdeà
+ t__št8_t_defšed
+
+
+189 
+ t__št8_t_defšed
+
+
+ )
+
+190
+ t__štN_t
+ (8,
+ t__QI__
+);
+
+191
+__štN_t
+ (16,
+__HI__
+);
+
+192
+__štN_t
+ (32,
+__SI__
+);
+
+193
+__štN_t
+ (64,
+__DI__
+);
+
+196
+__u_štN_t
+ (8,
+__QI__
+);
+
+197
+__u_štN_t
+ (16,
+__HI__
+);
+
+198
+__u_štN_t
+ (32,
+__SI__
+);
+
+199
+__u_štN_t
+ (64,
+__DI__
+);
+
+201 
+ t»gi¡”_t
+
+ t__©Œibu‹__
+ ((
+ t__mode__
+ (
+ t__wÜd__
+)));
+
+207 
+ #__BIT_TYPES_DEFINED__
+ 1
+
+ )
+
+210 #ifdef
+__USE_BSD
+
+
+212 
+ ~<’dŸn.h
+>
+
+215 
+ ~<sys/£Ëù.h
+>
+
+218 
+ ~<sys/sysmaüos.h
+>
+
+222 #ià
+defšed
+
+__USE_UNIX98
+ && !defšed
+__blksize_t_defšed
+
+
+223 
+__blksize_t
+
+ tblksize_t
+;
+
+224 
+ #__blksize_t_defšed
+
+
+ )
+
+228 #iâdeà
+__USE_FILE_OFFSET64
+
+
+229 #iâdeà
+__blkút_t_defšed
+
+
+230 
+__blkút_t
+
+ tblkút_t
+;
+
+231 
+ #__blkút_t_defšed
+
+
+ )
+
+233 #iâdeà
+__fsblkút_t_defšed
+
+
+234 
+__fsblkút_t
+
+ tfsblkút_t
+;
+
+235 
+ #__fsblkút_t_defšed
+
+
+ )
+
+237 #iâdeà
+__fsfžút_t_defšed
+
+
+238 
+__fsfžút_t
+
+ tfsfžút_t
+;
+
+239 
+ #__fsfžút_t_defšed
+
+
+ )
+
+242 #iâdeà
+__blkút_t_defšed
+
+
+243 
+__blkút64_t
+
+ tblkút_t
+;
+
+244 
+ #__blkút_t_defšed
+
+
+ )
+
+246 #iâdeà
+__fsblkút_t_defšed
+
+
+247 
+__fsblkút64_t
+
+ tfsblkút_t
+;
+
+248 
+ #__fsblkút_t_defšed
+
+
+ )
+
+250 #iâdeà
+__fsfžút_t_defšed
+
+
+251 
+__fsfžút64_t
+
+ tfsfžút_t
+;
+
+252 
+ #__fsfžút_t_defšed
+
+
+ )
+
+256 #ifdeà
+__USE_LARGEFILE64
+
+
+257 
+__blkút64_t
+
+ tblkút64_t
+;
+
+258 
+__fsblkút64_t
+
+ tfsblkút64_t
+;
+
+259 
+__fsfžút64_t
+
+ tfsfžút64_t
+;
+
+262
+ g__END_DECLS
+
+
+ @/usr/include/time.h
+
+23 #iâdef
+_TIME_H
+
+
+25 #ià(!
+defšed
+
+__Ãed_time_t
+ && !defšed
+__Ãed_þock_t
+ && \
+
+26 !
+defšed
+
+ g__Ãed_time¥ec
+)
+
+27 
+ #_TIME_H
+ 1
+
+ )
+
+28 
+ ~<ã©u»s.h
+>
+
+30
+ g__BEGIN_DECLS
+
+
+34 #ifdef
+_TIME_H
+
+
+36 
+ #__Ãed_size_t
+
+
+ )
+
+37 
+ #__Ãed_NULL
+
+
+ )
+
+38 
+ ~<¡ddef.h
+>
+
+42 
+ ~<b™s/time.h
+>
+
+45 #ià!
+defšed
+
+__STRICT_ANSI__
+ && !defšed
+__USE_XOPEN2K
+
+
+46 #iâdeà
+CLK_TCK
+
+
+47 
+ #CLK_TCK
+
+CLOCKS_PER_SEC
+
+
+ )
+
+53 #ià!
+defšed
+
+__þock_t_defšed
+ && (defšed
+_TIME_H
+ || defšed
+__Ãed_þock_t
+)
+
+54 
+ #__þock_t_defšed
+ 1
+
+ )
+
+56 
+ ~<b™s/ty³s.h
+>
+
+59 
+__þock_t
+
+ tþock_t
+;
+
+62 #undeà
+__Ãed_þock_t
+
+
+64 #ià!
+defšed
+
+__time_t_defšed
+ && (defšed
+_TIME_H
+ || defšed
+__Ãed_time_t
+)
+
+65 
+ #__time_t_defšed
+ 1
+
+ )
+
+67 
+ ~<b™s/ty³s.h
+>
+
+70 
+__time_t
+
+ ttime_t
+;
+
+73 #undeà
+__Ãed_time_t
+
+
+75 #ià!
+defšed
+
+__þockid_t_defšed
+ && \
+
+76 ((
+defšed
+
+ g_TIME_H
+ && defšed
+ g__USE_POSIX199309
+è|| defšed
+ g__Ãed_þockid_t
+)
+
+77 
+ #__þockid_t_defšed
+ 1
+
+ )
+
+79 
+ ~<b™s/ty³s.h
+>
+
+82 
+__þockid_t
+
+ tþockid_t
+;
+
+85 #undeà
+__þockid_time_t
+
+
+87 #ià!
+defšed
+
+__tim”_t_defšed
+ && \
+
+88 ((
+defšed
+
+ g_TIME_H
+ && defšed
+ g__USE_POSIX199309
+è|| defšed
+ g__Ãed_tim”_t
+)
+
+89 
+ #__tim”_t_defšed
+ 1
+
+ )
+
+91 
+ ~<b™s/ty³s.h
+>
+
+94 
+__tim”_t
+
+ ttim”_t
+;
+
+97 #undeà
+__Ãed_tim”_t
+
+
+100 #ià!
+defšed
+
+__time¥ec_defšed
+ && \
+
+101 ((
+defšed
+
+ g_TIME_H
+ && defšed
+ g__USE_POSIX199309
+è|| defšed
+ g__Ãed_time¥ec
+)
+
+102 
+ #__time¥ec_defšed
+ 1
+
+ )
+
+106 
+ stime¥ec
+
+
+108
+__time_t
+
+ mtv_£c
+;
+
+109 
+ mtv_n£c
+;
+
+113 #undeà
+__Ãed_time¥ec
+
+
+116 #ifdef
+_TIME_H
+
+
+118 
+ stm
+
+
+120 
+ mtm_£c
+;
+
+121 
+ mtm_mš
+;
+
+122 
+ mtm_hour
+;
+
+123 
+ mtm_mday
+;
+
+124 
+ mtm_mÚ
+;
+
+125 
+ mtm_y—r
+;
+
+126 
+ mtm_wday
+;
+
+127 
+ mtm_yday
+;
+
+128 
+ mtm_isd¡
+;
+
+130 #ifdef
+__USE_BSD
+
+
+131 
+ mtm_gmtoff
+;
+
+132
+__cÚ¡
+ *
+ mtm_zÚe
+;
+
+134 
+ m__tm_gmtoff
+;
+
+135
+__cÚ¡
+ *
+ m__tm_zÚe
+;
+
+140 #ifdeà
+__USE_POSIX199309
+
+
+142 
+ s™im”¥ec
+
+
+144 
+time¥ec
+
+ m™_š‹rv®
+;
+
+145 
+time¥ec
+
+ m™_v®ue
+;
+
+149 
+ gsigev’t
+;
+
+153 #ifdeà
+__USE_XOPEN2K
+
+
+154 #iâdeà
+__pid_t_defšed
+
+
+155 
+__pid_t
+
+ tpid_t
+;
+
+156 
+ #__pid_t_defšed
+
+
+ )
+
+163
+þock_t
+
+ $þock
+ (è
+__THROW
+;
+
+166
+time_t
+
+ $time
+ (
+time_t
+ *
+__tim”
+__THROW
+;
+
+169
+
+ $difáime
+ (
+time_t
+
+__time1
+,ime_ˆ
+__time0
+)
+
+170
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+173
+time_t
+
+ $mktime
+ (
+tm
+ *
+__
+__THROW
+;
+
+179
+size_t
+
+ $¡ráime
+ (*
+__»¡riù
+
+__s
+,
+size_t
+
+__maxsize
+,
+
+180
+__cÚ¡
+ *
+__»¡riù
+
+__fÜm©
+,
+
+181
+__cÚ¡
+ 
+tm
+ *
+__»¡riù
+
+__
+__THROW
+;
+
+183 #ifdeà
+__USE_XOPEN
+
+
+186
+*
+ $¡½time
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+
+187
+__cÚ¡
+ *
+__»¡riù
+
+__fmt
+, 
+tm
+ *
+__
+)
+
+188
+__THROW
+;
+
+194
+
+tm
+ *
+ $gmtime
+ (
+__cÚ¡
+
+time_t
+ *
+__tim”
+__THROW
+;
+
+198
+
+tm
+ *
+ $loÿÉime
+ (
+__cÚ¡
+
+time_t
+ *
+__tim”
+__THROW
+;
+
+200 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+203
+
+tm
+ *
+ $gmtime_r
+ (
+__cÚ¡
+
+time_t
+ *
+__»¡riù
+
+__tim”
+,
+
+204 
+tm
+ *
+__»¡riù
+
+__
+__THROW
+;
+
+208
+
+tm
+ *
+ $loÿÉime_r
+ (
+__cÚ¡
+
+time_t
+ *
+__»¡riù
+
+__tim”
+,
+
+209 
+tm
+ *
+__»¡riù
+
+__
+__THROW
+;
+
+214
+*
+ $asùime
+ (
+__cÚ¡
+ 
+tm
+ *
+__
+__THROW
+;
+
+217
+*
+ $ùime
+ (
+__cÚ¡
+
+time_t
+ *
+__tim”
+__THROW
+;
+
+219 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+224
+*
+ $asùime_r
+ (
+__cÚ¡
+ 
+tm
+ *
+__»¡riù
+
+__
+,
+
+225 *
+__»¡riù
+
+__buf
+__THROW
+;
+
+228
+*
+ $ùime_r
+ (
+__cÚ¡
+
+time_t
+ *
+__»¡riù
+
+__tim”
+,
+
+229 *
+__»¡riù
+
+__buf
+__THROW
+;
+
+234
+*
+__tzÇme
+[2];
+
+235
+
+__daylight
+;
+
+236
+
+__timezÚe
+;
+
+239 #ifdef
+__USE_POSIX
+
+
+241
+*
+tzÇme
+[2];
+
+245
+
+ $tz£t
+ (è
+__THROW
+;
+
+248 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_XOPEN
+
+
+249
+
+daylight
+;
+
+250
+
+timezÚe
+;
+
+253 #ifdeà
+__USE_SVID
+
+
+256
+
+ $¡ime
+ (
+__cÚ¡
+
+time_t
+ *
+__wh’
+__THROW
+;
+
+262 
+ #__i¦—p
+(
+y—r
+) \
+
+263 ((
+y—r
+è% 4 =ð0 && ((y—rè% 100 !ð0 || (y—rè% 400 =ð0))
+
+ )
+
+266 #ifdeà
+__USE_MISC
+
+
+271
+time_t
+
+ $timegm
+ (
+tm
+ *
+__
+__THROW
+;
+
+274
+time_t
+
+ $tim–oÿl
+ (
+tm
+ *
+__
+__THROW
+;
+
+277
+
+ $dysize
+ (
+__y—r
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+281 #ifdeà
+__USE_POSIX199309
+
+
+283
+
+ $Çno¦“p
+ (
+__cÚ¡
+ 
+time¥ec
+ *
+__»que¡ed_time
+,
+
+284 
+time¥ec
+ *
+__»maššg
+__THROW
+;
+
+288
+
+ $þock_g‘»s
+ (
+þockid_t
+
+__þock_id
+, 
+time¥ec
+ *
+__»s
+__THROW
+;
+
+291
+
+ $þock_g‘time
+ (
+þockid_t
+
+__þock_id
+, 
+time¥ec
+ *
+__
+__THROW
+;
+
+294
+
+ $þock_£‰ime
+ (
+þockid_t
+
+__þock_id
+,
+__cÚ¡
+ 
+time¥ec
+ *
+__
+)
+
+295
+__THROW
+;
+
+297 #ifdeà
+__USE_XOPEN2K
+
+
+299
+
+ $þock_Çno¦“p
+ (
+þockid_t
+
+__þock_id
+, 
+__æags
+,
+
+300
+__cÚ¡
+ 
+time¥ec
+ *
+__»q
+,
+
+301 
+time¥ec
+ *
+__»m
+__THROW
+;
+
+304
+
+ $þock_g‘ýuþockid
+ (
+pid_t
+
+__pid
+,
+þockid_t
+ *
+__þock_id
+__THROW
+;
+
+309
+
+ $tim”_ü—‹
+ (
+þockid_t
+
+__þock_id
+,
+
+310 
+sigev’t
+ *
+__»¡riù
+
+__evp
+,
+
+311
+tim”_t
+ *
+__»¡riù
+
+__tim”id
+__THROW
+;
+
+314
+
+ $tim”_d–‘e
+ (
+tim”_t
+
+__tim”id
+__THROW
+;
+
+317
+
+ $tim”_£‰ime
+ (
+tim”_t
+
+__tim”id
+, 
+__æags
+,
+
+318
+__cÚ¡
+ 
+™im”¥ec
+ *
+__»¡riù
+
+__v®ue
+,
+
+319 
+™im”¥ec
+ *
+__»¡riù
+
+__ov®ue
+__THROW
+;
+
+322
+
+ $tim”_g‘time
+ (
+tim”_t
+
+__tim”id
+, 
+™im”¥ec
+ *
+__v®ue
+)
+
+323
+__THROW
+;
+
+326
+
+ $tim”_g‘ov”run
+ (
+tim”_t
+
+__tim”id
+__THROW
+;
+
+330 #ifdeà
+__USE_XOPEN_EXTENDED
+
+
+342
+
+g‘d©e_”r
+;
+
+348
+
+tm
+ *
+ $g‘d©e
+ (
+__cÚ¡
+ *
+__¡ršg
+__THROW
+;
+
+351 #ifdeà
+__USE_GNU
+
+
+357
+
+ $g‘d©e_r
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__¡ršg
+,
+
+358 
+tm
+ *
+__»¡riù
+
+__»sbuå
+__THROW
+;
+
+362
+__END_DECLS
+
+
+ @/usr/include/utime.h
+
+23 #iâdef
+_UTIME_H
+
+
+24 
+ #_UTIME_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28
+ g__BEGIN_DECLS
+
+
+30 
+ ~<b™s/ty³s.h
+>
+
+32 #ifdeà
+__USE_XOPEN
+
+
+33 
+ #__Ãed_time_t
+
+
+ )
+
+34 
+ ~<time.h
+>
+
+38 
+ sutimbuf
+
+
+40
+__time_t
+
+ maùime
+;
+
+41
+__time_t
+
+ mmodtime
+;
+
+46
+
+ $utime
+ (
+__cÚ¡
+ *
+__fže
+,
+
+47
+__cÚ¡
+ 
+utimbuf
+ *
+__fže_times
+__THROW
+;
+
+49
+__END_DECLS
+
+
+ @/usr/include/alloca.h
+
+19 #iâdef
+_ALLOCA_H
+
+
+20 
+ #_ALLOCA_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24 
+ #__Ãed_size_t
+
+
+ )
+
+25 
+ ~<¡ddef.h
+>
+
+27
+ g__BEGIN_DECLS
+
+
+30 #undeà
+®loÿ
+
+
+33
+*
+ $®loÿ
+ (
+size_t
+
+__size
+__THROW
+;
+
+35 #ifdef
+__GNUC__
+
+
+36 
+ #®loÿ
+(
+size
+ `__bužtš_®loÿ
+ (size)
+
+ )
+
+39
+__END_DECLS
+
+
+ @/usr/include/bits/byteswap.h
+
+20 #ià!
+defšed
+
+_BYTESWAP_H
+ && !defšed
+_NETINET_IN_H
+
+
+24 #iâdeà
+_BITS_BYTESWAP_H
+
+
+25 
+ #_BITS_BYTESWAP_H
+ 1
+
+ )
+
+28 
+ #__bsw­_cÚ¡ªt_16
+(
+x
+) \
+
+29 ((((
+x
+è>> 8è& 0xffè| (((xè& 0xffè<< 8))
+
+ )
+
+31 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+32 
+ #__bsw­_16
+(
+x
+) \
+
+33 (
+__ex‹nsiÚ__
+ \
+
+34 ({ 
+__v
+; \
+
+35 ià(
+ `__bužtš_cÚ¡ªt_p
+ (
+x
+)) \
+
+36
+__v
+ =
+ `__bsw­_cÚ¡ªt_16
+ (
+x
+); \
+
+38
+__asm__
+
+ `__vÞ©že__
+ ("rorw $8, %w0" \
+
+39 : "ô" (
+__v
+) \
+
+40 : "0" ((è(
+x
+)) \
+
+42
+__v
+; }))
+
+ )
+
+45 
+ #__bsw­_16
+(
+x
+ `__bsw­_cÚ¡ªt_16
+ (x)
+
+ )
+
+50 
+ #__bsw­_cÚ¡ªt_32
+(
+x
+) \
+
+51 ((((
+x
+) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \
+
+52 (((
+x
+è& 0x0000ff00è<< 8è| (((xè& 0x000000ffè<< 24))
+
+ )
+
+54 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+57 #ià!
+defšed
+
+__i486__
+ && !defšed
+__³Áium__
+ && !defšed
+__³Áium´o__
+
+
+58 
+ #__bsw­_32
+(
+x
+) \
+
+59 (
+__ex‹nsiÚ__
+ \
+
+60 ({ 
+__v
+; \
+
+61 ià(
+ `__bužtš_cÚ¡ªt_p
+ (
+x
+)) \
+
+62
+__v
+ =
+ `__bsw­_cÚ¡ªt_32
+ (
+x
+); \
+
+64
+__asm__
+
+ `__vÞ©že__
+ ("rorw $8, %w0;" \
+
+67 : "ô" (
+__v
+) \
+
+68 : "0" ((è(
+x
+)) \
+
+70
+__v
+; }))
+
+ )
+
+72 
+ #__bsw­_32
+(
+x
+) \
+
+73 (
+__ex‹nsiÚ__
+ \
+
+74 ({ 
+__v
+; \
+
+75 ià(
+ `__bužtš_cÚ¡ªt_p
+ (
+x
+)) \
+
+76
+__v
+ =
+ `__bsw­_cÚ¡ªt_32
+ (
+x
+); \
+
+78
+__asm__
+
+ `__vÞ©že__
+ ("bswap %0" \
+
+79 : "ô" (
+__v
+) \
+
+80 : "0" ((è(
+x
+))); \
+
+81
+__v
+; }))
+
+ )
+
+84 
+ #__bsw­_32
+(
+x
+ `__bsw­_cÚ¡ªt_32
+ (x)
+
+ )
+
+88 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+90 
+ #__bsw­_cÚ¡ªt_64
+(
+x
+) \
+
+91 ((((
+x
+) & 0xff00000000000000ull) >> 56) \
+
+92 | (((
+x
+) & 0x00ff000000000000ull) >> 40) \
+
+93 | (((
+x
+) & 0x0000ff0000000000ull) >> 24) \
+
+94 | (((
+x
+) & 0x000000ff00000000ull) >> 8) \
+
+95 | (((
+x
+) & 0x00000000ff000000ull) << 8) \
+
+96 | (((
+x
+) & 0x0000000000ff0000ull) << 24) \
+
+97 | (((
+x
+) & 0x000000000000ff00ull) << 40) \
+
+98 | (((
+x
+è& 0x00000000000000ffuÎè<< 56))
+
+ )
+
+100 
+ #__bsw­_64
+(
+x
+) \
+
+101 (
+__ex‹nsiÚ__
+ \
+
+102 ({ uniÚ {
+__ex‹nsiÚ__
+ 
+__Î
+; \
+
+103 
+__l
+[2]; }
+__w
+,
+__r
+; \
+
+104 ià(
+ `__bužtš_cÚ¡ªt_p
+ (
+x
+)) \
+
+105
+__r
+.
+__Î
+ =
+ `__bsw­_cÚ¡ªt_64
+ (
+x
+); \
+
+108
+__w
+.
+__Î
+ = (
+x
+); \
+
+109
+__r
+.
+__l
+[0] =
+ `__bsw­_32
+ (
+__w
+.__l[1]); \
+
+110
+__r
+.
+__l
+[1] =
+ `__bsw­_32
+ (
+__w
+.__l[0]); \
+
+112
+__r
+.
+__Î
+; }))
+
+ )
+
+ @/usr/include/bits/dirent.h
+
+19 #iâdeà
+_DIRENT_H
+
+
+23 
+ sdœ’t
+
+
+25 #iâdeà
+__USE_FILE_OFFSET64
+
+
+26
+__šo_t
+
+ md_šo
+;
+
+27
+__off_t
+
+ md_off
+;
+
+29
+__šo64_t
+
+ md_šo
+;
+
+30
+__off64_t
+
+ md_off
+;
+
+32 
+ md_»þ’
+;
+
+33 
+ md_ty³
+;
+
+34 
+ md_Çme
+[256];
+
+37 #ifdeà
+__USE_LARGEFILE64
+
+
+38 
+ sdœ’t64
+
+
+40
+__šo64_t
+
+ md_šo
+;
+
+41
+__off64_t
+
+ md_off
+;
+
+42 
+ md_»þ’
+;
+
+43 
+ md_ty³
+;
+
+44 
+ md_Çme
+[256];
+
+48 
+ #d_fž’o
+
+d_šo
+
+
+ )
+
+50 #undeà
+_DIRENT_HAVE_D_NAMLEN
+
+
+51 
+ #_DIRENT_HAVE_D_RECLEN
+
+
+ )
+
+52 
+ #_DIRENT_HAVE_D_OFF
+
+
+ )
+
+53 
+ #_DIRENT_HAVE_D_TYPE
+
+
+ )
+
+ @/usr/include/bits/errno.h
+
+20 #ifdeà
+_ERRNO_H
+
+
+22 #undeà
+EDOM
+
+
+23 #undeà
+EILSEQ
+
+
+24 #undeà
+ERANGE
+
+
+25 
+ ~<lšux/”ºo.h
+>
+
+28 
+ #ENOTSUP
+
+EOPNOTSUPP
+
+
+ )
+
+32 
+ #ECANCELED
+ 125
+
+ )
+
+34 #iâdeà
+__ASSEMBLER__
+
+
+36
+
+Ӽo
+;
+
+39
+*
+ $__”ºo_loÿtiÚ
+ (è
+__THROW
+
+ `__©Œibu‹__
+ ((
+__cÚ¡__
+));
+
+41 #ià
+defšed
+
+_LIBC
+
+
+43 
+ #__£t_”ºo
+(
+v®
+è(*
+ `__”ºo_loÿtiÚ
+ ()èð(v®)
+
+ )
+
+46 #ià!
+defšed
+
+_LIBC
+ || defšed
+_LIBC_REENTRANT
+
+
+48 
+ #Ӽo
+ (*
+ `__”ºo_loÿtiÚ
+ ())
+
+ )
+
+53 #ià!
+defšed
+
+_ERRNO_H
+ && defšed
+__Ãed_Em©h
+
+
+57 
+ #EDOM
+ 33
+
+ )
+
+58 
+ #EILSEQ
+ 84
+
+ )
+
+59 
+ #ERANGE
+ 34
+
+ )
+
+ @/usr/include/bits/fcntl.h
+
+20 #iâdef
+_FCNTL_H
+
+
+25 
+ ~<sys/ty³s.h
+>
+
+29 
+ #O_ACCMODE
+ 0003
+
+ )
+
+30 
+ #O_RDONLY
+ 00
+
+ )
+
+31 
+ #O_WRONLY
+ 01
+
+ )
+
+32 
+ #O_RDWR
+ 02
+
+ )
+
+33 
+ #O_CREAT
+ 0100
+
+ )
+
+34 
+ #O_EXCL
+ 0200
+
+ )
+
+35 
+ #O_NOCTTY
+ 0400
+
+ )
+
+36 
+ #O_TRUNC
+ 01000
+
+ )
+
+37 
+ #O_APPEND
+ 02000
+
+ )
+
+38 
+ #O_NONBLOCK
+ 04000
+
+ )
+
+39 
+ #O_NDELAY
+
+O_NONBLOCK
+
+
+ )
+
+40 
+ #O_SYNC
+ 010000
+
+ )
+
+41 
+ #O_FSYNC
+
+O_SYNC
+
+
+ )
+
+42 
+ #O_ASYNC
+ 020000
+
+ )
+
+44 #ifdeà
+__USE_GNU
+
+
+45 
+ #O_DIRECT
+ 040000
+
+ )
+
+46 
+ #O_DIRECTORY
+ 0200000
+
+ )
+
+47 
+ #O_NOFOLLOW
+ 0400000
+
+ )
+
+53 #ià
+defšed
+
+__USE_POSIX199309
+ || defšed
+__USE_UNIX98
+
+
+54 
+ #O_DSYNC
+
+O_SYNC
+
+
+ )
+
+55 
+ #O_RSYNC
+
+O_SYNC
+
+
+ )
+
+58 #ifdeà
+__USE_LARGEFILE64
+
+
+59 
+ #O_LARGEFILE
+ 0100000
+
+ )
+
+63 
+ #F_DUPFD
+ 0
+
+ )
+
+64 
+ #F_GETFD
+ 1
+
+ )
+
+65 
+ #F_SETFD
+ 2
+
+ )
+
+66 
+ #F_GETFL
+ 3
+
+ )
+
+67 
+ #F_SETFL
+ 4
+
+ )
+
+68 #iâdeà
+__USE_FILE_OFFSET64
+
+
+69 
+ #F_GETLK
+ 5
+
+ )
+
+70 
+ #F_SETLK
+ 6
+
+ )
+
+71 
+ #F_SETLKW
+ 7
+
+ )
+
+73 
+ #F_GETLK
+
+F_GETLK64
+
+
+ )
+
+74 
+ #F_SETLK
+
+F_SETLK64
+
+
+ )
+
+75 
+ #F_SETLKW
+
+F_SETLKW64
+
+
+ )
+
+77 
+ #F_GETLK64
+ 12
+
+ )
+
+78 
+ #F_SETLK64
+ 13
+
+ )
+
+79 
+ #F_SETLKW64
+ 14
+
+ )
+
+81 #ià
+defšed
+
+__USE_BSD
+ || defšed
+__USE_XOPEN2K
+
+
+82 
+ #F_SETOWN
+ 8
+
+ )
+
+83 
+ #F_GETOWN
+ 9
+
+ )
+
+86 #ifdeà
+__USE_GNU
+
+
+87 
+ #F_SETSIG
+ 10
+
+ )
+
+88 
+ #F_GETSIG
+ 11
+
+ )
+
+91 #ifdeà
+__USE_GNU
+
+
+92 
+ #F_SETLEASE
+ 1024
+
+ )
+
+93 
+ #F_GETLEASE
+ 1025
+
+ )
+
+94 
+ #F_NOTIFY
+ 1026
+
+ )
+
+98 
+ #FD_CLOEXEC
+ 1
+
+ )
+
+101 
+ #F_RDLCK
+ 0
+
+ )
+
+102 
+ #F_WRLCK
+ 1
+
+ )
+
+103 
+ #F_UNLCK
+ 2
+
+ )
+
+106 
+ #F_EXLCK
+ 4
+
+ )
+
+107 
+ #F_SHLCK
+ 8
+
+ )
+
+109 #ifdeà
+__USE_BSD
+
+
+111 
+ #LOCK_SH
+ 1
+
+ )
+
+112 
+ #LOCK_EX
+ 2
+
+ )
+
+113 
+ #LOCK_NB
+ 4
+
+ )
+
+115 
+ #LOCK_UN
+ 8
+
+ )
+
+118 #ifdeà
+__USE_GNU
+
+
+119 
+ #LOCK_MAND
+ 32
+
+ )
+
+120 
+ #LOCK_READ
+ 64
+
+ )
+
+121 
+ #LOCK_WRITE
+ 128
+
+ )
+
+122 
+ #LOCK_RW
+ 192
+
+ )
+
+125 #ifdeà
+__USE_GNU
+
+
+127 
+ #DN_ACCESS
+ 0x00000001
+
+ )
+
+128 
+ #DN_MODIFY
+ 0x00000002
+
+ )
+
+129 
+ #DN_CREATE
+ 0x00000004
+
+ )
+
+130 
+ #DN_DELETE
+ 0x00000008
+
+ )
+
+131 
+ #DN_RENAME
+ 0x00000010
+
+ )
+
+132 
+ #DN_ATTRIB
+ 0x00000020
+
+ )
+
+133 
+ #DN_MULTISHOT
+ 0x80000000
+
+ )
+
+136 
+ sæock
+
+
+138 
+ ml_ty³
+;
+
+139 
+ ml_wh’û
+;
+
+140 #iâdeà
+__USE_FILE_OFFSET64
+
+
+141
+__off_t
+
+ ml_¡¬t
+;
+
+142
+__off_t
+
+ ml_Ën
+;
+
+144
+__off64_t
+
+ ml_¡¬t
+;
+
+145
+__off64_t
+
+ ml_Ën
+;
+
+147
+__pid_t
+
+ ml_pid
+;
+
+150 #ifdeà
+__USE_LARGEFILE64
+
+
+151 
+ sæock64
+
+
+153 
+ ml_ty³
+;
+
+154 
+ ml_wh’û
+;
+
+155
+__off64_t
+
+ ml_¡¬t
+;
+
+156
+__off64_t
+
+ ml_Ën
+;
+
+157
+__pid_t
+
+ ml_pid
+;
+
+163 #ifdef
+__USE_BSD
+
+
+164 
+ #FAPPEND
+
+O_APPEND
+
+
+ )
+
+165 
+ #FFSYNC
+
+O_FSYNC
+
+
+ )
+
+166 
+ #FASYNC
+
+O_ASYNC
+
+
+ )
+
+167 
+ #FNONBLOCK
+
+O_NONBLOCK
+
+
+ )
+
+168 
+ #FNDELAY
+
+O_NDELAY
+
+
+ )
+
+172 #ifdeà
+__USE_XOPEN2K
+
+
+173 
+ #POSIX_FADV_NORMAL
+ 0
+
+ )
+
+174 
+ #POSIX_FADV_RANDOM
+ 1
+
+ )
+
+175 
+ #POSIX_FADV_SEQUENTIAL
+ 2
+
+ )
+
+176 
+ #POSIX_FADV_WILLNEED
+ 3
+
+ )
+
+177 
+ #POSIX_FADV_DONTNEED
+ 4
+
+ )
+
+178 
+ #POSIX_FADV_NOREUSE
+ 5
+
+ )
+
+ @/usr/include/bits/in.h
+
+21 #iâdeà
+_NETINET_IN_H
+
+
+28 
+ #IP_TOS
+ 1
+
+ )
+
+29 
+ #IP_TTL
+ 2
+
+ )
+
+30 
+ #IP_HDRINCL
+ 3
+
+ )
+
+31 
+ #IP_OPTIONS
+ 4
+
+ )
+
+32 
+ #IP_ROUTER_ALERT
+ 5
+
+ )
+
+33 
+ #IP_RECVOPTS
+ 6
+
+ )
+
+34 
+ #IP_RETOPTS
+ 7
+
+ )
+
+35 
+ #IP_PKTINFO
+ 8
+
+ )
+
+36 
+ #IP_PKTOPTIONS
+ 9
+
+ )
+
+37 
+ #IP_PMTUDISC
+ 10
+
+ )
+
+38 
+ #IP_MTU_DISCOVER
+ 10
+
+ )
+
+39 
+ #IP_RECVERR
+ 11
+
+ )
+
+40 
+ #IP_RECVTTL
+ 12
+
+ )
+
+41 
+ #IP_RECVTOS
+ 13
+
+ )
+
+42 
+ #IP_MULTICAST_IF
+ 32
+
+ )
+
+43 
+ #IP_MULTICAST_TTL
+ 33
+
+ )
+
+44 
+ #IP_MULTICAST_LOOP
+ 34
+
+ )
+
+45 
+ #IP_ADD_MEMBERSHIP
+ 35
+
+ )
+
+46 
+ #IP_DROP_MEMBERSHIP
+ 36
+
+ )
+
+49 
+ #IP_RECVRETOPTS
+
+IP_RETOPTS
+
+
+ )
+
+52 
+ #IP_PMTUDISC_DONT
+ 0
+
+ )
+
+53 
+ #IP_PMTUDISC_WANT
+ 1
+
+ )
+
+54 
+ #IP_PMTUDISC_DO
+ 2
+
+ )
+
+57 
+ #SOL_IP
+ 0
+
+ )
+
+59 
+ #IP_DEFAULT_MULTICAST_TTL
+ 1
+
+ )
+
+60 
+ #IP_DEFAULT_MULTICAST_LOOP
+ 1
+
+ )
+
+61 
+ #IP_MAX_MEMBERSHIPS
+ 20
+
+ )
+
+66 
+ s_Ýts
+
+
+68 
+š_addr
+
+ m_d¡
+;
+
+69 
+ m_Ýts
+[40];
+
+73 
+ s_m»q
+
+
+75 
+š_addr
+
+ mimr_muÉŸddr
+;
+
+76 
+š_addr
+
+ mimr_š‹rçû
+;
+
+80 
+ s_m»qn
+
+
+82 
+š_addr
+
+ mimr_muÉŸddr
+;
+
+83 
+š_addr
+
+ mimr_add»ss
+;
+
+84 
+ mimr_ifšdex
+;
+
+88 
+ sš_pktšfo
+
+
+90 
+ mi_ifšdex
+;
+
+91 
+š_addr
+
+ mi_¥ec_d¡
+;
+
+92 
+š_addr
+
+ mi_addr
+;
+
+98 
+ #IPV6_ADDRFORM
+ 1
+
+ )
+
+99 
+ #IPV6_PKTINFO
+ 2
+
+ )
+
+100 
+ #IPV6_HOPOPTS
+ 3
+
+ )
+
+101 
+ #IPV6_DSTOPTS
+ 4
+
+ )
+
+102 
+ #IPV6_RTHDR
+ 5
+
+ )
+
+103 
+ #IPV6_PKTOPTIONS
+ 6
+
+ )
+
+104 
+ #IPV6_CHECKSUM
+ 7
+
+ )
+
+105 
+ #IPV6_HOPLIMIT
+ 8
+
+ )
+
+106 
+ #IPV6_NEXTHOP
+ 9
+
+ )
+
+107 
+ #IPV6_AUTHHDR
+ 10
+
+ )
+
+108 
+ #IPV6_UNICAST_HOPS
+ 16
+
+ )
+
+109 
+ #IPV6_MULTICAST_IF
+ 17
+
+ )
+
+110 
+ #IPV6_MULTICAST_HOPS
+ 18
+
+ )
+
+111 
+ #IPV6_MULTICAST_LOOP
+ 19
+
+ )
+
+112 
+ #IPV6_JOIN_GROUP
+ 20
+
+ )
+
+113 
+ #IPV6_LEAVE_GROUP
+ 21
+
+ )
+
+114 
+ #IPV6_ROUTER_ALERT
+ 22
+
+ )
+
+115 
+ #IPV6_MTU_DISCOVER
+ 23
+
+ )
+
+116 
+ #IPV6_MTU
+ 24
+
+ )
+
+117 
+ #IPV6_RECVERR
+ 25
+
+ )
+
+119 
+ #SCM_SRCRT
+
+IPV6_RXSRCRT
+
+
+ )
+
+122 
+ #IPV6_RXHOPOPTS
+
+IPV6_HOPOPTS
+
+
+ )
+
+123 
+ #IPV6_RXDSTOPTS
+
+IPV6_DSTOPTS
+
+
+ )
+
+124 
+ #IPV6_ADD_MEMBERSHIP
+
+IPV6_JOIN_GROUP
+
+
+ )
+
+125 
+ #IPV6_DROP_MEMBERSHIP
+
+IPV6_LEAVE_GROUP
+
+
+ )
+
+129 
+ #IPV6_PMTUDISC_DONT
+ 0
+
+ )
+
+130 
+ #IPV6_PMTUDISC_WANT
+ 1
+
+ )
+
+131 
+ #IPV6_PMTUDISC_DO
+ 2
+
+ )
+
+134 
+ #SOL_IPV6
+ 41
+
+ )
+
+135 
+ #SOL_ICMPV6
+ 58
+
+ )
+
+138 
+ #IPV6_RTHDR_LOOSE
+ 0
+
+ )
+
+139 
+ #IPV6_RTHDR_STRICT
+ 1
+
+ )
+
+141 
+ #IPV6_RTHDR_TYPE_0
+ 0
+
+ )
+
+ @/usr/include/bits/ioctl-types.h
+
+20 #iâdeà
+_SYS_IOCTL_H
+
+
+25 
+ ~<asm/ioùls.h
+>
+
+28 
+ swšsize
+
+
+30 
+ mws_row
+;
+
+31 
+ mws_cÞ
+;
+
+32 
+ mws_xpix–
+;
+
+33 
+ mws_ypix–
+;
+
+36 
+ #NCC
+ 8
+
+ )
+
+37 
+ s‹rmio
+
+
+39 
+ mc_iæag
+;
+
+40 
+ mc_oæag
+;
+
+41 
+ mc_cæag
+;
+
+42 
+ mc_læag
+;
+
+43 
+ mc_lše
+;
+
+44 
+ mc_cc
+[
+NCC
+];
+
+48 
+ #TIOCM_LE
+ 0x001
+
+ )
+
+49 
+ #TIOCM_DTR
+ 0x002
+
+ )
+
+50 
+ #TIOCM_RTS
+ 0x004
+
+ )
+
+51 
+ #TIOCM_ST
+ 0x008
+
+ )
+
+52 
+ #TIOCM_SR
+ 0x010
+
+ )
+
+53 
+ #TIOCM_CTS
+ 0x020
+
+ )
+
+54 
+ #TIOCM_CAR
+ 0x040
+
+ )
+
+55 
+ #TIOCM_RNG
+ 0x080
+
+ )
+
+56 
+ #TIOCM_DSR
+ 0x100
+
+ )
+
+57 
+ #TIOCM_CD
+
+TIOCM_CAR
+
+
+ )
+
+58 
+ #TIOCM_RI
+
+TIOCM_RNG
+
+
+ )
+
+63 
+ #N_TTY
+ 0
+
+ )
+
+64 
+ #N_SLIP
+ 1
+
+ )
+
+65 
+ #N_MOUSE
+ 2
+
+ )
+
+66 
+ #N_PPP
+ 3
+
+ )
+
+67 
+ #N_STRIP
+ 4
+
+ )
+
+68 
+ #N_AX25
+ 5
+
+ )
+
+69 
+ #N_X25
+ 6
+
+ )
+
+70 
+ #N_6PACK
+ 7
+
+ )
+
+71 
+ #N_MASC
+ 8
+
+ )
+
+72 
+ #N_R3964
+ 9
+
+ )
+
+73 
+ #N_PROFIBUS_FDL
+ 10
+
+ )
+
+74 
+ #N_IRDA
+ 11
+
+ )
+
+75 
+ #N_SMSBLOCK
+ 12
+
+ )
+
+76 
+ #N_HDLC
+ 13
+
+ )
+
+77 
+ #N_SYNC_PPP
+ 14
+
+ )
+
+78 
+ #N_HCI
+ 15
+
+ )
+
+ @/usr/include/bits/ioctls.h
+
+19 #iâdeà
+_SYS_IOCTL_H
+
+
+24 
+ ~<asm/ioùls.h
+>
+
+27 
+ #SIOCADDRT
+ 0x890B
+
+ )
+
+28 
+ #SIOCDELRT
+ 0x890C
+
+ )
+
+29 
+ #SIOCRTMSG
+ 0x890D
+
+ )
+
+32 
+ #SIOCGIFNAME
+ 0x8910
+
+ )
+
+33 
+ #SIOCSIFLINK
+ 0x8911
+
+ )
+
+34 
+ #SIOCGIFCONF
+ 0x8912
+
+ )
+
+35 
+ #SIOCGIFFLAGS
+ 0x8913
+
+ )
+
+36 
+ #SIOCSIFFLAGS
+ 0x8914
+
+ )
+
+37 
+ #SIOCGIFADDR
+ 0x8915
+
+ )
+
+38 
+ #SIOCSIFADDR
+ 0x8916
+
+ )
+
+39 
+ #SIOCGIFDSTADDR
+ 0x8917
+
+ )
+
+40 
+ #SIOCSIFDSTADDR
+ 0x8918
+
+ )
+
+41 
+ #SIOCGIFBRDADDR
+ 0x8919
+
+ )
+
+42 
+ #SIOCSIFBRDADDR
+ 0x891¨
+
+ )
+
+43 
+ #SIOCGIFNETMASK
+ 0x891b
+
+ )
+
+44 
+ #SIOCSIFNETMASK
+ 0x891ø
+
+ )
+
+45 
+ #SIOCGIFMETRIC
+ 0x891d
+
+ )
+
+46 
+ #SIOCSIFMETRIC
+ 0x891
+
+ )
+
+47 
+ #SIOCGIFMEM
+ 0x891à
+
+ )
+
+48 
+ #SIOCSIFMEM
+ 0x8920
+
+ )
+
+49 
+ #SIOCGIFMTU
+ 0x8921
+
+ )
+
+50 
+ #SIOCSIFMTU
+ 0x8922
+
+ )
+
+51 
+ #SIOCSIFHWADDR
+ 0x8924
+
+ )
+
+52 
+ #SIOCGIFENCAP
+ 0x8925
+
+ )
+
+53 
+ #SIOCSIFENCAP
+ 0x8926
+
+ )
+
+54 
+ #SIOCGIFHWADDR
+ 0x8927
+
+ )
+
+55 
+ #SIOCGIFSLAVE
+ 0x8929
+
+ )
+
+56 
+ #SIOCSIFSLAVE
+ 0x8930
+
+ )
+
+57 
+ #SIOCADDMULTI
+ 0x8931
+
+ )
+
+58 
+ #SIOCDELMULTI
+ 0x8932
+
+ )
+
+59 
+ #SIOCGIFINDEX
+ 0x8933
+
+ )
+
+60 
+ #SIOGIFINDEX
+
+SIOCGIFINDEX
+
+
+ )
+
+61 
+ #SIOCSIFPFLAGS
+ 0x8934
+
+ )
+
+62 
+ #SIOCGIFPFLAGS
+ 0x8935
+
+ )
+
+63 
+ #SIOCDIFADDR
+ 0x8936
+
+ )
+
+64 
+ #SIOCSIFHWBROADCAST
+ 0x8937
+
+ )
+
+65 
+ #SIOCGIFCOUNT
+ 0x8938
+
+ )
+
+67 
+ #SIOCGIFBR
+ 0x8940
+
+ )
+
+68 
+ #SIOCSIFBR
+ 0x8941
+
+ )
+
+70 
+ #SIOCGIFTXQLEN
+ 0x8942
+
+ )
+
+71 
+ #SIOCSIFTXQLEN
+ 0x8943
+
+ )
+
+76 
+ #SIOCDARP
+ 0x8953
+
+ )
+
+77 
+ #SIOCGARP
+ 0x8954
+
+ )
+
+78 
+ #SIOCSARP
+ 0x8955
+
+ )
+
+81 
+ #SIOCDRARP
+ 0x8960
+
+ )
+
+82 
+ #SIOCGRARP
+ 0x8961
+
+ )
+
+83 
+ #SIOCSRARP
+ 0x8962
+
+ )
+
+87 
+ #SIOCGIFMAP
+ 0x8970
+
+ )
+
+88 
+ #SIOCSIFMAP
+ 0x8971
+
+ )
+
+92 
+ #SIOCADDDLCI
+ 0x8980
+
+ )
+
+93 
+ #SIOCDELDLCI
+ 0x8981
+
+ )
+
+102 
+ #SIOCDEVPRIVATE
+ 0x89F0
+
+ )
+
+108 
+ #SIOCPROTOPRIVATE
+ 0x89E0
+
+ )
+
+ @/usr/include/bits/ipc.h
+
+19 #iâdeà
+_SYS_IPC_H
+
+
+23 
+ ~<b™s/ty³s.h
+>
+
+26 
+ #IPC_CREAT
+ 01000
+
+ )
+
+27 
+ #IPC_EXCL
+ 02000
+
+ )
+
+28 
+ #IPC_NOWAIT
+ 04000
+
+ )
+
+31 
+ #IPC_RMID
+ 0
+
+ )
+
+32 
+ #IPC_SET
+ 1
+
+ )
+
+33 
+ #IPC_STAT
+ 2
+
+ )
+
+34 #ifdeà
+__USE_GNU
+
+
+35 
+ #IPC_INFO
+ 3
+
+ )
+
+39 
+ #IPC_PRIVATE
+ ((
+__key_t
+è0è
+
+ )
+
+43 
+ sc_³rm
+
+
+45
+__key_t
+
+ m__key
+;
+
+46
+__uid_t
+
+ muid
+;
+
+47
+__gid_t
+
+ mgid
+;
+
+48
+__uid_t
+
+ mcuid
+;
+
+49
+__gid_t
+
+ mcgid
+;
+
+50 
+ mmode
+;
+
+51 
+ m__·d1
+;
+
+52 
+ m__£q
+;
+
+53 
+ m__·d2
+;
+
+54 
+ m__unu£d1
+;
+
+55 
+ m__unu£d2
+;
+
+ @/usr/include/bits/msq.h
+
+19 #iâdeà
+_SYS_MSG_H
+
+
+23 
+ ~<b™s/ty³s.h
+>
+
+26 
+ #MSG_NOERROR
+ 010000
+
+ )
+
+27 #ifdeà
+__USE_GNU
+
+
+28 
+ #MSG_EXCEPT
+ 020000
+
+ )
+
+32 
+ tmsgqnum_t
+;
+
+33 
+ tmsgËn_t
+;
+
+38 
+ smsqid_ds
+
+
+40 
+c_³rm
+
+ mmsg_³rm
+;
+
+41
+__time_t
+
+ mmsg_¡ime
+;
+
+42 
+ m__unu£d1
+;
+
+43
+__time_t
+
+ mmsg_¹ime
+;
+
+44 
+ m__unu£d2
+;
+
+45
+__time_t
+
+ mmsg_ùime
+;
+
+46 
+ m__unu£d3
+;
+
+47 
+ m__msg_cby‹s
+;
+
+48
+msgqnum_t
+
+ mmsg_qnum
+;
+
+49
+msgËn_t
+
+ mmsg_qby‹s
+;
+
+50
+__pid_t
+
+ mmsg_l¥id
+;
+
+51
+__pid_t
+
+ mmsg_Ìpid
+;
+
+52 
+ m__unu£d4
+;
+
+53 
+ m__unu£d5
+;
+
+56 #ifdeà
+__USE_MISC
+
+
+58 
+ #msg_cby‹s
+
+__msg_cby‹s
+
+
+ )
+
+61 
+ #MSG_STAT
+ 11
+
+ )
+
+62 
+ #MSG_INFO
+ 12
+
+ )
+
+65 
+ smsgšfo
+
+
+67 
+ mmsgpoÞ
+;
+
+68 
+ mmsgm­
+;
+
+69 
+ mmsgmax
+;
+
+70 
+ mmsgmnb
+;
+
+71 
+ mmsgmni
+;
+
+72 
+ mmsgssz
+;
+
+73 
+ mmsgtql
+;
+
+74 
+ mmsg£g
+;
+
+ @/usr/include/bits/netdb.h
+
+19 #iâdeà
+_NETDB_H
+
+
+27 
+ sËÁ
+
+
+29 *
+ mn_Çme
+;
+
+30 **
+ mn_®Ÿ£s
+;
+
+31 
+ mn_add¹y³
+;
+
+32
+ušt32_t
+
+ mn_Ãt
+;
+
+ @/usr/include/bits/posix1_lim.h
+
+25 #iâdef
+_BITS_POSIX1_LIM_H
+
+
+26 
+ #_BITS_POSIX1_LIM_H
+ 1
+
+ )
+
+32 
+ #_POSIX_AIO_LISTIO_MAX
+ 2
+
+ )
+
+35 
+ #_POSIX_AIO_MAX
+ 1
+
+ )
+
+38 
+ #_POSIX_ARG_MAX
+ 4096
+
+ )
+
+41 
+ #_POSIX_CHILD_MAX
+ 6
+
+ )
+
+44 
+ #_POSIX_DELAYTIMER_MAX
+ 32
+
+ )
+
+47 
+ #_POSIX_LINK_MAX
+ 8
+
+ )
+
+50 
+ #_POSIX_MAX_CANON
+ 255
+
+ )
+
+54 
+ #_POSIX_MAX_INPUT
+ 255
+
+ )
+
+57 
+ #_POSIX_MQ_OPEN_MAX
+ 8
+
+ )
+
+60 
+ #_POSIX_MQ_PRIO_MAX
+ 32
+
+ )
+
+63 
+ #_POSIX_NGROUPS_MAX
+ 0
+
+ )
+
+66 
+ #_POSIX_OPEN_MAX
+ 16
+
+ )
+
+70 
+ #_POSIX_FD_SETSIZE
+
+_POSIX_OPEN_MAX
+
+
+ )
+
+73 
+ #_POSIX_NAME_MAX
+ 14
+
+ )
+
+76 
+ #_POSIX_PATH_MAX
+ 256
+
+ )
+
+79 
+ #_POSIX_PIPE_BUF
+ 512
+
+ )
+
+82 
+ #_POSIX_RTSIG_MAX
+ 8
+
+ )
+
+85 
+ #_POSIX_SEM_NSEMS_MAX
+ 256
+
+ )
+
+88 
+ #_POSIX_SEM_VALUE_MAX
+ 32767
+
+ )
+
+91 
+ #_POSIX_SIGQUEUE_MAX
+ 32
+
+ )
+
+94 
+ #_POSIX_SSIZE_MAX
+ 32767
+
+ )
+
+97 
+ #_POSIX_STREAM_MAX
+ 8
+
+ )
+
+100 
+ #_POSIX_TZNAME_MAX
+ 6
+
+ )
+
+103 
+ #_POSIX_QLIMIT
+ 1
+
+ )
+
+107 
+ #_POSIX_HIWAT
+
+_POSIX_PIPE_BUF
+
+
+ )
+
+110 
+ #_POSIX_UIO_MAXIOV
+ 16
+
+ )
+
+113 
+ #_POSIX_TTY_NAME_MAX
+ 9
+
+ )
+
+116 
+ #_POSIX_TIMER_MAX
+ 32
+
+ )
+
+119 
+ #_POSIX_LOGIN_NAME_MAX
+ 9
+
+ )
+
+122 
+ #_POSIX_CLOCKRES_MIN
+ 20000000
+
+ )
+
+126 
+ ~<b™s/loÿl_lim.h
+>
+
+129 #iâdef
+SSIZE_MAX
+
+
+130 
+ #SSIZE_MAX
+
+INT_MAX
+
+
+ )
+
+137 #iâdef
+NGROUPS_MAX
+
+
+138 
+ #NGROUPS_MAX
+
+_POSIX_NGROUPS_MAX
+
+
+ )
+
+ @/usr/include/bits/select.h
+
+19 #iâdeà
+_SYS_SELECT_H
+
+
+24 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+26 
+ #__FD_ZERO
+(
+fd¥
+) \
+
+28 
+__d0
+,
+__d1
+; \
+
+29
+__asm__
+
+ `__vÞ©že__
+ ("cld;„ep; stosl" \
+
+30 : "=c" (
+__d0
+), "=D" (
+__d1
+) \
+
+31 : "a" (0), "0" ( (
+fd_£t
+) \
+
+32 /  (
+__fd_mask
+)), \
+
+33 "1" (&
+ `__FDS_BITS
+ (
+fd¥
+)[0]) \
+
+35 } 0)
+
+ )
+
+37 
+ #__FD_SET
+(
+fd
+,
+fd¥
+) \
+
+38
+__asm__
+
+ `__vÞ©že__
+ ("btsl %1,%0" \
+
+39 : "=m" (
+ `__FDS_BITS
+ (
+fd¥
+)[
+ `__FDELT
+ (
+fd
+)]) \
+
+40 : "r" (((è(
+fd
+)è%
+__NFDBITS
+) \
+
+41 : "cc","memÜy")
+
+ )
+
+42 
+ #__FD_CLR
+(
+fd
+,
+fd¥
+) \
+
+43
+__asm__
+
+ `__vÞ©že__
+ ("btrl %1,%0" \
+
+44 : "=m" (
+ `__FDS_BITS
+ (
+fd¥
+)[
+ `__FDELT
+ (
+fd
+)]) \
+
+45 : "r" (((è(
+fd
+)è%
+__NFDBITS
+) \
+
+46 : "cc","memÜy")
+
+ )
+
+47 
+ #__FD_ISSET
+(
+fd
+,
+fd¥
+) \
+
+48 (
+__ex‹nsiÚ__
+ \
+
+49 ({
+__»suÉ
+; \
+
+50
+__asm__
+
+ `__vÞ©že__
+ ("btl %1,%2 ; setcb %b0" \
+
+51 : "=q" (
+__»suÉ
+) \
+
+52 : "r" (((è(
+fd
+)è%
+__NFDBITS
+), \
+
+53 "m" (
+ `__FDS_BITS
+ (
+fd¥
+)[
+ `__FDELT
+ (
+fd
+)]) \
+
+55
+__»suÉ
+; }))
+
+ )
+
+61 
+ #__FD_ZERO
+(
+£t
+) \
+
+63 
+__i
+; \
+
+64
+fd_£t
+ *
+__¬r
+ = (
+£t
+); \
+
+65 
+__i
+ = 0; __˜<  (
+fd_£t
+è/  (
+__fd_mask
+); ++__i) \
+
+66
+ `__FDS_BITS
+ (
+__¬r
+)[
+__i
+] = 0; \
+
+67 } 0)
+
+ )
+
+68 
+ #__FD_SET
+(
+d
+,
+£t
+è(
+ `__FDS_BITS
+ (£t)[
+ `__FDELT
+ (d)] |ð
+ `__FDMASK
+ (d))
+
+ )
+
+69 
+ #__FD_CLR
+(
+d
+,
+£t
+è(
+ `__FDS_BITS
+ (£t)[
+ `__FDELT
+ (d)] &ð~
+ `__FDMASK
+ (d))
+
+ )
+
+70 
+ #__FD_ISSET
+(
+d
+,
+£t
+è(
+ `__FDS_BITS
+ (£t)[
+ `__FDELT
+ (d)] &
+ `__FDMASK
+ (d))
+
+ )
+
+ @/usr/include/bits/sem.h
+
+19 #iâdeà
+_SYS_SEM_H
+
+
+23 
+ ~<sys/ty³s.h
+>
+
+26 
+ #SEM_UNDO
+ 0x1000
+
+ )
+
+29 
+ #GETPID
+ 11
+
+ )
+
+30 
+ #GETVAL
+ 12
+
+ )
+
+31 
+ #GETALL
+ 13
+
+ )
+
+32 
+ #GETNCNT
+ 14
+
+ )
+
+33 
+ #GETZCNT
+ 15
+
+ )
+
+34 
+ #SETVAL
+ 16
+
+ )
+
+35 
+ #SETALL
+ 17
+
+ )
+
+39 
+ s£mid_ds
+
+
+41 
+c_³rm
+
+ m£m_³rm
+;
+
+42
+__time_t
+
+ m£m_Ùime
+;
+
+43 
+ m__unu£d1
+;
+
+44
+__time_t
+
+ m£m_ùime
+;
+
+45 
+ m__unu£d2
+;
+
+46 
+ m£m_n£ms
+;
+
+47 
+ m__unu£d3
+;
+
+48 
+ m__unu£d4
+;
+
+65 
+ #_SEM_SEMUN_UNDEFINED
+ 1
+
+ )
+
+67 #ifdeà
+__USE_MISC
+
+
+70 
+ #SEM_STAT
+ 18
+
+ )
+
+71 
+ #SEM_INFO
+ 19
+
+ )
+
+73 
+ s£mšfo
+
+
+75 
+ m£mm­
+;
+
+76 
+ m£mmni
+;
+
+77 
+ m£mmns
+;
+
+78 
+ m£mmnu
+;
+
+79 
+ m£mm¦
+;
+
+80 
+ m£mÝm
+;
+
+81 
+ m£mume
+;
+
+82 
+ m£musz
+;
+
+83 
+ m£mvmx
+;
+
+84 
+ m£m«m
+;
+
+ @/usr/include/bits/setjmp.h
+
+21 #iâdeà
+_SETJMP_H
+
+
+25 #ià
+defšed
+
+__USE_MISC
+ || defšed
+_ASM
+
+
+26 
+ #JB_BX
+ 0
+
+ )
+
+27 
+ #JB_SI
+ 1
+
+ )
+
+28 
+ #JB_DI
+ 2
+
+ )
+
+29 
+ #JB_BP
+ 3
+
+ )
+
+30 
+ #JB_SP
+ 4
+
+ )
+
+31 
+ #JB_PC
+ 5
+
+ )
+
+32 
+ #JB_SIZE
+ 24
+
+ )
+
+35 #iâdef
+_ASM
+
+
+36 
+ t__jmp_buf
+[6];
+
+41 
+ #_JMPBUF_UNWINDS
+(
+jmpbuf
+,
+add»ss
+) \
+
+42 ((*è(
+add»ss
+è< (*è(
+jmpbuf
+)[
+JB_SP
+])
+
+ )
+
+ @/usr/include/bits/shm.h
+
+19 #iâdeà
+_SYS_SHM_H
+
+
+23 
+ ~<b™s/ty³s.h
+>
+
+26 
+ #SHM_R
+ 0400
+
+ )
+
+27 
+ #SHM_W
+ 0200
+
+ )
+
+30 
+ #SHM_RDONLY
+ 010000
+
+ )
+
+31 
+ #SHM_RND
+ 020000
+
+ )
+
+32 
+ #SHM_REMAP
+ 040000
+
+ )
+
+35 
+ #SHM_LOCK
+ 11
+
+ )
+
+36 
+ #SHM_UNLOCK
+ 12
+
+ )
+
+40 
+ tshm©t_t
+;
+
+43 
+ sshmid_ds
+
+
+45 
+c_³rm
+
+ mshm_³rm
+;
+
+46
+size_t
+
+ mshm_£gsz
+;
+
+47
+__time_t
+
+ mshm_©ime
+;
+
+48 
+ m__unu£d1
+;
+
+49
+__time_t
+
+ mshm_dtime
+;
+
+50 
+ m__unu£d2
+;
+
+51
+__time_t
+
+ mshm_ùime
+;
+
+52 
+ m__unu£d3
+;
+
+53
+__pid_t
+
+ mshm_ýid
+;
+
+54
+__pid_t
+
+ mshm_Íid
+;
+
+55
+shm©t_t
+
+ mshm_ljch
+;
+
+56 
+ m__unu£d4
+;
+
+57 
+ m__unu£d5
+;
+
+60 #ifdeà
+__USE_MISC
+
+
+63 
+ #SHM_STAT
+ 13
+
+ )
+
+64 
+ #SHM_INFO
+ 14
+
+ )
+
+67 
+ #SHM_DEST
+ 01000
+
+ )
+
+68 
+ #SHM_LOCKED
+ 02000
+
+ )
+
+70 
+ sshmšfo
+
+
+72 
+ mshmmax
+;
+
+73 
+ mshmmš
+;
+
+74 
+ mshmmni
+;
+
+75 
+ mshm£g
+;
+
+76 
+ mshm®l
+;
+
+77 
+ m__unu£d1
+;
+
+78 
+ m__unu£d2
+;
+
+79 
+ m__unu£d3
+;
+
+80 
+ m__unu£d4
+;
+
+83 
+ sshm_šfo
+
+
+85 
+ mu£d_ids
+;
+
+86 
+ mshm_tÙ
+;
+
+87 
+ mshm_rss
+;
+
+88 
+ mshm_swp
+;
+
+89 
+ msw­_©‹m±s
+;
+
+90 
+ msw­_sucûs£s
+;
+
+ @/usr/include/bits/sigaction.h
+
+20 #iâdeà
+_SIGNAL_H
+
+
+25 
+ ssigaùiÚ
+
+
+28 #ifdeà
+__USE_POSIX199309
+
+
+32
+__sighªdËr_t
+
+ m§_hªdËr
+;
+
+34 (*
+ m§_sigaùiÚ
+è(,
+ msigšfo_t
+ *, *);
+
+36
+ m__sigaùiÚ_hªdËr
+;
+
+37 
+ #§_hªdËr
+
+__sigaùiÚ_hªdËr
+.
+§_hªdËr
+
+
+ )
+
+38 
+ #§_sigaùiÚ
+
+__sigaùiÚ_hªdËr
+.
+§_sigaùiÚ
+
+
+ )
+
+40
+__sighªdËr_t
+
+ m§_hªdËr
+;
+
+44
+__sig£t_t
+
+ m§_mask
+;
+
+47 
+ m§_æags
+;
+
+50 (*
+ m§_»¡Ü”
+) ();
+
+54 
+ #SA_NOCLDSTOP
+ 1
+
+ )
+
+55 
+ #SA_NOCLDWAIT
+ 2
+
+ )
+
+56 
+ #SA_SIGINFO
+ 4
+
+ )
+
+58 #ià
+defšed
+
+__USE_UNIX98
+ || defšed
+__USE_MISC
+
+
+59 
+ #SA_ONSTACK
+ 0x08000000
+
+ )
+
+60 
+ #SA_RESTART
+ 0x10000000
+
+ )
+
+61 
+ #SA_NODEFER
+ 0x40000000
+
+ )
+
+63 
+ #SA_RESETHAND
+ 0x80000000
+
+ )
+
+65 #ifdeà
+__USE_MISC
+
+
+66 
+ #SA_INTERRUPT
+ 0x20000000
+
+ )
+
+69 
+ #SA_NOMASK
+
+SA_NODEFER
+
+
+ )
+
+70 
+ #SA_ONESHOT
+
+SA_RESETHAND
+
+
+ )
+
+71 
+ #SA_STACK
+
+SA_ONSTACK
+
+
+ )
+
+75 
+ #SIG_BLOCK
+ 0
+
+ )
+
+76 
+ #SIG_UNBLOCK
+ 1
+
+ )
+
+77 
+ #SIG_SETMASK
+ 2
+
+ )
+
+ @/usr/include/bits/sigcontext.h
+
+19 #ià!
+defšed
+
+_SIGNAL_H
+ && !defšed
+_SYS_UCONTEXT_H
+
+
+23 #iâdeà
+sigcÚ‹xt_¡ruù
+
+
+26 
+ #sigcÚ‹xt_¡ruù
+
+sigcÚ‹xt
+
+
+ )
+
+28 
+ ~<asm/sigcÚ‹xt.h
+>
+
+ @/usr/include/bits/siginfo.h
+
+20 #ià!
+defšed
+
+_SIGNAL_H
+ && !defšed
+__Ãed_sigšfo_t
+ \
+
+21 && !
+defšed
+
+ g__Ãed_sigev’t_t
+
+
+25 
+ ~<b™s/wÜdsize.h
+>
+
+27 #ià(!
+defšed
+
+__have_sigv®_t
+ \
+
+28 && (
+defšed
+
+ g_SIGNAL_H
+ || defšed
+ g__Ãed_sigšfo_t
+ \
+
+29 ||
+defšed
+
+ g__Ãed_sigev’t_t
+))
+
+30 
+ #__have_sigv®_t
+ 1
+
+ )
+
+33 
+ usigv®
+
+
+35 
+ msiv®_št
+;
+
+36 *
+ msiv®_±r
+;
+
+37 }
+ tsigv®_t
+;
+
+40 #ià(!
+defšed
+
+__have_sigšfo_t
+ \
+
+41 && (
+defšed
+
+ g_SIGNAL_H
+ || defšed
+ g__Ãed_sigšfo_t
+))
+
+42 
+ #__have_sigšfo_t
+ 1
+
+ )
+
+44 
+ #__SI_MAX_SIZE
+ 128
+
+ )
+
+45 #ià
+__WORDSIZE
+ == 64
+
+46 
+ #__SI_PAD_SIZE
+ ((
+__SI_MAX_SIZE
+ /  ()è- 4)
+
+ )
+
+48 
+ #__SI_PAD_SIZE
+ ((
+__SI_MAX_SIZE
+ /  ()è- 3)
+
+ )
+
+51 
+ ssigšfo
+
+
+53 
+ msi_signo
+;
+
+54 
+ msi_Ӽo
+;
+
+56 
+ msi_code
+;
+
+60 
+ m_·d
+[
+__SI_PAD_SIZE
+];
+
+65
+__pid_t
+
+ msi_pid
+;
+
+66
+__uid_t
+
+ msi_uid
+;
+
+67 }
+ m_kžl
+;
+
+72 
+ m_tim”1
+;
+
+73 
+ m_tim”2
+;
+
+74 }
+ m_tim”
+;
+
+79
+__pid_t
+
+ msi_pid
+;
+
+80
+__uid_t
+
+ msi_uid
+;
+
+81
+sigv®_t
+
+ msi_sigv®
+;
+
+82 }
+ m_¹
+;
+
+87
+__pid_t
+
+ msi_pid
+;
+
+88
+__uid_t
+
+ msi_uid
+;
+
+89 
+ msi_¡©us
+;
+
+90
+__þock_t
+
+ msi_utime
+;
+
+91
+__þock_t
+
+ msi_¡ime
+;
+
+92 }
+ m_sigchld
+;
+
+97 *
+ msi_addr
+;
+
+98 }
+ m_sigçuÉ
+;
+
+103 
+ msi_bªd
+;
+
+104 
+ msi_fd
+;
+
+105 }
+ m_sigpÞl
+;
+
+106 }
+ m_sif›lds
+;
+
+107 }
+ tsigšfo_t
+;
+
+111 
+ #si_pid
+
+_sif›lds
+.
+_kžl
+.
+si_pid
+
+
+ )
+
+112 
+ #si_uid
+
+_sif›lds
+.
+_kžl
+.
+si_uid
+
+
+ )
+
+113 
+ #si_tim”1
+
+_sif›lds
+.
+_tim”
+.
+_tim”1
+
+
+ )
+
+114 
+ #si_tim”2
+
+_sif›lds
+.
+_tim”
+.
+_tim”2
+
+
+ )
+
+115 
+ #si_¡©us
+
+_sif›lds
+.
+_sigchld
+.
+si_¡©us
+
+
+ )
+
+116 
+ #si_utime
+
+_sif›lds
+.
+_sigchld
+.
+si_utime
+
+
+ )
+
+117 
+ #si_¡ime
+
+_sif›lds
+.
+_sigchld
+.
+si_¡ime
+
+
+ )
+
+118 
+ #si_v®ue
+
+_sif›lds
+.
+_¹
+.
+si_sigv®
+
+
+ )
+
+119 
+ #si_št
+
+_sif›lds
+.
+_¹
+.
+si_sigv®
+.
+siv®_št
+
+
+ )
+
+120 
+ #si_±r
+
+_sif›lds
+.
+_¹
+.
+si_sigv®
+.
+siv®_±r
+
+
+ )
+
+121 
+ #si_addr
+
+_sif›lds
+.
+_sigçuÉ
+.
+si_addr
+
+
+ )
+
+122 
+ #si_bªd
+
+_sif›lds
+.
+_sigpÞl
+.
+si_bªd
+
+
+ )
+
+123 
+ #si_fd
+
+_sif›lds
+.
+_sigpÞl
+.
+si_fd
+
+
+ )
+
+130
+ mSI_ASYNCNL
+ = -6,
+
+131 
+ #SI_ASYNCNL
+
+SI_ASYNCNL
+
+
+ )
+
+132
+ mSI_SIGIO
+,
+
+133 
+ #SI_SIGIO
+
+SI_SIGIO
+
+
+ )
+
+134
+ mSI_ASYNCIO
+,
+
+135 
+ #SI_ASYNCIO
+
+SI_ASYNCIO
+
+
+ )
+
+136
+ mSI_MESGQ
+,
+
+137 
+ #SI_MESGQ
+
+SI_MESGQ
+
+
+ )
+
+138
+ mSI_TIMER
+,
+
+139 
+ #SI_TIMER
+
+SI_TIMER
+
+
+ )
+
+140
+ mSI_QUEUE
+,
+
+141 
+ #SI_QUEUE
+
+SI_QUEUE
+
+
+ )
+
+142
+ mSI_USER
+,
+
+143 
+ #SI_USER
+
+SI_USER
+
+
+ )
+
+144
+ mSI_KERNEL
+ = 0x80
+
+145 
+ #SI_KERNEL
+
+SI_KERNEL
+
+
+ )
+
+152
+ mILL_ILLOPC
+ = 1,
+
+153 
+ #ILL_ILLOPC
+
+ILL_ILLOPC
+
+
+ )
+
+154
+ mILL_ILLOPN
+,
+
+155 
+ #ILL_ILLOPN
+
+ILL_ILLOPN
+
+
+ )
+
+156
+ mILL_ILLADR
+,
+
+157 
+ #ILL_ILLADR
+
+ILL_ILLADR
+
+
+ )
+
+158
+ mILL_ILLTRP
+,
+
+159 
+ #ILL_ILLTRP
+
+ILL_ILLTRP
+
+
+ )
+
+160
+ mILL_PRVOPC
+,
+
+161 
+ #ILL_PRVOPC
+
+ILL_PRVOPC
+
+
+ )
+
+162
+ mILL_PRVREG
+,
+
+163 
+ #ILL_PRVREG
+
+ILL_PRVREG
+
+
+ )
+
+164
+ mILL_COPROC
+,
+
+165 
+ #ILL_COPROC
+
+ILL_COPROC
+
+
+ )
+
+166
+ mILL_BADSTK
+
+
+167 
+ #ILL_BADSTK
+
+ILL_BADSTK
+
+
+ )
+
+173
+ mFPE_INTDIV
+ = 1,
+
+174 
+ #FPE_INTDIV
+
+FPE_INTDIV
+
+
+ )
+
+175
+ mFPE_INTOVF
+,
+
+176 
+ #FPE_INTOVF
+
+FPE_INTOVF
+
+
+ )
+
+177
+ mFPE_FLTDIV
+,
+
+178 
+ #FPE_FLTDIV
+
+FPE_FLTDIV
+
+
+ )
+
+179
+ mFPE_FLTOVF
+,
+
+180 
+ #FPE_FLTOVF
+
+FPE_FLTOVF
+
+
+ )
+
+181
+ mFPE_FLTUND
+,
+
+182 
+ #FPE_FLTUND
+
+FPE_FLTUND
+
+
+ )
+
+183
+ mFPE_FLTRES
+,
+
+184 
+ #FPE_FLTRES
+
+FPE_FLTRES
+
+
+ )
+
+185
+ mFPE_FLTINV
+,
+
+186 
+ #FPE_FLTINV
+
+FPE_FLTINV
+
+
+ )
+
+187
+ mFPE_FLTSUB
+
+
+188 
+ #FPE_FLTSUB
+
+FPE_FLTSUB
+
+
+ )
+
+194
+ mSEGV_MAPERR
+ = 1,
+
+195 
+ #SEGV_MAPERR
+
+SEGV_MAPERR
+
+
+ )
+
+196
+ mSEGV_ACCERR
+
+
+197 
+ #SEGV_ACCERR
+
+SEGV_ACCERR
+
+
+ )
+
+203
+ mBUS_ADRALN
+ = 1,
+
+204 
+ #BUS_ADRALN
+
+BUS_ADRALN
+
+
+ )
+
+205
+ mBUS_ADRERR
+,
+
+206 
+ #BUS_ADRERR
+
+BUS_ADRERR
+
+
+ )
+
+207
+ mBUS_OBJERR
+
+
+208 
+ #BUS_OBJERR
+
+BUS_OBJERR
+
+
+ )
+
+214
+ mTRAP_BRKPT
+ = 1,
+
+215 
+ #TRAP_BRKPT
+
+TRAP_BRKPT
+
+
+ )
+
+216
+ mTRAP_TRACE
+
+
+217 
+ #TRAP_TRACE
+
+TRAP_TRACE
+
+
+ )
+
+223
+ mCLD_EXITED
+ = 1,
+
+224 
+ #CLD_EXITED
+
+CLD_EXITED
+
+
+ )
+
+225
+ mCLD_KILLED
+,
+
+226 
+ #CLD_KILLED
+
+CLD_KILLED
+
+
+ )
+
+227
+ mCLD_DUMPED
+,
+
+228 
+ #CLD_DUMPED
+
+CLD_DUMPED
+
+
+ )
+
+229
+ mCLD_TRAPPED
+,
+
+230 
+ #CLD_TRAPPED
+
+CLD_TRAPPED
+
+
+ )
+
+231
+ mCLD_STOPPED
+,
+
+232 
+ #CLD_STOPPED
+
+CLD_STOPPED
+
+
+ )
+
+233
+ mCLD_CONTINUED
+
+
+234 
+ #CLD_CONTINUED
+
+CLD_CONTINUED
+
+
+ )
+
+240
+ mPOLL_IN
+ = 1,
+
+241 
+ #POLL_IN
+
+POLL_IN
+
+
+ )
+
+242
+ mPOLL_OUT
+,
+
+243 
+ #POLL_OUT
+
+POLL_OUT
+
+
+ )
+
+244
+ mPOLL_MSG
+,
+
+245 
+ #POLL_MSG
+
+POLL_MSG
+
+
+ )
+
+246
+ mPOLL_ERR
+,
+
+247 
+ #POLL_ERR
+
+POLL_ERR
+
+
+ )
+
+248
+ mPOLL_PRI
+,
+
+249 
+ #POLL_PRI
+
+POLL_PRI
+
+
+ )
+
+250
+ mPOLL_HUP
+
+
+251 
+ #POLL_HUP
+
+POLL_HUP
+
+
+ )
+
+254 #undeà
+__Ãed_sigšfo_t
+
+
+258 #ià(
+defšed
+
+_SIGNAL_H
+ || defšed
+__Ãed_sigev’t_t
+) \
+
+259 && !
+defšed
+
+ g__have_sigev’t_t
+
+
+260 
+ #__have_sigev’t_t
+ 1
+
+ )
+
+263 
+ #__SIGEV_MAX_SIZE
+ 64
+
+ )
+
+264 #ià
+__WORDSIZE
+ == 64
+
+265 
+ #__SIGEV_PAD_SIZE
+ ((
+__SIGEV_MAX_SIZE
+ /  ()è- 4)
+
+ )
+
+267 
+ #__SIGEV_PAD_SIZE
+ ((
+__SIGEV_MAX_SIZE
+ /  ()è- 3)
+
+ )
+
+271 
+ g__±h»ad_©Œ_s
+;
+
+273 
+ ssigev’t
+
+
+275
+sigv®_t
+
+ msigev_v®ue
+;
+
+276 
+ msigev_signo
+;
+
+277 
+ msigev_nÙify
+;
+
+281 
+ m_·d
+[
+__SIGEV_PAD_SIZE
+];
+
+285 (*
+ m_funùiÚ
+è(
+ msigv®_t
+);
+
+286 
+__±h»ad_©Œ_s
+ *
+ m_©Œibu‹
+;
+
+287 }
+ m_sigev_th»ad
+;
+
+288 }
+ m_sigev_un
+;
+
+289 }
+ tsigev’t_t
+;
+
+292 
+ #sigev_nÙify_funùiÚ
+
+_sigev_un
+.
+_sigev_th»ad
+.
+_funùiÚ
+
+
+ )
+
+293 
+ #sigev_nÙify_©Œibu‹s
+
+_sigev_un
+.
+_sigev_th»ad
+.
+_©Œibu‹
+
+
+ )
+
+298
+ mSIGEV_SIGNAL
+ = 0,
+
+299 
+ #SIGEV_SIGNAL
+
+SIGEV_SIGNAL
+
+
+ )
+
+300
+ mSIGEV_NONE
+,
+
+301 
+ #SIGEV_NONE
+
+SIGEV_NONE
+
+
+ )
+
+302
+ mSIGEV_THREAD
+
+
+303 
+ #SIGEV_THREAD
+
+SIGEV_THREAD
+
+
+ )
+
+ @/usr/include/bits/signum.h
+
+20 #ifdef
+_SIGNAL_H
+
+
+23 
+ #SIG_ERR
+ ((
+__sighªdËr_t
+è-1è
+
+ )
+
+24 
+ #SIG_DFL
+ ((
+__sighªdËr_t
+è0è
+
+ )
+
+25 
+ #SIG_IGN
+ ((
+__sighªdËr_t
+è1è
+
+ )
+
+27 #ifdeà
+__USE_UNIX98
+
+
+28 
+ #SIG_HOLD
+ ((
+__sighªdËr_t
+è2è
+
+ )
+
+33 
+ #SIGHUP
+ 1
+
+ )
+
+34 
+ #SIGINT
+ 2
+
+ )
+
+35 
+ #SIGQUIT
+ 3
+
+ )
+
+36 
+ #SIGILL
+ 4
+
+ )
+
+37 
+ #SIGTRAP
+ 5
+
+ )
+
+38 
+ #SIGABRT
+ 6
+
+ )
+
+39 
+ #SIGIOT
+ 6
+
+ )
+
+40 
+ #SIGBUS
+ 7
+
+ )
+
+41 
+ #SIGFPE
+ 8
+
+ )
+
+42 
+ #SIGKILL
+ 9
+
+ )
+
+43 
+ #SIGUSR1
+ 10
+
+ )
+
+44 
+ #SIGSEGV
+ 11
+
+ )
+
+45 
+ #SIGUSR2
+ 12
+
+ )
+
+46 
+ #SIGPIPE
+ 13
+
+ )
+
+47 
+ #SIGALRM
+ 14
+
+ )
+
+48 
+ #SIGTERM
+ 15
+
+ )
+
+49 
+ #SIGSTKFLT
+ 16
+
+ )
+
+50 
+ #SIGCLD
+
+SIGCHLD
+
+
+ )
+
+51 
+ #SIGCHLD
+ 17
+
+ )
+
+52 
+ #SIGCONT
+ 18
+
+ )
+
+53 
+ #SIGSTOP
+ 19
+
+ )
+
+54 
+ #SIGTSTP
+ 20
+
+ )
+
+55 
+ #SIGTTIN
+ 21
+
+ )
+
+56 
+ #SIGTTOU
+ 22
+
+ )
+
+57 
+ #SIGURG
+ 23
+
+ )
+
+58 
+ #SIGXCPU
+ 24
+
+ )
+
+59 
+ #SIGXFSZ
+ 25
+
+ )
+
+60 
+ #SIGVTALRM
+ 26
+
+ )
+
+61 
+ #SIGPROF
+ 27
+
+ )
+
+62 
+ #SIGWINCH
+ 28
+
+ )
+
+63 
+ #SIGPOLL
+
+SIGIO
+
+
+ )
+
+64 
+ #SIGIO
+ 29
+
+ )
+
+65 
+ #SIGPWR
+ 30
+
+ )
+
+66 
+ #SIGSYS
+ 31
+
+ )
+
+67 
+ #SIGUNUSED
+ 31
+
+ )
+
+69 
+ #_NSIG
+ 64
+
+ )
+
+72 
+ #SIGRTMIN
+ (
+ `__libc_cu¼’t_sig¹mš
+ ())
+
+ )
+
+73 
+ #SIGRTMAX
+ (
+ `__libc_cu¼’t_sig¹max
+ ())
+
+ )
+
+77 
+ #__SIGRTMIN
+ 32
+
+ )
+
+78 
+ #__SIGRTMAX
+ (
+_NSIG
+ - 1)
+
+ )
+
+ @/usr/include/bits/sigset.h
+
+20 #iâdef
+_SIGSET_H_ty³s
+
+
+21 
+ #_SIGSET_H_ty³s
+ 1
+
+ )
+
+23 
+ t__sig_©omic_t
+;
+
+27 
+ #_SIGSET_NWORDS
+ (1024 / (8 *  ()))
+
+ )
+
+30 
+ m__v®
+[
+_SIGSET_NWORDS
+];
+
+31 }
+ t__sig£t_t
+;
+
+42 #ià!
+defšed
+
+_SIGSET_H_âs
+ && defšed
+_SIGNAL_H
+
+
+43 
+ #_SIGSET_H_âs
+ 1
+
+ )
+
+45 #iâdeà
+_EXTERN_INLINE
+
+
+46 
+ #_EXTERN_INLINE
+
+__šlše
+
+
+ )
+
+50 
+ #__sigmask
+(
+sig
+) \
+
+51 (((è1è<< (((
+sig
+è- 1è% (8 *  ())))
+
+ )
+
+54 
+ #__sigwÜd
+(
+sig
+è(((sigè- 1è/ (8 *  ()))
+
+ )
+
+56 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+57 
+ #__sigem±y£t
+(
+£t
+) \
+
+58 (
+ `__ex‹nsiÚ__
+ ({ 
+__út
+ =
+_SIGSET_NWORDS
+; \
+
+59
+sig£t_t
+ *
+__£t
+ = (
+£t
+); \
+
+60 --
+__út
+ >ð0è
+__£t
+->
+__v®
+[__cnt] = 0; \
+
+61 0; }))
+
+ )
+
+62 
+ #__sigfžl£t
+(
+£t
+) \
+
+63 (
+ `__ex‹nsiÚ__
+ ({ 
+__út
+ =
+_SIGSET_NWORDS
+; \
+
+64
+sig£t_t
+ *
+__£t
+ = (
+£t
+); \
+
+65 --
+__út
+ >ð0è
+__£t
+->
+__v®
+[__cnt] = ~0UL; \
+
+66 0; }))
+
+ )
+
+68 #ifdeà
+__USE_GNU
+
+
+72 
+ #__sigi£m±y£t
+(
+£t
+) \
+
+73 (
+ `__ex‹nsiÚ__
+ ({ 
+__út
+ =
+_SIGSET_NWORDS
+; \
+
+74 cÚ¡
+sig£t_t
+ *
+__£t
+ = (
+£t
+); \
+
+75 
+__»t
+ =
+__£t
+->
+__v®
+[--
+__út
+]; \
+
+76 !
+__»t
+ && --
+__út
+ >= 0) \
+
+77
+__»t
+ =
+__£t
+->
+__v®
+[
+__út
+]; \
+
+78
+__»t
+ =ð0; }))
+
+ )
+
+79 
+ #__sigªd£t
+(
+de¡
+,
+Ëá
+,
+right
+) \
+
+80 (
+ `__ex‹nsiÚ__
+ ({ 
+__út
+ =
+_SIGSET_NWORDS
+; \
+
+81
+sig£t_t
+ *
+__de¡
+ = (
+de¡
+); \
+
+82 cÚ¡
+sig£t_t
+ *
+__Ëá
+ = (
+Ëá
+); \
+
+83 cÚ¡
+sig£t_t
+ *
+__right
+ = (
+right
+); \
+
+84 --
+__út
+ >= 0) \
+
+85
+__de¡
+->
+__v®
+[
+__út
+] = (
+__Ëá
+->__val[__cnt] \
+
+86 &
+__right
+->
+__v®
+[
+__út
+]); \
+
+87 0; }))
+
+ )
+
+88 
+ #__sigܣt
+(
+de¡
+,
+Ëá
+,
+right
+) \
+
+89 (
+ `__ex‹nsiÚ__
+ ({ 
+__út
+ =
+_SIGSET_NWORDS
+; \
+
+90
+sig£t_t
+ *
+__de¡
+ = (
+de¡
+); \
+
+91 cÚ¡
+sig£t_t
+ *
+__Ëá
+ = (
+Ëá
+); \
+
+92 cÚ¡
+sig£t_t
+ *
+__right
+ = (
+right
+); \
+
+93 --
+__út
+ >= 0) \
+
+94
+__de¡
+->
+__v®
+[
+__út
+] = (
+__Ëá
+->__val[__cnt] \
+
+95 |
+__right
+->
+__v®
+[
+__út
+]); \
+
+96 0; }))
+
+ )
+
+103
+
+__sigismemb”
+ (
+__cÚ¡
+
+__sig£t_t
+ *, );
+
+104
+
+__sigadd£t
+ (
+__sig£t_t
+ *, );
+
+105
+
+__sigd–£t
+ (
+__sig£t_t
+ *, );
+
+107 #ifdeà
+__USE_EXTERN_INLINES
+
+
+108 
+ #__SIGSETFN
+(
+NAME
+,
+BODY
+,
+CONST
+) \
+
+109
+_EXTERN_INLINE
+ \
+
+110
+ `NAME
+ (
+CONST
+
+__sig£t_t
+ *
+__£t
+, 
+__sig
+) \
+
+112 
+__mask
+ =
+ `__sigmask
+ (
+__sig
+); \
+
+113 
+__wÜd
+ =
+ `__sigwÜd
+ (
+__sig
+); \
+
+114 
+BODY
+; \
+
+115 }
+
+ )
+
+117
+__SIGSETFN
+ (
+__sigismemb”
+, (
+__£t
+->
+__v®
+[
+__wÜd
+] &
+__mask
+è? 1 : 0,
+__cÚ¡
+)
+
+118
+__SIGSETFN
+ (
+__sigadd£t
+, ((
+__£t
+->
+__v®
+[
+__wÜd
+] |ð
+__mask
+), 0), )
+
+119
+__SIGSETFN
+ (
+__sigd–£t
+, ((
+__£t
+->
+__v®
+[
+__wÜd
+] &ð~
+__mask
+), 0), )
+
+121 #undeà
+__SIGSETFN
+
+
+ @/usr/include/bits/sigstack.h
+
+20 #iâdeà
+_SIGNAL_H
+
+
+26 
+ ssig¡ack
+
+
+28 *
+ mss_¥
+;
+
+29 
+ mss_Ú¡ack
+;
+
+36
+ mSS_ONSTACK
+ = 1,
+
+37 
+ #SS_ONSTACK
+
+SS_ONSTACK
+
+
+ )
+
+38
+ mSS_DISABLE
+
+
+39 
+ #SS_DISABLE
+
+SS_DISABLE
+
+
+ )
+
+43 
+ #MINSIGSTKSZ
+ 2048
+
+ )
+
+46 
+ #SIGSTKSZ
+ 8192
+
+ )
+
+50 
+ ssig®t¡ack
+
+
+52 *
+ mss_¥
+;
+
+53 
+ mss_æags
+;
+
+54
+size_t
+
+ mss_size
+;
+
+55 }
+ t¡ack_t
+;
+
+ @/usr/include/bits/sigthread.h
+
+20 #iâdeà
+_BITS_SIGTHREAD_H
+
+
+21 
+ #_BITS_SIGTHREAD_H
+ 1
+
+ )
+
+23 #ià!
+defšed
+
+_SIGNAL_H
+ && !defšed
+_PTHREAD_H
+
+
+31
+
+ $±h»ad_sigmask
+ (
+__how
+,
+
+32
+__cÚ¡
+
+__sig£t_t
+ *
+__»¡riù
+
+__Ãwmask
+,
+
+33
+__sig£t_t
+ *
+__»¡riù
+
+__Þdmask
+)
+__THROW
+;
+
+36
+
+ $±h»ad_kžl
+ (
+±h»ad_t
+
+__th»ad
+, 
+__signo
+__THROW
+;
+
+ @/usr/include/bits/socket.h
+
+20 #iâdeà
+__BITS_SOCKET_H
+
+
+21 
+ #__BITS_SOCKET_H
+
+
+ )
+
+23 #ià!
+defšed
+
+_SYS_SOCKET_H
+ && !defšed
+_NETINET_IN_H
+
+
+27 
+ #__Ãed_size_t
+
+
+ )
+
+28 
+ #__Ãed_NULL
+
+
+ )
+
+29 
+ ~<¡ddef.h
+>
+
+31 
+ ~<lim™s.h
+>
+
+32 
+ ~<sys/ty³s.h
+>
+
+35 #iâdeà
+__sockËn_t_defšed
+
+
+36 
+__sockËn_t
+
+ tsockËn_t
+;
+
+37 
+ #__sockËn_t_defšed
+
+
+ )
+
+41
+ e__sock‘_ty³
+
+
+43
+ mSOCK_STREAM
+ = 1,
+
+45 
+ #SOCK_STREAM
+
+SOCK_STREAM
+
+
+ )
+
+46
+ mSOCK_DGRAM
+ = 2,
+
+48 
+ #SOCK_DGRAM
+
+SOCK_DGRAM
+
+
+ )
+
+49
+ mSOCK_RAW
+ = 3,
+
+50 
+ #SOCK_RAW
+
+SOCK_RAW
+
+
+ )
+
+51
+ mSOCK_RDM
+ = 4,
+
+52 
+ #SOCK_RDM
+
+SOCK_RDM
+
+
+ )
+
+53
+ mSOCK_SEQPACKET
+ = 5,
+
+55 
+ #SOCK_SEQPACKET
+
+SOCK_SEQPACKET
+
+
+ )
+
+56
+ mSOCK_PACKET
+ = 10
+
+59 
+ #SOCK_PACKET
+
+SOCK_PACKET
+
+
+ )
+
+63 
+ #PF_UNSPEC
+ 0
+
+ )
+
+64 
+ #PF_LOCAL
+ 1
+
+ )
+
+65 
+ #PF_UNIX
+
+PF_LOCAL
+
+
+ )
+
+66 
+ #PF_FILE
+
+PF_LOCAL
+
+
+ )
+
+67 
+ #PF_INET
+ 2
+
+ )
+
+68 
+ #PF_AX25
+ 3
+
+ )
+
+69 
+ #PF_IPX
+ 4
+
+ )
+
+70 
+ #PF_APPLETALK
+ 5
+
+ )
+
+71 
+ #PF_NETROM
+ 6
+
+ )
+
+72 
+ #PF_BRIDGE
+ 7
+
+ )
+
+73 
+ #PF_ATMPVC
+ 8
+
+ )
+
+74 
+ #PF_X25
+ 9
+
+ )
+
+75 
+ #PF_INET6
+ 10
+
+ )
+
+76 
+ #PF_ROSE
+ 11
+
+ )
+
+77 
+ #PF_DECÃt
+ 12
+
+ )
+
+78 
+ #PF_NETBEUI
+ 13
+
+ )
+
+79 
+ #PF_SECURITY
+ 14
+
+ )
+
+80 
+ #PF_KEY
+ 15
+
+ )
+
+81 
+ #PF_NETLINK
+ 16
+
+ )
+
+82 
+ #PF_ROUTE
+
+PF_NETLINK
+
+
+ )
+
+83 
+ #PF_PACKET
+ 17
+
+ )
+
+84 
+ #PF_ASH
+ 18
+
+ )
+
+85 
+ #PF_ECONET
+ 19
+
+ )
+
+86 
+ #PF_ATMSVC
+ 20
+
+ )
+
+87 
+ #PF_SNA
+ 22
+
+ )
+
+88 
+ #PF_IRDA
+ 23
+
+ )
+
+89 
+ #PF_PPPOX
+ 24
+
+ )
+
+90 
+ #PF_WANPIPE
+ 25
+
+ )
+
+91 
+ #PF_BLUETOOTH
+ 31
+
+ )
+
+92 
+ #PF_MAX
+ 32
+
+ )
+
+95 
+ #AF_UNSPEC
+
+PF_UNSPEC
+
+
+ )
+
+96 
+ #AF_LOCAL
+
+PF_LOCAL
+
+
+ )
+
+97 
+ #AF_UNIX
+
+PF_UNIX
+
+
+ )
+
+98 
+ #AF_FILE
+
+PF_FILE
+
+
+ )
+
+99 
+ #AF_INET
+
+PF_INET
+
+
+ )
+
+100 
+ #AF_AX25
+
+PF_AX25
+
+
+ )
+
+101 
+ #AF_IPX
+
+PF_IPX
+
+
+ )
+
+102 
+ #AF_APPLETALK
+
+PF_APPLETALK
+
+
+ )
+
+103 
+ #AF_NETROM
+
+PF_NETROM
+
+
+ )
+
+104 
+ #AF_BRIDGE
+
+PF_BRIDGE
+
+
+ )
+
+105 
+ #AF_ATMPVC
+
+PF_ATMPVC
+
+
+ )
+
+106 
+ #AF_X25
+
+PF_X25
+
+
+ )
+
+107 
+ #AF_INET6
+
+PF_INET6
+
+
+ )
+
+108 
+ #AF_ROSE
+
+PF_ROSE
+
+
+ )
+
+109 
+ #AF_DECÃt
+
+PF_DECÃt
+
+
+ )
+
+110 
+ #AF_NETBEUI
+
+PF_NETBEUI
+
+
+ )
+
+111 
+ #AF_SECURITY
+
+PF_SECURITY
+
+
+ )
+
+112 
+ #AF_KEY
+
+PF_KEY
+
+
+ )
+
+113 
+ #AF_NETLINK
+
+PF_NETLINK
+
+
+ )
+
+114 
+ #AF_ROUTE
+
+PF_ROUTE
+
+
+ )
+
+115 
+ #AF_PACKET
+
+PF_PACKET
+
+
+ )
+
+116 
+ #AF_ASH
+
+PF_ASH
+
+
+ )
+
+117 
+ #AF_ECONET
+
+PF_ECONET
+
+
+ )
+
+118 
+ #AF_ATMSVC
+
+PF_ATMSVC
+
+
+ )
+
+119 
+ #AF_SNA
+
+PF_SNA
+
+
+ )
+
+120 
+ #AF_IRDA
+
+PF_IRDA
+
+
+ )
+
+121 
+ #AF_PPPOX
+
+PF_PPPOX
+
+
+ )
+
+122 
+ #AF_WANPIPE
+
+PF_WANPIPE
+
+
+ )
+
+123 
+ #AF_BLUETOOTH
+
+PF_BLUETOOTH
+
+
+ )
+
+124 
+ #AF_MAX
+
+PF_MAX
+
+
+ )
+
+130 
+ #SOL_RAW
+ 255
+
+ )
+
+131 
+ #SOL_DECNET
+ 261
+
+ )
+
+132 
+ #SOL_X25
+ 262
+
+ )
+
+133 
+ #SOL_PACKET
+ 263
+
+ )
+
+134 
+ #SOL_ATM
+ 264
+
+ )
+
+135 
+ #SOL_AAL
+ 265
+
+ )
+
+136 
+ #SOL_IRDA
+ 266
+
+ )
+
+139 
+ #SOMAXCONN
+ 128
+
+ )
+
+142 
+ ~<b™s/sockaddr.h
+>
+
+145 
+ ssockaddr
+
+
+147
+__SOCKADDR_COMMON
+ (
+§_
+);
+
+148 
+ m§_d©a
+[14];
+
+154 #ià
+ULONG_MAX
+ > 0xffffffff
+
+155 
+ #__ss_®igÁy³
+
+__ušt64_t
+
+
+ )
+
+157 
+ #__ss_®igÁy³
+
+__ušt32_t
+
+
+ )
+
+159 
+ #_SS_SIZE
+ 128
+
+ )
+
+160 
+ #_SS_PADSIZE
+ (
+_SS_SIZE
+ - (2 *  (
+__ss_®igÁy³
+)))
+
+ )
+
+162 
+ ssockaddr_¡Üage
+
+
+164
+__SOCKADDR_COMMON
+ (
+ss_
+);
+
+165
+__ss_®igÁy³
+
+ m__ss_®ign
+;
+
+166 
+ m__ss_·ddšg
+[
+_SS_PADSIZE
+];
+
+173
+ mMSG_OOB
+ = 0x01,
+
+174 
+ #MSG_OOB
+
+MSG_OOB
+
+
+ )
+
+175
+ mMSG_PEEK
+ = 0x02,
+
+176 
+ #MSG_PEEK
+
+MSG_PEEK
+
+
+ )
+
+177
+ mMSG_DONTROUTE
+ = 0x04,
+
+178 
+ #MSG_DONTROUTE
+
+MSG_DONTROUTE
+
+
+ )
+
+179 #ifdeà
+__USE_GNU
+
+
+181
+ mMSG_TRYHARD
+ =
+MSG_DONTROUTE
+,
+
+182 
+ #MSG_TRYHARD
+
+MSG_DONTROUTE
+
+
+ )
+
+184
+ mMSG_CTRUNC
+ = 0x08,
+
+185 
+ #MSG_CTRUNC
+
+MSG_CTRUNC
+
+
+ )
+
+186
+ mMSG_PROXY
+ = 0x10,
+
+187 
+ #MSG_PROXY
+
+MSG_PROXY
+
+
+ )
+
+188
+ mMSG_TRUNC
+ = 0x20,
+
+189 
+ #MSG_TRUNC
+
+MSG_TRUNC
+
+
+ )
+
+190
+ mMSG_DONTWAIT
+ = 0x40,
+
+191 
+ #MSG_DONTWAIT
+
+MSG_DONTWAIT
+
+
+ )
+
+192
+ mMSG_EOR
+ = 0x80,
+
+193 
+ #MSG_EOR
+
+MSG_EOR
+
+
+ )
+
+194
+ mMSG_WAITALL
+ = 0x100,
+
+195 
+ #MSG_WAITALL
+
+MSG_WAITALL
+
+
+ )
+
+196
+ mMSG_FIN
+ = 0x200,
+
+197 
+ #MSG_FIN
+
+MSG_FIN
+
+
+ )
+
+198
+ mMSG_SYN
+ = 0x400,
+
+199 
+ #MSG_SYN
+
+MSG_SYN
+
+
+ )
+
+200
+ mMSG_CONFIRM
+ = 0x800,
+
+201 
+ #MSG_CONFIRM
+
+MSG_CONFIRM
+
+
+ )
+
+202
+ mMSG_RST
+ = 0x1000,
+
+203 
+ #MSG_RST
+
+MSG_RST
+
+
+ )
+
+204
+ mMSG_ERRQUEUE
+ = 0x2000,
+
+205 
+ #MSG_ERRQUEUE
+
+MSG_ERRQUEUE
+
+
+ )
+
+206
+ mMSG_NOSIGNAL
+ = 0x4000,
+
+207 
+ #MSG_NOSIGNAL
+
+MSG_NOSIGNAL
+
+
+ )
+
+208
+ mMSG_MORE
+ = 0x8000
+
+209 
+ #MSG_MORE
+
+MSG_MORE
+
+
+ )
+
+215 
+ smsghdr
+
+
+217 *
+ mmsg_Çme
+;
+
+218
+sockËn_t
+
+ mmsg_Çm–’
+;
+
+220 
+iovec
+ *
+ mmsg_iov
+;
+
+221 
+ mmsg_iovËn
+;
+
+223 *
+ mmsg_cÚŒÞ
+;
+
+224
+sockËn_t
+
+ mmsg_cÚŒÞËn
+;
+
+226 
+ mmsg_æags
+;
+
+230 
+ scmsghdr
+
+
+232
+size_t
+
+ mcmsg_Ën
+;
+
+234 
+ mcmsg_Ëv–
+;
+
+235 
+ mcmsg_ty³
+;
+
+236 #ià(!
+defšed
+
+__STRICT_ANSI__
+ &&
+__GNUC__
+ >ð2è||
+__STDC_VERSION__
+ >= 199901L
+
+237
+__ex‹nsiÚ__
+ 
+__cmsg_d©a
+
+ m__æex¬r
+;
+
+242 #ià(!
+defšed
+
+__STRICT_ANSI__
+ &&
+__GNUC__
+ >ð2è||
+__STDC_VERSION__
+ >= 199901L
+
+243 
+ #CMSG_DATA
+(
+cmsg
+è((cmsg)->
+__cmsg_d©a
+)
+
+ )
+
+245 
+ #CMSG_DATA
+(
+cmsg
+è((*è((
+cmsghdr
+ *è(cmsgè+ 1))
+
+ )
+
+247 
+ #CMSG_NXTHDR
+(
+mhdr
+,
+cmsg
+ `__cmsg_nxthdr
+ (mhdr, cmsg)
+
+ )
+
+248 
+ #CMSG_FIRSTHDR
+(
+mhdr
+) \
+
+249 ((
+size_t
+è(
+mhdr
+)->
+msg_cÚŒÞËn
+ >ð (
+cmsghdr
+) \
+
+250 ? (
+cmsghdr
+ *è(
+mhdr
+)->
+msg_cÚŒÞ
+ : (cmsghd¸*è
+NULL
+)
+
+ )
+
+251 
+ #CMSG_ALIGN
+(
+Ën
+è((Ö’è+  (
+size_t
+) - 1) \
+
+252 & (
+size_t
+è~( (size_tè- 1))
+
+ )
+
+253 
+ #CMSG_SPACE
+(
+Ën
+è(
+ `CMSG_ALIGN
+ (len) \
+
+254 +
+ `CMSG_ALIGN
+ ( (
+cmsghdr
+)))
+
+ )
+
+255 
+ #CMSG_LEN
+(
+Ën
+è(
+ `CMSG_ALIGN
+ ( (
+cmsghdr
+)è+ (Ën))
+
+ )
+
+257
+
+cmsghdr
+ *
+ $__cmsg_nxthdr
+ (
+msghdr
+ *
+__mhdr
+,
+
+258 
+cmsghdr
+ *
+__cmsg
+__THROW
+;
+
+259 #ifdeà
+__USE_EXTERN_INLINES
+
+
+260 #iâdeà
+_EXTERN_INLINE
+
+
+261 
+ #_EXTERN_INLINE
+
+__šlše
+
+
+ )
+
+263
+_EXTERN_INLINE
+ 
+cmsghdr
+ *
+
+264
+ $__cmsg_nxthdr
+ (
+msghdr
+ *
+__mhdr
+, 
+cmsghdr
+ *
+__cmsg
+__THROW
+
+
+266 ià((
+size_t
+__cmsg
+->
+cmsg_Ën
+ <  (
+cmsghdr
+))
+
+270
+__cmsg
+ = (
+cmsghdr
+ *) ((*) __cmsg
+
+271 +
+ `CMSG_ALIGN
+ (
+__cmsg
+->
+cmsg_Ën
+));
+
+272 ià((*è(
+__cmsg
+ + 1è> ((*è
+__mhdr
+->
+msg_cÚŒÞ
+
+
+273 +
+__mhdr
+->
+msg_cÚŒÞËn
+)
+
+274 || ((*è
+__cmsg
+ +
+ `CMSG_ALIGN
+ (__cmsg->
+cmsg_Ën
+)
+
+275 > ((*è
+__mhdr
+->
+msg_cÚŒÞ
+ + __mhdr->
+msg_cÚŒÞËn
+)))
+
+278 
+__cmsg
+;
+
+279
+ }
+}
+
+286
+SCM_RIGHTS
+ = 0x01,
+
+287 
+ #SCM_RIGHTS
+
+SCM_RIGHTS
+
+
+ )
+
+288 #ifdeà
+__USE_BSD
+
+
+289
+SCM_CREDENTIALS
+ = 0x02,
+
+290 
+ #SCM_CREDENTIALS
+
+SCM_CREDENTIALS
+
+
+ )
+
+292
+__SCM_CONNECT
+ = 0x03
+
+297 
+ suüed
+
+
+299
+pid_t
+
+ mpid
+;
+
+300
+uid_t
+
+ muid
+;
+
+301
+gid_t
+
+ mgid
+;
+
+305 
+ ~<asm/sock‘.h
+>
+
+309 
+ slšg”
+
+
+311 
+ ml_Úoff
+;
+
+312 
+ ml_lšg”
+;
+
+ @/usr/include/bits/stat.h
+
+19 #iâdeà
+_SYS_STAT_H
+
+
+24 
+ #_STAT_VER_LINUX_OLD
+ 1
+
+ )
+
+25 
+ #_STAT_VER_KERNEL
+ 1
+
+ )
+
+26 
+ #_STAT_VER_SVR4
+ 2
+
+ )
+
+27 
+ #_STAT_VER_LINUX
+ 3
+
+ )
+
+28 
+ #_STAT_VER
+
+_STAT_VER_LINUX
+
+
+ )
+
+31 
+ #_MKNOD_VER_LINUX
+ 1
+
+ )
+
+32 
+ #_MKNOD_VER_SVR4
+ 2
+
+ )
+
+33 
+ #_MKNOD_VER
+
+_MKNOD_VER_LINUX
+
+
+ )
+
+36 
+ s¡©
+
+
+38
+__dev_t
+
+ m¡_dev
+;
+
+39 
+ m__·d1
+;
+
+40 #iâdeà
+__USE_FILE_OFFSET64
+
+
+41
+__šo_t
+
+ m¡_šo
+;
+
+43
+__šo_t
+
+ m__¡_šo
+;
+
+45
+__mode_t
+
+ m¡_mode
+;
+
+46
+__Æšk_t
+
+ m¡_Æšk
+;
+
+47
+__uid_t
+
+ m¡_uid
+;
+
+48
+__gid_t
+
+ m¡_gid
+;
+
+49
+__dev_t
+
+ m¡_rdev
+;
+
+50 
+ m__·d2
+;
+
+51 #iâdeà
+__USE_FILE_OFFSET64
+
+
+52
+__off_t
+
+ m¡_size
+;
+
+54
+__off64_t
+
+ m¡_size
+;
+
+56
+__blksize_t
+
+ m¡_blksize
+;
+
+58 #iâdeà
+__USE_FILE_OFFSET64
+
+
+59
+__blkút_t
+
+ m¡_blocks
+;
+
+61
+__blkút64_t
+
+ m¡_blocks
+;
+
+63
+__time_t
+
+ m¡_©ime
+;
+
+64 
+ m__unu£d1
+;
+
+65
+__time_t
+
+ m¡_mtime
+;
+
+66 
+ m__unu£d2
+;
+
+67
+__time_t
+
+ m¡_ùime
+;
+
+68 
+ m__unu£d3
+;
+
+69 #iâdeà
+__USE_FILE_OFFSET64
+
+
+70 
+ m__unu£d4
+;
+
+71 
+ m__unu£d5
+;
+
+73
+__šo64_t
+
+ m¡_šo
+;
+
+77 #ifdeà
+__USE_LARGEFILE64
+
+
+78 
+ s¡©64
+
+
+80
+__dev_t
+
+ m¡_dev
+;
+
+81 
+ m__·d1
+;
+
+83
+__šo_t
+
+ m__¡_šo
+;
+
+84
+__mode_t
+
+ m¡_mode
+;
+
+85
+__Æšk_t
+
+ m¡_Æšk
+;
+
+86
+__uid_t
+
+ m¡_uid
+;
+
+87
+__gid_t
+
+ m¡_gid
+;
+
+88
+__dev_t
+
+ m¡_rdev
+;
+
+89 
+ m__·d2
+;
+
+90
+__off64_t
+
+ m¡_size
+;
+
+91
+__blksize_t
+
+ m¡_blksize
+;
+
+93
+__blkút64_t
+
+ m¡_blocks
+;
+
+94
+__time_t
+
+ m¡_©ime
+;
+
+95 
+ m__unu£d1
+;
+
+96
+__time_t
+
+ m¡_mtime
+;
+
+97 
+ m__unu£d2
+;
+
+98
+__time_t
+
+ m¡_ùime
+;
+
+99 
+ m__unu£d3
+;
+
+100
+__šo64_t
+
+ m¡_šo
+;
+
+105 
+ #_STATBUF_ST_BLKSIZE
+
+
+ )
+
+106 
+ #_STATBUF_ST_RDEV
+
+
+ )
+
+110 
+ #__S_IFMT
+ 0170000
+
+ )
+
+113 
+ #__S_IFDIR
+ 0040000
+
+ )
+
+114 
+ #__S_IFCHR
+ 0020000
+
+ )
+
+115 
+ #__S_IFBLK
+ 0060000
+
+ )
+
+116 
+ #__S_IFREG
+ 0100000
+
+ )
+
+117 
+ #__S_IFIFO
+ 0010000
+
+ )
+
+118 
+ #__S_IFLNK
+ 0120000
+
+ )
+
+119 
+ #__S_IFSOCK
+ 0140000
+
+ )
+
+123 
+ #__S_TYPEISMQ
+(
+buf
+è((buf)->
+¡_mode
+ - (buf)->¡_mode)
+
+ )
+
+124 
+ #__S_TYPEISSEM
+(
+buf
+è((buf)->
+¡_mode
+ - (buf)->¡_mode)
+
+ )
+
+125 
+ #__S_TYPEISSHM
+(
+buf
+è((buf)->
+¡_mode
+ - (buf)->¡_mode)
+
+ )
+
+129 
+ #__S_ISUID
+ 04000
+
+ )
+
+130 
+ #__S_ISGID
+ 02000
+
+ )
+
+131 
+ #__S_ISVTX
+ 01000
+
+ )
+
+132 
+ #__S_IREAD
+ 0400
+
+ )
+
+133 
+ #__S_IWRITE
+ 0200
+
+ )
+
+134 
+ #__S_IEXEC
+ 0100
+
+ )
+
+ @/usr/include/bits/stdio.h
+
+20 #iâdeà
+_STDIO_H
+
+
+24 #ifdeà
+__ýlu¥lus
+
+
+25 
+ #__STDIO_INLINE
+
+šlše
+
+
+ )
+
+27 
+ #__STDIO_INLINE
+
+__šlše
+
+
+ )
+
+31 #ifdeà
+__USE_EXTERN_INLINES
+
+
+33
+__STDIO_INLINE
+ 
+
+34
+ $v´štf
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__fmt
+,
+_G_va_li¡
+
+__¬g
+__THROW
+
+
+36 
+ `vårštf
+ (
+¡dout
+,
+__fmt
+,
+__¬g
+);
+
+37
+ }
+}
+
+40
+__STDIO_INLINE
+ 
+
+41
+ $g‘ch¬
+ (è
+__THROW
+
+
+43 
+ `_IO_g‘c
+ (
+¡dš
+);
+
+44
+ }
+}
+
+47 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+49
+__STDIO_INLINE
+ 
+
+50
+ $g‘c_uÆocked
+ (
+FILE
+ *
+__å
+__THROW
+
+
+52 
+ `_IO_g‘c_uÆocked
+ (
+__å
+);
+
+53
+ }
+}
+
+56
+__STDIO_INLINE
+ 
+
+57
+ $g‘ch¬_uÆocked
+ (è
+__THROW
+
+
+59 
+ `_IO_g‘c_uÆocked
+ (
+¡dš
+);
+
+60
+ }
+}
+
+65
+__STDIO_INLINE
+ 
+
+66
+ $putch¬
+ (
+__c
+__THROW
+
+
+68 
+ `_IO_putc
+ (
+__c
+,
+¡dout
+);
+
+69
+ }
+}
+
+72 #ifdeà
+__USE_MISC
+
+
+74
+__STDIO_INLINE
+ 
+
+75
+ $åutc_uÆocked
+ (
+__c
+,
+FILE
+ *
+__¡»am
+__THROW
+
+
+77 
+ `_IO_putc_uÆocked
+ (
+__c
+,
+__¡»am
+);
+
+78
+ }
+}
+
+82 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+84
+__STDIO_INLINE
+ 
+
+85
+ $putc_uÆocked
+ (
+__c
+,
+FILE
+ *
+__¡»am
+__THROW
+
+
+87 
+ `_IO_putc_uÆocked
+ (
+__c
+,
+__¡»am
+);
+
+88
+ }
+}
+
+91
+__STDIO_INLINE
+ 
+
+92
+ $putch¬_uÆocked
+ (
+__c
+__THROW
+
+
+94 
+ `_IO_putc_uÆocked
+ (
+__c
+,
+¡dout
+);
+
+95
+ }
+}
+
+99 #ifdef
+__USE_GNU
+
+
+101
+__STDIO_INLINE
+
+_IO_ssize_t
+
+
+102
+ $g‘lše
+ (**
+__lš•Œ
+,
+size_t
+ *
+__n
+,
+FILE
+ *
+__¡»am
+__THROW
+
+
+104 
+ `__g‘d–im
+ (
+__lš•Œ
+,
+__n
+, '\n',
+__¡»am
+);
+
+105
+ }
+}
+
+109 #ifdeà
+__USE_MISC
+
+
+111
+__STDIO_INLINE
+ 
+
+112
+ $ãof_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+
+
+114 
+ `_IO_ãof_uÆocked
+ (
+__¡»am
+);
+
+115
+ }
+}
+
+118
+__STDIO_INLINE
+ 
+
+119
+ $ã¼Ü_uÆocked
+ (
+FILE
+ *
+__¡»am
+__THROW
+
+
+121 
+ `_IO_ã¼Ü_uÆocked
+ (
+__¡»am
+);
+
+122
+ }
+}
+
+128 #ià
+defšed
+
+__USE_MISC
+ && defšed
+__GNUC__
+ && defšed
+__OPTIMIZE__
+
+
+130 
+ #ä—d_uÆocked
+(
+±r
+,
+size
+,
+n
+,
+¡»am
+) \
+
+131 (
+ `__ex‹nsiÚ__
+ ((
+ `__bužtš_cÚ¡ªt_p
+ (
+size
+è&& __bužtš_cÚ¡ªt_°(
+n
+) \
+
+132 && (
+size_t
+è((
+size
+è* (
+n
+)) <= 8 && (size) != 0) \
+
+133 ? ({ *
+__±r
+ = (*è(
+±r
+); \
+
+134
+FILE
+ *
+__¡»am
+ = (
+¡»am
+); \
+
+135
+size_t
+
+__út
+; \
+
+136 
+__út
+ = (
+size
+è* (
+n
+); __cnt > 0; --__cnt) \
+
+138 
+__c
+ =
+ `_IO_g‘c_uÆocked
+ (
+__¡»am
+); \
+
+139 ià(
+__c
+ =ð
+EOF
+) \
+
+141 *
+__±r
+++ =
+__c
+; \
+
+143 ((
+size_t
+è((
+size
+è* (
+n
+)è-
+__út
+) / (size); }) \
+
+144 : (((
+ `__bužtš_cÚ¡ªt_p
+ (
+size
+) && (size) == 0) \
+
+145 || (
+ `__bužtš_cÚ¡ªt_p
+ (
+n
+) && (n) == 0)) \
+
+147 ? ((è(
+±r
+), (è(
+¡»am
+), (è(
+size
+), \
+
+148 (è(
+n
+), 0) \
+
+149 :
+ `ä—d_uÆocked
+ (
+±r
+,
+size
+,
+n
+,
+¡»am
+))))
+
+ )
+
+151 
+ #fwr™e_uÆocked
+(
+±r
+,
+size
+,
+n
+,
+¡»am
+) \
+
+152 (
+ `__ex‹nsiÚ__
+ ((
+ `__bužtš_cÚ¡ªt_p
+ (
+size
+è&& __bužtš_cÚ¡ªt_°(
+n
+) \
+
+153 && (
+size_t
+è((
+size
+è* (
+n
+)) <= 8 && (size) != 0) \
+
+154 ? ({ cÚ¡ *
+__±r
+ = (cÚ¡ *è(
+±r
+); \
+
+155
+FILE
+ *
+__¡»am
+ = (
+¡»am
+); \
+
+156
+size_t
+
+__út
+; \
+
+157 
+__út
+ = (
+size
+è* (
+n
+); __cnt > 0; --__cnt) \
+
+158 ià(
+ `_IO_putc_uÆocked
+ (*
+__±r
+++,
+__¡»am
+è=ð
+EOF
+) \
+
+160 ((
+size_t
+è((
+size
+è* (
+n
+)è-
+__út
+) / (size); }) \
+
+161 : (((
+ `__bužtš_cÚ¡ªt_p
+ (
+size
+) && (size) == 0) \
+
+162 || (
+ `__bužtš_cÚ¡ªt_p
+ (
+n
+) && (n) == 0)) \
+
+164 ? ((è(
+±r
+), (è(
+¡»am
+), (è(
+size
+),
+n
+) \
+
+165 :
+ `fwr™e_uÆocked
+ (
+±r
+,
+size
+,
+n
+,
+¡»am
+))))
+
+ )
+
+169 #undeà
+__STDIO_INLINE
+
+
+ @/usr/include/bits/stdio_lim.h
+
+19 #ià!
+defšed
+
+_STDIO_H
+ && !defšed
+__Ãed_FOPEN_MAX
+ && !defšed
+__Ãed_IOV_MAX
+
+
+23 #ifdeà
+_STDIO_H
+
+
+24 
+ #L_tm²am
+ 20
+
+ )
+
+25 
+ #TMP_MAX
+ 238328
+
+ )
+
+26 
+ #FILENAME_MAX
+ 4096
+
+ )
+
+28 #ifdeà
+__USE_POSIX
+
+
+29 
+ #L_ù”mid
+ 9
+
+ )
+
+30 
+ #L_cu£rid
+ 9
+
+ )
+
+34 #ià
+defšed
+
+__Ãed_FOPEN_MAX
+ || defšed
+_STDIO_H
+
+
+35 #undeà
+FOPEN_MAX
+
+
+36 
+ #FOPEN_MAX
+ 16
+
+ )
+
+39 #ià
+defšed
+
+__Ãed_IOV_MAX
+ && !defšed
+IOV_MAX
+
+
+40 
+ #IOV_MAX
+ 1024
+
+ )
+
+ @/usr/include/bits/string.h
+
+20 #iâdeà
+_STRING_H
+
+
+25 
+ #_STRING_ARCH_uÇligÃd
+ 1
+
+ )
+
+30 #ià!
+defšed
+
+__NO_STRING_INLINES
+ && defšed
+__USE_STRING_INLINES
+ \
+
+31 &&
+defšed
+
+ g__GNUC__
+ && __GNUC__ >ð2 && !
+__BOUNDED_POINTERS__
+
+
+33 #iâdeà
+__STRING_INLINE
+
+
+34 #ifdeà
+__ýlu¥lus
+
+
+35 
+ #__STRING_INLINE
+
+šlše
+
+
+ )
+
+37 
+ #__STRING_INLINE
+
+__šlše
+
+
+ )
+
+43 
+ #_HAVE_STRING_ARCH_memýy
+ 1
+
+ )
+
+44 
+ #memýy
+(
+de¡
+,
+¤c
+,
+n
+) \
+
+45 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+n
+) \
+
+46 ?
+ `__memýy_c
+ (
+de¡
+,
+¤c
+,
+n
+) \
+
+47 :
+ `memýy
+ (
+de¡
+,
+¤c
+,
+n
+)))
+
+ )
+
+50
+__STRING_INLINE
+ *
+__memýy_c
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+,
+
+51
+size_t
+
+__n
+);
+
+53
+__STRING_INLINE
+ *
+
+54
+ $__memýy_c
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+,
+size_t
+
+__n
+)
+
+56 
+__d0
+,
+__d1
+,
+__d2
+;
+
+58 
+__ui
+;
+
+59 
+__usi
+;
+
+60 
+__uc
+;
+
+61 } *
+__u
+ =
+__de¡
+;
+
+62 
+__n
+)
+
+65 
+__de¡
+;
+
+67
+__u
+->
+__uc
+ = *(cÚ¡ *è
+__¤c
+;
+
+68 
+__de¡
+;
+
+70
+__u
+->
+__usi
+ = *(cÚ¡ *è
+__¤c
+;
+
+71 
+__de¡
+;
+
+73
+__u
+->
+__usi
+ = *(cÚ¡ *è
+__¤c
+;
+
+74
+__u
+ = (*) __u + 2;
+
+75
+__u
+->
+__uc
+ = *(2 + (cÚ¡ *è
+__¤c
+);
+
+76 
+__de¡
+;
+
+78
+__u
+->
+__ui
+ = *(cÚ¡ *è
+__¤c
+;
+
+79 
+__de¡
+;
+
+81
+__u
+->
+__ui
+ = *(cÚ¡ *è
+__¤c
+;
+
+82
+__u
+ = (*) __u + 4;
+
+83
+__u
+->
+__usi
+ = *(2 + (cÚ¡ *è
+__¤c
+);
+
+84 
+__de¡
+;
+
+86
+__u
+->
+__ui
+ = *(cÚ¡ *è
+__¤c
+;
+
+87
+__u
+ = (*) __u + 4;
+
+88
+__u
+->
+__ui
+ = *(1 + (cÚ¡ *è
+__¤c
+);
+
+89 
+__de¡
+;
+
+91
+__u
+->
+__ui
+ = *(cÚ¡ *è
+__¤c
+;
+
+92
+__u
+ = (*) __u + 4;
+
+93
+__u
+->
+__ui
+ = *(1 + (cÚ¡ *è
+__¤c
+);
+
+94
+__u
+ = (*) __u + 4;
+
+95
+__u
+->
+__ui
+ = *(2 + (cÚ¡ *è
+__¤c
+);
+
+96 
+__de¡
+;
+
+98
+__u
+->
+__ui
+ = *(cÚ¡ *è
+__¤c
+;
+
+99
+__u
+ = (*) __u + 4;
+
+100
+__u
+->
+__ui
+ = *(1 + (cÚ¡ *è
+__¤c
+);
+
+101
+__u
+ = (*) __u + 4;
+
+102
+__u
+->
+__ui
+ = *(2 + (cÚ¡ *è
+__¤c
+);
+
+103
+__u
+ = (*) __u + 4;
+
+104
+__u
+->
+__ui
+ = *(3 + (cÚ¡ *è
+__¤c
+);
+
+105 
+__de¡
+;
+
+107
+__u
+->
+__ui
+ = *(cÚ¡ *è
+__¤c
+;
+
+108
+__u
+ = (*) __u + 4;
+
+109
+__u
+->
+__ui
+ = *(1 + (cÚ¡ *è
+__¤c
+);
+
+110
+__u
+ = (*) __u + 4;
+
+111
+__u
+->
+__ui
+ = *(2 + (cÚ¡ *è
+__¤c
+);
+
+112
+__u
+ = (*) __u + 4;
+
+113
+__u
+->
+__ui
+ = *(3 + (cÚ¡ *è
+__¤c
+);
+
+114
+__u
+ = (*) __u + 4;
+
+115
+__u
+->
+__ui
+ = *(4 + (cÚ¡ *è
+__¤c
+);
+
+116 
+__de¡
+;
+
+118 
+ #__COMMON_CODE
+(
+x
+) \
+
+119
+__asm__
+
+__vÞ©že__
+ \
+
+122
+x
+ \
+
+123 : "=&c" (
+__d0
+), "=&D" (
+__d1
+), "=&S" (
+__d2
+) \
+
+124 : "0" (
+__n
+ / 4), "1" (&
+__u
+->
+__uc
+), "2" (
+__¤c
+) \
+
+125 : "memÜy");
+
+ )
+
+127 
+__n
+ % 4)
+
+130
+ `__COMMON_CODE
+ ("");
+
+133
+ `__COMMON_CODE
+ ("\n\tmovsb");
+
+136
+ `__COMMON_CODE
+ ("\n\tmovsw");
+
+139
+ `__COMMON_CODE
+ ("\n\tmovsw\n\tmovsb");
+
+142 
+__de¡
+;
+
+143 #undeà
+__COMMON_CODE
+
+
+144
+ }
+}
+
+149 
+ #_HAVE_STRING_ARCH_memmove
+ 1
+
+ )
+
+150 #iâdeà
+_FORCE_INLINES
+
+
+151
+__STRING_INLINE
+ *
+
+152
+ $memmove
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+,
+size_t
+
+__n
+)
+
+154 
+__d0
+,
+__d1
+,
+__d2
+;
+
+155 ià(
+__de¡
+ <
+__¤c
+)
+
+156
+__asm__
+
+__vÞ©že__
+
+
+160 : "=&c" (
+__d0
+), "=&S" (
+__d1
+), "=&D" (
+__d2
+)
+
+161 : "0" (
+__n
+), "1" (
+__¤c
+), "2" (
+__de¡
+)
+
+164
+__asm__
+
+__vÞ©že__
+
+
+169 : "=&c" (
+__d0
+), "=&S" (
+__d1
+), "=&D" (
+__d2
+)
+
+170 : "0" (
+__n
+), "1" (__À- 1 + (cÚ¡ *è
+__¤c
+),
+
+171 "2" (
+__n
+ - 1 + (*è
+__de¡
+)
+
+173 
+__de¡
+;
+
+174
+ }
+}
+
+178 
+ #_HAVE_STRING_ARCH_mem£t
+ 1
+
+ )
+
+179 
+ #_USE_STRING_ARCH_mem£t
+ 1
+
+ )
+
+180 
+ #mem£t
+(
+s
+,
+c
+,
+n
+) \
+
+181 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+c
+) \
+
+182 ? (
+ `__bužtš_cÚ¡ªt_p
+ (
+n
+) \
+
+183 ?
+ `__mem£t_cc
+ (
+s
+, 0x01010101UL * (è(
+c
+),
+n
+) \
+
+184 :
+ `__mem£t_cg
+ (
+s
+, 0x01010101UL * (è(
+c
+),
+n
+))\
+
+185 :
+ `__mem£t_gg
+ (
+s
+,
+c
+,
+n
+)))
+
+ )
+
+187
+__STRING_INLINE
+ *
+__mem£t_cc
+ (*
+__s
+, 
+__·‰”n
+,
+
+188
+size_t
+
+__n
+);
+
+190
+__STRING_INLINE
+ *
+
+191
+ $__mem£t_cc
+ (*
+__s
+, 
+__·‰”n
+,
+size_t
+
+__n
+)
+
+193 
+__d0
+,
+__d1
+;
+
+195 
+__ui
+;
+
+196 
+__usi
+;
+
+197 
+__uc
+;
+
+198 } *
+__u
+ =
+__s
+;
+
+199 
+__n
+)
+
+202 
+__s
+;
+
+204
+__u
+->
+__uc
+ =
+__·‰”n
+;
+
+205 
+__s
+;
+
+207
+__u
+->
+__usi
+ =
+__·‰”n
+;
+
+208 
+__s
+;
+
+210
+__u
+->
+__usi
+ =
+__·‰”n
+;
+
+211
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+212
+__u
+->
+__uc
+ =
+__·‰”n
+;
+
+213 
+__s
+;
+
+215
+__u
+->
+__ui
+ =
+__·‰”n
+;
+
+216 
+__s
+;
+
+218 
+ #__COMMON_CODE
+(
+x
+) \
+
+219
+__asm__
+
+__vÞ©že__
+ \
+
+222
+x
+ \
+
+223 : "=&c" (
+__d0
+), "=&D" (
+__d1
+) \
+
+224 : "a" (
+__·‰”n
+), "0" (
+__n
+ / 4), "1" (&
+__u
+->
+__uc
+) \
+
+225 : "memÜy")
+
+ )
+
+227 
+__n
+ % 4)
+
+230
+ `__COMMON_CODE
+ ("");
+
+233
+ `__COMMON_CODE
+ ("\n\tstosb");
+
+236
+ `__COMMON_CODE
+ ("\n\tstosw");
+
+239
+ `__COMMON_CODE
+ ("\n\tstosw\n\tstosb");
+
+242 
+__s
+;
+
+243 #undeà
+__COMMON_CODE
+
+
+244
+ }
+}
+
+246
+__STRING_INLINE
+ *
+__mem£t_cg
+ (*
+__s
+, 
+__c
+,
+size_t
+
+__n
+);
+
+248
+__STRING_INLINE
+ *
+
+249
+ $__mem£t_cg
+ (*
+__s
+, 
+__c
+,
+size_t
+
+__n
+)
+
+251 
+__d0
+,
+__d1
+;
+
+252
+__asm__
+
+__vÞ©že__
+
+
+263 : "=&c" (
+__d0
+), "=&D" (
+__d1
+)
+
+264 : "a" (
+__c
+), "q" (
+__n
+), "0" (__À/ 4), "1" (
+__s
+)
+
+266 
+__s
+;
+
+267
+ }
+}
+
+269
+__STRING_INLINE
+ *
+__mem£t_gg
+ (*
+__s
+, 
+__c
+,
+size_t
+
+__n
+);
+
+271
+__STRING_INLINE
+ *
+
+272
+ $__mem£t_gg
+ (*
+__s
+, 
+__c
+,
+size_t
+
+__n
+)
+
+274 
+__d0
+,
+__d1
+;
+
+275
+__asm__
+
+__vÞ©že__
+
+
+278 : "=&D" (
+__d0
+), "=&c" (
+__d1
+)
+
+279 : "a" (
+__c
+), "0" (
+__s
+), "1" (
+__n
+)
+
+281 
+__s
+;
+
+282
+ }
+}
+
+288 
+ #_HAVE_STRING_ARCH_memchr
+ 1
+
+ )
+
+289 #iâdeà
+_FORCE_INLINES
+
+
+290
+__STRING_INLINE
+ *
+
+291
+ $memchr
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+,
+size_t
+
+__n
+)
+
+293 
+__d0
+;
+
+294 *
+__»s
+;
+
+295 ià(
+__n
+ == 0)
+
+296 
+NULL
+;
+
+297
+__asm__
+
+__vÞ©že__
+
+
+303 : "=D" (
+__»s
+), "=&c" (
+__d0
+)
+
+304 : "a" (
+__c
+), "0" (
+__s
+), "1" (
+__n
+)
+
+306 
+__»s
+ - 1;
+
+307
+ }
+}
+
+310 
+ #_HAVE_STRING_ARCH_memrchr
+ 1
+
+ )
+
+311 #iâdeà
+_FORCE_INLINES
+
+
+312
+__STRING_INLINE
+ *
+
+313
+ $__memrchr
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+,
+size_t
+
+__n
+)
+
+315 
+__d0
+;
+
+316 *
+__»s
+;
+
+317 ià(
+__n
+ == 0)
+
+318 
+NULL
+;
+
+319
+__asm__
+
+__vÞ©že__
+
+
+325 : "=D" (
+__»s
+), "=&c" (
+__d0
+)
+
+326 : "a" (
+__c
+), "0" (
+__s
+ +
+__n
+ - 1), "1" (__n)
+
+328 
+__»s
+ + 1;
+
+329
+ }
+}
+
+330 #ifdeà
+__USE_GNU
+
+
+331 
+ #memrchr
+(
+s
+,
+c
+,
+n
+ `__memrchr
+ (s, c,‚)
+
+ )
+
+336 
+ #_HAVE_STRING_ARCH_¡¾’
+ 1
+
+ )
+
+337 #iâdeà
+_FORCE_INLINES
+
+
+338
+__STRING_INLINE
+
+size_t
+
+
+339
+ $¡¾’
+ (
+__cÚ¡
+ *
+__¡r
+)
+
+341 
+__d0
+;
+
+342 
+size_t
+
+__»s
+;
+
+343
+__asm__
+
+__vÞ©že__
+
+
+347 : "=c" (
+__»s
+), "=&D" (
+__d0
+)
+
+348 : "1" (
+__¡r
+), "a" (0), "0" (0xffffffff)
+
+350 
+__»s
+ - 1;
+
+351
+ }
+}
+
+355 
+ #_HAVE_STRING_ARCH_¡rýy
+ 1
+
+ )
+
+356 #iâdeà
+_FORCE_INLINES
+
+
+357
+__STRING_INLINE
+ *
+
+358
+ $¡rýy
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+)
+
+360 
+__d0
+,
+__d1
+;
+
+361
+__asm__
+
+__vÞ©že__
+
+
+368 : "=&S" (
+__d0
+), "=&D" (
+__d1
+)
+
+369 : "0" (
+__¤c
+), "1" (
+__de¡
+)
+
+371 
+__de¡
+;
+
+372
+ }
+}
+
+376 
+ #_HAVE_STRING_ARCH_¡ºýy
+ 1
+
+ )
+
+377 #iâdeà
+_FORCE_INLINES
+
+
+378
+__STRING_INLINE
+ *
+
+379
+ $¡ºýy
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+,
+size_t
+
+__n
+)
+
+381 
+__d0
+,
+__d1
+,
+__d2
+;
+
+382
+__asm__
+
+__vÞ©že__
+
+
+393 : "=&S" (
+__d0
+), "=&D" (
+__d1
+), "=&c" (
+__d2
+)
+
+394 : "0" (
+__¤c
+), "1" (
+__de¡
+), "2" (
+__n
+)
+
+396 
+__de¡
+;
+
+397
+ }
+}
+
+401 
+ #_HAVE_STRING_ARCH_¡rÿt
+ 1
+
+ )
+
+402 #iâdeà
+_FORCE_INLINES
+
+
+403
+__STRING_INLINE
+ *
+
+404
+ $¡rÿt
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+)
+
+406 
+__d0
+,
+__d1
+,
+__d2
+,
+__d3
+;
+
+407
+__asm__
+
+__vÞ©že__
+
+
+416 : "=&S" (
+__d0
+), "=&D" (
+__d1
+), "=&c" (
+__d2
+), "=&a" (
+__d3
+)
+
+417 : "0" (
+__¤c
+), "1" (
+__de¡
+), "2" (0xffffffff), "3" (0)
+
+419 
+__de¡
+;
+
+420
+ }
+}
+
+424 
+ #_HAVE_STRING_ARCH_¡ºÿt
+ 1
+
+ )
+
+425 #iâdeà
+_FORCE_INLINES
+
+
+426
+__STRING_INLINE
+ *
+
+427
+ $¡ºÿt
+ (*
+__de¡
+,
+__cÚ¡
+ *
+__¤c
+,
+size_t
+
+__n
+)
+
+429 
+__d0
+,
+__d1
+,
+__d2
+,
+__d3
+;
+
+430
+__asm__
+
+__vÞ©že__
+
+
+447 : "=&S" (
+__d0
+), "=&D" (
+__d1
+), "=&c" (
+__d2
+), "=&a" (
+__d3
+)
+
+448 : "g" (
+__n
+), "0" (
+__¤c
+), "1" (
+__de¡
+), "2" (0xffffffff), "3" (0)
+
+450 
+__de¡
+;
+
+451
+ }
+}
+
+455 
+ #_HAVE_STRING_ARCH_¡rcmp
+ 1
+
+ )
+
+456 #iâdeà
+_FORCE_INLINES
+
+
+457
+__STRING_INLINE
+ 
+
+458
+ $¡rcmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+)
+
+460 
+__d0
+,
+__d1
+;
+
+461 
+__»s
+;
+
+462
+__asm__
+
+__vÞ©že__
+
+
+476 : "÷" (
+__»s
+), "=&S" (
+__d0
+), "=&D" (
+__d1
+)
+
+477 : "1" (
+__s1
+), "2" (
+__s2
+)
+
+479 
+__»s
+;
+
+480
+ }
+}
+
+484 
+ #_HAVE_STRING_ARCH_¡ºcmp
+ 1
+
+ )
+
+485 #iâdeà
+_FORCE_INLINES
+
+
+486
+__STRING_INLINE
+ 
+
+487
+ $¡ºcmp
+ (
+__cÚ¡
+ *
+__s1
+, __cÚ¡ *
+__s2
+,
+size_t
+
+__n
+)
+
+489 
+__d0
+,
+__d1
+,
+__d2
+;
+
+490 
+__»s
+;
+
+491
+__asm__
+
+__vÞ©že__
+
+
+508 : "÷" (
+__»s
+), "=&S" (
+__d0
+), "=&D" (
+__d1
+), "=&c" (
+__d2
+)
+
+509 : "1" (
+__s1
+), "2" (
+__s2
+), "3" (
+__n
+)
+
+511 
+__»s
+;
+
+512
+ }
+}
+
+516 
+ #_HAVE_STRING_ARCH_¡rchr
+ 1
+
+ )
+
+517 
+ #_USE_STRING_ARCH_¡rchr
+ 1
+
+ )
+
+518 
+ #¡rchr
+(
+s
+,
+c
+) \
+
+519 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+c
+) \
+
+520 ?
+ `__¡rchr_c
+ (
+s
+, ((
+c
+) & 0xff) << 8) \
+
+521 :
+ `__¡rchr_g
+ (
+s
+,
+c
+)))
+
+ )
+
+523
+__STRING_INLINE
+ *
+__¡rchr_g
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+);
+
+525
+__STRING_INLINE
+ *
+
+526
+ $__¡rchr_g
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+)
+
+528 
+__d0
+;
+
+529 *
+__»s
+;
+
+530
+__asm__
+
+__vÞ©že__
+
+
+542 : "÷" (
+__»s
+), "=&S" (
+__d0
+)
+
+543 : "0" (
+__c
+), "1" (
+__s
+)
+
+545 
+__»s
+ - 1;
+
+546
+ }
+}
+
+548
+__STRING_INLINE
+ *
+__¡rchr_c
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+);
+
+550
+__STRING_INLINE
+ *
+
+551
+ $__¡rchr_c
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+)
+
+553 
+__d0
+;
+
+554 *
+__»s
+;
+
+555
+__asm__
+
+__vÞ©že__
+
+
+566 : "÷" (
+__»s
+), "=&S" (
+__d0
+)
+
+567 : "0" (
+__c
+), "1" (
+__s
+)
+
+569 
+__»s
+ - 1;
+
+570
+ }
+}
+
+574 
+ #_HAVE_STRING_ARCH_¡rchºul
+ 1
+
+ )
+
+575 
+ #__¡rchºul
+(
+s
+,
+c
+) \
+
+576 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+c
+) \
+
+577 ? ((
+c
+) == '\0' \
+
+578 ? (*è
+ `__¿wmemchr
+ (
+s
+,
+c
+) \
+
+579 :
+ `__¡rchºul_c
+ (
+s
+, ((
+c
+) & 0xff) << 8)) \
+
+580 :
+ `__¡rchºul_g
+ (
+s
+,
+c
+)))
+
+ )
+
+582
+__STRING_INLINE
+ *
+__¡rchºul_g
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+);
+
+584
+__STRING_INLINE
+ *
+
+585
+ $__¡rchºul_g
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+)
+
+587 
+__d0
+;
+
+588 *
+__»s
+;
+
+589
+__asm__
+
+__vÞ©že__
+
+
+600 : "÷" (
+__»s
+), "=&S" (
+__d0
+)
+
+601 : "0" (
+__c
+), "1" (
+__s
+)
+
+603 
+__»s
+ - 1;
+
+604
+ }
+}
+
+606
+__STRING_INLINE
+ *
+__¡rchºul_c
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+);
+
+608
+__STRING_INLINE
+ *
+
+609
+ $__¡rchºul_c
+ (
+__cÚ¡
+ *
+__s
+, 
+__c
+)
+
+611 
+__d0
+;
+
+612 *
+__»s
+;
+
+613
+__asm__
+
+__vÞ©že__
+
+
+623 : "÷" (
+__»s
+), "=&S" (
+__d0
+)
+
+624 : "0" (
+__c
+), "1" (
+__s
+)
+
+626 
+__»s
+ - 1;
+
+627
+ }
+}
+
+628 #ifdeà
+__USE_GNU
+
+
+629 
+ #¡rchºul
+(
+s
+,
+c
+ `__¡rchºul
+ (s, c)
+
+ )
+
+635 
+ #_HAVE_STRING_ARCH_¡rc¥n
+ 1
+
+ )
+
+636 #iâdeà
+_FORCE_INLINES
+
+
+637 #ifdeà
+__PIC__
+
+
+638
+__STRING_INLINE
+
+size_t
+
+
+639
+ $¡rc¥n
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__»jeù
+)
+
+641 
+__d0
+,
+__d1
+,
+__d2
+;
+
+642 *
+__»s
+;
+
+643
+__asm__
+
+__vÞ©že__
+
+
+661 : "=&S" (
+__»s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+662 : "d" (
+__»jeù
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff)
+
+664  (
+__»s
+ - 1è-
+__s
+;
+
+665
+ }
+}
+
+667
+__STRING_INLINE
+
+size_t
+
+
+668
+ $¡rc¥n
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__»jeù
+)
+
+670 
+__d0
+,
+__d1
+,
+__d2
+,
+__d3
+;
+
+671 *
+__»s
+;
+
+672
+__asm__
+
+__vÞ©že__
+
+
+688 : "=&S" (
+__»s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&d" (
+__d2
+), "=&D" (
+__d3
+)
+
+689 : "g" (
+__»jeù
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff)
+
+691  (
+__»s
+ - 1è-
+__s
+;
+
+692
+ }
+}
+
+699 
+ #_HAVE_STRING_ARCH_¡r¥n
+ 1
+
+ )
+
+700 #iâdeà
+_FORCE_INLINES
+
+
+701 #ifdeà
+__PIC__
+
+
+702
+__STRING_INLINE
+
+size_t
+
+
+703
+ $¡r¥n
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__acû±
+)
+
+705 
+__d0
+,
+__d1
+,
+__d2
+;
+
+706 *
+__»s
+;
+
+707
+__asm__
+
+__vÞ©že__
+
+
+725 : "=&S" (
+__»s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+726 : "r" (
+__acû±
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff)
+
+728  (
+__»s
+ - 1è-
+__s
+;
+
+729
+ }
+}
+
+731
+__STRING_INLINE
+
+size_t
+
+
+732
+ $¡r¥n
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__acû±
+)
+
+734 
+__d0
+,
+__d1
+,
+__d2
+,
+__d3
+;
+
+735 *
+__»s
+;
+
+736
+__asm__
+
+__vÞ©že__
+
+
+752 : "=&S" (
+__»s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&d" (
+__d2
+), "=&D" (
+__d3
+)
+
+753 : "g" (
+__acû±
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff)
+
+755  (
+__»s
+ - 1è-
+__s
+;
+
+756
+ }
+}
+
+762 
+ #_HAVE_STRING_ARCH_¡½brk
+ 1
+
+ )
+
+763 #iâdeà
+_FORCE_INLINES
+
+
+764 #ifdeà
+__PIC__
+
+
+765
+__STRING_INLINE
+ *
+
+766
+ $¡½brk
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__acû±
+)
+
+768 
+__d0
+,
+__d1
+,
+__d2
+;
+
+769 *
+__»s
+;
+
+770
+__asm__
+
+__vÞ©že__
+
+
+792 : "=&S" (
+__»s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&D" (
+__d2
+)
+
+793 : "r" (
+__acû±
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff)
+
+795 
+__»s
+;
+
+796
+ }
+}
+
+798
+__STRING_INLINE
+ *
+
+799
+ $¡½brk
+ (
+__cÚ¡
+ *
+__s
+, __cÚ¡ *
+__acû±
+)
+
+801 
+__d0
+,
+__d1
+,
+__d2
+,
+__d3
+;
+
+802 *
+__»s
+;
+
+803
+__asm__
+
+__vÞ©že__
+
+
+823 : "=&S" (
+__»s
+), "=&a" (
+__d0
+), "=&c" (
+__d1
+), "=&d" (
+__d2
+), "=&D" (
+__d3
+)
+
+824 : "g" (
+__acû±
+), "0" (
+__s
+), "1" (0), "2" (0xffffffff)
+
+826 
+__»s
+;
+
+827
+ }
+}
+
+833 
+ #_HAVE_STRING_ARCH_¡r¡r
+ 1
+
+ )
+
+834 #iâdeà
+_FORCE_INLINES
+
+
+835 #ifdeà
+__PIC__
+
+
+836
+__STRING_INLINE
+ *
+
+837
+ $¡r¡r
+ (
+__cÚ¡
+ *
+__hay¡ack
+, __cÚ¡ *
+__ÃedË
+)
+
+839 
+__d0
+,
+__d1
+,
+__d2
+;
+
+840 *
+__»s
+;
+
+841
+__asm__
+
+__vÞ©že__
+
+
+862 : "=&a" (
+__»s
+), "=&c" (
+__d0
+), "=&S" (
+__d1
+), "=&D" (
+__d2
+)
+
+863 : "r" (
+__ÃedË
+), "0" (0), "1" (0xffffffff), "2" (
+__hay¡ack
+)
+
+865 
+__»s
+;
+
+866
+ }
+}
+
+868
+__STRING_INLINE
+ *
+
+869
+ $¡r¡r
+ (
+__cÚ¡
+ *
+__hay¡ack
+, __cÚ¡ *
+__ÃedË
+)
+
+871 
+__d0
+,
+__d1
+,
+__d2
+,
+__d3
+;
+
+872 *
+__»s
+;
+
+873
+__asm__
+
+__vÞ©že__
+
+
+892 : "=&a" (
+__»s
+), "=&c" (
+__d0
+), "=&S" (
+__d1
+), "=&d" (
+__d2
+), "=&D" (
+__d3
+)
+
+893 : "g" (
+__ÃedË
+), "0" (0), "1" (0xffffffff), "2" (
+__hay¡ack
+)
+
+895 
+__»s
+;
+
+896
+ }
+}
+
+900 #iâdeà
+_FORCE_INLINES
+
+
+901 #undeà
+__STRING_INLINE
+
+
+ @/usr/include/bits/string2.h
+
+21 #iâdeà
+_STRING_H
+
+
+25 #ià!
+defšed
+
+__NO_STRING_INLINES
+ && !defšed
+__BOUNDED_POINTERS__
+
+
+42 #iâdeà
+__STRING_INLINE
+
+
+43 #ifdeà
+__ýlu¥lus
+
+
+44 
+ #__STRING_INLINE
+
+šlše
+
+
+ )
+
+46 
+ #__STRING_INLINE
+
+__šlše
+
+
+ )
+
+50 #ià
+_STRING_ARCH_uÇligÃd
+
+
+52 
+ ~<’dŸn.h
+>
+
+53 
+ ~<b™s/ty³s.h
+>
+
+55 #ià
+__BYTE_ORDER
+ =ð
+__LITTLE_ENDIAN
+
+
+56 
+ #__STRING2_SMALL_GET16
+(
+¤c
+,
+idx
+) \
+
+57 (((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+ + 1] << 8 \
+
+58 | ((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+])
+
+ )
+
+59 
+ #__STRING2_SMALL_GET32
+(
+¤c
+,
+idx
+) \
+
+60 (((((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+ + 3] << 8 \
+
+61 | ((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+ + 2]) << 8 \
+
+62 | ((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+ + 1]) << 8 \
+
+63 | ((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+])
+
+ )
+
+65 
+ #__STRING2_SMALL_GET16
+(
+¤c
+,
+idx
+) \
+
+66 (((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+] << 8 \
+
+67 | ((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+ + 1])
+
+ )
+
+68 
+ #__STRING2_SMALL_GET32
+(
+¤c
+,
+idx
+) \
+
+69 (((((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+] << 8 \
+
+70 | ((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+ + 1]) << 8 \
+
+71 | ((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+ + 2]) << 8 \
+
+72 | ((
+__cÚ¡
+ *è(__cÚ¡ *è(
+¤c
+))[
+idx
+ + 3])
+
+ )
+
+77 
+ #__STRING2_COPY_TYPE
+(
+N
+) \
+
+78 ¡ruù { 
+__¬r
+[
+N
+]; } \
+
+79
+ t__STRING2_COPY_ARR
+##
+ tN
+
+ t__©Œibu‹__
+ ((
+ t·cked
+))
+
+ )
+
+80
+ t__STRING2_COPY_TYPE
+ (2);
+
+81
+__STRING2_COPY_TYPE
+ (3);
+
+82
+__STRING2_COPY_TYPE
+ (4);
+
+83
+__STRING2_COPY_TYPE
+ (5);
+
+84
+__STRING2_COPY_TYPE
+ (6);
+
+85
+__STRING2_COPY_TYPE
+ (7);
+
+86
+__STRING2_COPY_TYPE
+ (8);
+
+87 #undeà
+__STRING2_COPY_TYPE
+
+
+93 
+ #__¡ršg2_1b±r_p
+(
+__x
+) \
+
+94 ((
+size_t
+)(cÚ¡ *)((
+__x
+è+ 1è- (size_t)(cÚ¡ *)(__xè=ð1)
+
+ )
+
+97 #iâdeà
+_HAVE_STRING_ARCH_mem£t
+
+
+98 #ià
+_STRING_ARCH_uÇligÃd
+
+
+99 
+ #mem£t
+(
+s
+,
+c
+,
+n
+) \
+
+100 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+n
+) && (n) <= 16 \
+
+101 ? ((
+n
+) == 1 \
+
+102 ?
+ `__mem£t_1
+ (
+s
+,
+c
+) \
+
+103 :
+ `__mem£t_gc
+ (
+s
+,
+c
+,
+n
+)) \
+
+104 : (
+ `__bužtš_cÚ¡ªt_p
+ (
+c
+) && (c) == '\0' \
+
+105 ? ({ *
+__s
+ = (
+s
+);
+ `__bz”o
+ (__s,
+n
+); __s; }) \
+
+106 :
+ `mem£t
+ (
+s
+,
+c
+,
+n
+))))
+
+ )
+
+108 
+ #__mem£t_1
+(
+s
+,
+c
+è({ *
+__s
+ = (s); \
+
+109 *((
+__ušt8_t
+ *è
+__s
+èð(__ušt8_tè
+c
+; __s; })
+
+ )
+
+111 
+ #__mem£t_gc
+(
+s
+,
+c
+,
+n
+) \
+
+112 ({ *
+__s
+ = (
+s
+); \
+
+114 
+__ui
+; \
+
+115 
+__usi
+; \
+
+116 
+__uc
+; \
+
+117 } *
+__u
+ =
+__s
+; \
+
+118
+__ušt8_t
+
+__c
+ = (__ušt8_tè(
+c
+); \
+
+121 (è(
+n
+)) \
+
+124
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+125
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+127
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+128
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+130
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+131
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+133
+__u
+->
+__usi
+ = (è
+__c
+ * 0x0101; \
+
+134
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2); \
+
+135
+__u
+->
+__uc
+ = (è
+__c
+; \
+
+139
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+140
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+142
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+143
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+145
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+146
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+148
+__u
+->
+__usi
+ = (è
+__c
+ * 0x0101; \
+
+152
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+153
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+155
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+156
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+158
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+159
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+161
+__u
+->
+__uc
+ = (è
+__c
+; \
+
+165
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+166
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+168
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+169
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+171
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+172
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4); \
+
+174
+__u
+->
+__ui
+ =
+__c
+ * 0x01010101; \
+
+179
+__s
+; })
+
+ )
+
+181 
+ #mem£t
+(
+s
+,
+c
+,
+n
+) \
+
+182 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+c
+) && (c) == '\0' \
+
+183 ? ({ *
+__s
+ = (
+s
+);
+ `__bz”o
+ (__s,
+n
+); __s; }) \
+
+184 :
+ `mem£t
+ (
+s
+,
+c
+,
+n
+)))
+
+ )
+
+189 #ià
+__GNUC_PREREQ
+ (2, 91)
+
+190 
+ #__bz”o
+(
+s
+,
+n
+ `__bužtš_mem£t
+ (s, '\0',‚)
+
+ )
+
+198 #ifdeà
+__USE_GNU
+
+
+199 #ià!
+defšed
+
+_HAVE_STRING_ARCH_mempýy
+ || defšed
+_FORCE_INLINES
+
+
+200 #iâdeà
+_HAVE_STRING_ARCH_mempýy
+
+
+201 #ià
+__GNUC_PREREQ
+ (3, 0)
+
+202 
+ #__mempýy
+(
+de¡
+,
+¤c
+,
+n
+) \
+
+203 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+è&& __bužtš_cÚ¡ªt_°(
+n
+) \
+
+204 &&
+ `__¡ršg2_1b±r_p
+ (
+¤c
+è&&
+n
+ <= 8 \
+
+205 ?
+ `__bužtš_memýy
+ (
+de¡
+,
+¤c
+,
+n
+) + (n) \
+
+206 :
+ `__mempýy
+ (
+de¡
+,
+¤c
+,
+n
+)))
+
+ )
+
+208 
+ #__mempýy
+(
+de¡
+,
+¤c
+,
+n
+) \
+
+209 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+è&& __bužtš_cÚ¡ªt_°(
+n
+) \
+
+210 &&
+ `__¡ršg2_1b±r_p
+ (
+¤c
+è&&
+n
+ <= 8 \
+
+211 ?
+ `__mempýy_sm®l
+ (
+de¡
+,
+ `__mempýy_¬gs
+ (
+¤c
+),
+n
+) \
+
+212 :
+ `__mempýy
+ (
+de¡
+,
+¤c
+,
+n
+)))
+
+ )
+
+216 
+ #mempýy
+(
+de¡
+,
+¤c
+,
+n
+ `__mempýy
+ (de¡, src,‚)
+
+ )
+
+219 #ià!
+__GNUC_PREREQ
+ (3, 0è||
+defšed
+
+_FORCE_INLINES
+
+
+220 #ià
+_STRING_ARCH_uÇligÃd
+
+
+221 #iâdeà
+_FORCE_INLINES
+
+
+222 
+ #__mempýy_¬gs
+(
+¤c
+) \
+
+223 ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[2], \
+
+224 ((
+__cÚ¡
+ *è(
+¤c
+))[4], ((__const *) (src))[6], \
+
+225
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET16
+ (
+¤c
+, 0), \
+
+226
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET16
+ (
+¤c
+, 4), \
+
+227
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET32
+ (
+¤c
+, 0), \
+
+228
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET32
+ (
+¤c
+, 4)
+
+ )
+
+230
+__STRING_INLINE
+ *
+__mempýy_sm®l
+ (*, , , , ,
+
+231
+__ušt16_t
+, __ušt16_t,
+__ušt32_t
+,
+
+232
+__ušt32_t
+,
+size_t
+);
+
+233
+__STRING_INLINE
+ *
+
+234
+ $__mempýy_sm®l
+ (*
+__de¡1
+,
+
+235 
+__¤c0_1
+, 
+__¤c2_1
+, 
+__¤c4_1
+, 
+__¤c6_1
+,
+
+236
+__ušt16_t
+
+__¤c0_2
+, __ušt16_ˆ
+__¤c4_2
+,
+
+237
+__ušt32_t
+
+__¤c0_4
+, __ušt32_ˆ
+__¤c4_4
+,
+
+238
+size_t
+
+__¤þ’
+)
+
+241
+__ušt32_t
+
+__ui
+;
+
+242
+__ušt16_t
+
+__usi
+;
+
+243 
+__uc
+;
+
+244 
+__c
+;
+
+245 } *
+__u
+ =
+__de¡1
+;
+
+246 (è
+__¤þ’
+)
+
+249
+__u
+->
+__c
+ =
+__¤c0_1
+;
+
+250
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 1);
+
+253
+__u
+->
+__usi
+ =
+__¤c0_2
+;
+
+254
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+257
+__u
+->
+__usi
+ =
+__¤c0_2
+;
+
+258
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+259
+__u
+->
+__c
+ =
+__¤c2_1
+;
+
+260
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 1);
+
+263
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+264
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+267
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+268
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+269
+__u
+->
+__c
+ =
+__¤c4_1
+;
+
+270
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 1);
+
+273
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+274
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+275
+__u
+->
+__usi
+ =
+__¤c4_2
+;
+
+276
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+279
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+280
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+281
+__u
+->
+__usi
+ =
+__¤c4_2
+;
+
+282
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+283
+__u
+->
+__c
+ =
+__¤c6_1
+;
+
+284
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 1);
+
+287
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+288
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+289
+__u
+->
+__ui
+ =
+__¤c4_4
+;
+
+290
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+293  (*è
+__u
+;
+
+294
+ }
+}
+
+296 #iâdeà
+_FORCE_INLINES
+
+
+297 
+ #__mempýy_¬gs
+(
+¤c
+) \
+
+298 ((
+__cÚ¡
+ *è(
+¤c
+))[0], \
+
+299
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR2
+) \
+
+300 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1] } }), \
+
+301
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR3
+) \
+
+302 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+303 ((
+__cÚ¡
+ *è(
+¤c
+))[2] } }), \
+
+304
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR4
+) \
+
+305 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+306 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3] } }), \
+
+307
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR5
+) \
+
+308 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+309 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+310 ((
+__cÚ¡
+ *è(
+¤c
+))[4] } }), \
+
+311
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR6
+) \
+
+312 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+313 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+314 ((
+__cÚ¡
+ *è(
+¤c
+))[4], ((__const *) (src))[5] } }), \
+
+315
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR7
+) \
+
+316 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+317 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+318 ((
+__cÚ¡
+ *è(
+¤c
+))[4], ((__const *) (src))[5], \
+
+319 ((
+__cÚ¡
+ *è(
+¤c
+))[6] } }), \
+
+320
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR8
+) \
+
+321 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+322 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+323 ((
+__cÚ¡
+ *è(
+¤c
+))[4], ((__const *) (src))[5], \
+
+324 ((
+__cÚ¡
+ *è(
+¤c
+))[6], ((__cÚ¡ *è(¤c))[7] } })
+
+ )
+
+326
+__STRING_INLINE
+ *
+__mempýy_sm®l
+ (*, ,
+__STRING2_COPY_ARR2
+,
+
+327
+__STRING2_COPY_ARR3
+,
+
+328
+__STRING2_COPY_ARR4
+,
+
+329
+__STRING2_COPY_ARR5
+,
+
+330
+__STRING2_COPY_ARR6
+,
+
+331
+__STRING2_COPY_ARR7
+,
+
+332
+__STRING2_COPY_ARR8
+,
+size_t
+);
+
+333
+__STRING_INLINE
+ *
+
+334
+ $__mempýy_sm®l
+ (*
+__de¡
+, 
+__¤c1
+,
+
+335
+__STRING2_COPY_ARR2
+
+__¤c2
+,
+__STRING2_COPY_ARR3
+
+__¤c3
+,
+
+336
+__STRING2_COPY_ARR4
+
+__¤c4
+,
+__STRING2_COPY_ARR5
+
+__¤c5
+,
+
+337
+__STRING2_COPY_ARR6
+
+__¤c6
+,
+__STRING2_COPY_ARR7
+
+__¤c7
+,
+
+338
+__STRING2_COPY_ARR8
+
+__¤c8
+,
+size_t
+
+__¤þ’
+)
+
+341 
+__c
+;
+
+342
+__STRING2_COPY_ARR2
+
+__sÿ2
+;
+
+343
+__STRING2_COPY_ARR3
+
+__sÿ3
+;
+
+344
+__STRING2_COPY_ARR4
+
+__sÿ4
+;
+
+345
+__STRING2_COPY_ARR5
+
+__sÿ5
+;
+
+346
+__STRING2_COPY_ARR6
+
+__sÿ6
+;
+
+347
+__STRING2_COPY_ARR7
+
+__sÿ7
+;
+
+348
+__STRING2_COPY_ARR8
+
+__sÿ8
+;
+
+349 } *
+__u
+ =
+__de¡
+;
+
+350 (è
+__¤þ’
+)
+
+353
+__u
+->
+__c
+ =
+__¤c1
+;
+
+356
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ2
+ =
+__¤c2
+;
+
+359
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ3
+ =
+__¤c3
+;
+
+362
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ4
+ =
+__¤c4
+;
+
+365
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ5
+ =
+__¤c5
+;
+
+368
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ6
+ =
+__¤c6
+;
+
+371
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ7
+ =
+__¤c7
+;
+
+374
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ8
+ =
+__¤c8
+;
+
+377 
+ `__ex‹nsiÚ__
+ ((*è
+__u
+ +
+__¤þ’
+);
+
+378
+ }
+}
+
+386 #iâdeà
+_HAVE_STRING_ARCH_¡rchr
+
+
+387
+*
+__¿wmemchr
+ (cÚ¡ *
+__s
+, 
+__c
+);
+
+388 
+ #¡rchr
+(
+s
+,
+c
+) \
+
+389 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+c
+) && (c) == '\0' \
+
+390 ? (*è
+ `__¿wmemchr
+ (
+s
+,
+c
+) \
+
+391 :
+ `¡rchr
+ (
+s
+,
+c
+)))
+
+ )
+
+396 #ià(!
+defšed
+
+_HAVE_STRING_ARCH_¡rýy
+ && !
+__GNUC_PREREQ
+ (3, 0)) \
+
+397 ||
+defšed
+
+ g_FORCE_INLINES
+
+
+398 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡rýy
+ && !
+__GNUC_PREREQ
+ (3, 0)
+
+399 
+ #¡rýy
+(
+de¡
+,
+¤c
+) \
+
+400 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+) \
+
+401 ? (
+ `__¡ršg2_1b±r_p
+ (
+¤c
+è&&
+ `¡¾’
+ (src) + 1 <= 8 \
+
+402 ?
+ `__¡rýy_sm®l
+ (
+de¡
+,
+ `__¡rýy_¬gs
+ (
+¤c
+), \
+
+403
+ `¡¾’
+ (
+¤c
+) + 1) \
+
+404 : (*è
+ `memýy
+ (
+de¡
+,
+¤c
+,
+ `¡¾’
+ (src) + 1)) \
+
+405 :
+ `¡rýy
+ (
+de¡
+,
+¤c
+)))
+
+ )
+
+408 #ià
+_STRING_ARCH_uÇligÃd
+
+
+409 #iâdeà
+_FORCE_INLINES
+
+
+410 
+ #__¡rýy_¬gs
+(
+¤c
+) \
+
+411
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET16
+ (
+¤c
+, 0), \
+
+412
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET16
+ (
+¤c
+, 4), \
+
+413
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET32
+ (
+¤c
+, 0), \
+
+414
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET32
+ (
+¤c
+, 4)
+
+ )
+
+416
+__STRING_INLINE
+ *
+__¡rýy_sm®l
+ (*,
+__ušt16_t
+, __uint16_t,
+
+417
+__ušt32_t
+, __ušt32_t,
+size_t
+);
+
+418
+__STRING_INLINE
+ *
+
+419
+ $__¡rýy_sm®l
+ (*
+__de¡
+,
+
+420
+__ušt16_t
+
+__¤c0_2
+, __ušt16_ˆ
+__¤c4_2
+,
+
+421
+__ušt32_t
+
+__¤c0_4
+, __ušt32_ˆ
+__¤c4_4
+,
+
+422
+size_t
+
+__¤þ’
+)
+
+425
+__ušt32_t
+
+__ui
+;
+
+426
+__ušt16_t
+
+__usi
+;
+
+427 
+__uc
+;
+
+428 } *
+__u
+ = (*è
+__de¡
+;
+
+429 (è
+__¤þ’
+)
+
+432
+__u
+->
+__uc
+ = '\0';
+
+435
+__u
+->
+__usi
+ =
+__¤c0_2
+;
+
+438
+__u
+->
+__usi
+ =
+__¤c0_2
+;
+
+439
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+440
+__u
+->
+__uc
+ = '\0';
+
+443
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+446
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+447
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+448
+__u
+->
+__uc
+ = '\0';
+
+451
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+452
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+453
+__u
+->
+__usi
+ =
+__¤c4_2
+;
+
+456
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+457
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+458
+__u
+->
+__usi
+ =
+__¤c4_2
+;
+
+459
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+460
+__u
+->
+__uc
+ = '\0';
+
+463
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+464
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+465
+__u
+->
+__ui
+ =
+__¤c4_4
+;
+
+468 
+__de¡
+;
+
+469
+ }
+}
+
+471 #iâdeà
+_FORCE_INLINES
+
+
+472 
+ #__¡rýy_¬gs
+(
+¤c
+) \
+
+473
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR2
+) \
+
+474 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], '\0' } }), \
+
+475
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR3
+) \
+
+476 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+478
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR4
+) \
+
+479 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+480 ((
+__cÚ¡
+ *è(
+¤c
+))[2], '\0' } }), \
+
+481
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR5
+) \
+
+482 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+483 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+485
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR6
+) \
+
+486 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+487 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+488 ((
+__cÚ¡
+ *è(
+¤c
+))[4], '\0' } }), \
+
+489
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR7
+) \
+
+490 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+491 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+492 ((
+__cÚ¡
+ *è(
+¤c
+))[4], ((__const *) (src))[5], \
+
+494
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR8
+) \
+
+495 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+496 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+497 ((
+__cÚ¡
+ *è(
+¤c
+))[4], ((__const *) (src))[5], \
+
+498 ((
+__cÚ¡
+ *è(
+¤c
+))[6], '\0' } })
+
+ )
+
+500
+__STRING_INLINE
+ *
+__¡rýy_sm®l
+ (*,
+__STRING2_COPY_ARR2
+,
+
+501
+__STRING2_COPY_ARR3
+,
+
+502
+__STRING2_COPY_ARR4
+,
+
+503
+__STRING2_COPY_ARR5
+,
+
+504
+__STRING2_COPY_ARR6
+,
+
+505
+__STRING2_COPY_ARR7
+,
+
+506
+__STRING2_COPY_ARR8
+,
+size_t
+);
+
+507
+__STRING_INLINE
+ *
+
+508
+ $__¡rýy_sm®l
+ (*
+__de¡
+,
+
+509
+__STRING2_COPY_ARR2
+
+__¤c2
+,
+__STRING2_COPY_ARR3
+
+__¤c3
+,
+
+510
+__STRING2_COPY_ARR4
+
+__¤c4
+,
+__STRING2_COPY_ARR5
+
+__¤c5
+,
+
+511
+__STRING2_COPY_ARR6
+
+__¤c6
+,
+__STRING2_COPY_ARR7
+
+__¤c7
+,
+
+512
+__STRING2_COPY_ARR8
+
+__¤c8
+,
+size_t
+
+__¤þ’
+)
+
+515 
+__c
+;
+
+516
+__STRING2_COPY_ARR2
+
+__sÿ2
+;
+
+517
+__STRING2_COPY_ARR3
+
+__sÿ3
+;
+
+518
+__STRING2_COPY_ARR4
+
+__sÿ4
+;
+
+519
+__STRING2_COPY_ARR5
+
+__sÿ5
+;
+
+520
+__STRING2_COPY_ARR6
+
+__sÿ6
+;
+
+521
+__STRING2_COPY_ARR7
+
+__sÿ7
+;
+
+522
+__STRING2_COPY_ARR8
+
+__sÿ8
+;
+
+523 } *
+__u
+ = (*è
+__de¡
+;
+
+524 (è
+__¤þ’
+)
+
+527
+__u
+->
+__c
+ = '\0';
+
+530
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ2
+ =
+__¤c2
+;
+
+533
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ3
+ =
+__¤c3
+;
+
+536
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ4
+ =
+__¤c4
+;
+
+539
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ5
+ =
+__¤c5
+;
+
+542
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ6
+ =
+__¤c6
+;
+
+545
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ7
+ =
+__¤c7
+;
+
+548
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ8
+ =
+__¤c8
+;
+
+551 
+__de¡
+;
+
+552
+ }
+}
+
+558 #ifdeà
+__USE_GNU
+
+
+559 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡pýy
+ || defšed
+_FORCE_INLINES
+
+
+560 #iâdeà
+_HAVE_STRING_ARCH_¡pýy
+
+
+561 #ià
+__GNUC_PREREQ
+ (3, 0)
+
+562 
+ #__¡pýy
+(
+de¡
+,
+¤c
+) \
+
+563 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+) \
+
+564 ? (
+ `__¡ršg2_1b±r_p
+ (
+¤c
+è&&
+ `¡¾’
+ (src) + 1 <= 8 \
+
+565 ?
+ `__bužtš_¡rýy
+ (
+de¡
+,
+¤c
+è+
+ `¡¾’
+ (src) \
+
+566 : ((*è(
+__mempýy
+è(
+de¡
+,
+¤c
+,
+ `¡¾’
+ (src) + 1) \
+
+568 :
+ `__¡pýy
+ (
+de¡
+,
+¤c
+)))
+
+ )
+
+570 
+ #__¡pýy
+(
+de¡
+,
+¤c
+) \
+
+571 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+) \
+
+572 ? (
+ `__¡ršg2_1b±r_p
+ (
+¤c
+è&&
+ `¡¾’
+ (src) + 1 <= 8 \
+
+573 ?
+ `__¡pýy_sm®l
+ (
+de¡
+,
+ `__¡pýy_¬gs
+ (
+¤c
+), \
+
+574
+ `¡¾’
+ (
+¤c
+) + 1) \
+
+575 : ((*è(
+__mempýy
+è(
+de¡
+,
+¤c
+,
+ `¡¾’
+ (src) + 1) \
+
+577 :
+ `__¡pýy
+ (
+de¡
+,
+¤c
+)))
+
+ )
+
+581 
+ #¡pýy
+(
+de¡
+,
+¤c
+ `__¡pýy
+ (de¡, src)
+
+ )
+
+584 #ià!
+__GNUC_PREREQ
+ (3, 0è||
+defšed
+
+_FORCE_INLINES
+
+
+585 #ià
+_STRING_ARCH_uÇligÃd
+
+
+586 #iâdeà
+_FORCE_INLINES
+
+
+587 
+ #__¡pýy_¬gs
+(
+¤c
+) \
+
+588
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET16
+ (
+¤c
+, 0), \
+
+589
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET16
+ (
+¤c
+, 4), \
+
+590
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET32
+ (
+¤c
+, 0), \
+
+591
+__ex‹nsiÚ__
+
+ `__STRING2_SMALL_GET32
+ (
+¤c
+, 4)
+
+ )
+
+593
+__STRING_INLINE
+ *
+__¡pýy_sm®l
+ (*,
+__ušt16_t
+, __uint16_t,
+
+594
+__ušt32_t
+, __ušt32_t,
+size_t
+);
+
+595
+__STRING_INLINE
+ *
+
+596
+ $__¡pýy_sm®l
+ (*
+__de¡
+,
+
+597
+__ušt16_t
+
+__¤c0_2
+, __ušt16_ˆ
+__¤c4_2
+,
+
+598
+__ušt32_t
+
+__¤c0_4
+, __ušt32_ˆ
+__¤c4_4
+,
+
+599
+size_t
+
+__¤þ’
+)
+
+602 
+__ui
+;
+
+603 
+__usi
+;
+
+604 
+__uc
+;
+
+605 
+__c
+;
+
+606 } *
+__u
+ = (*è
+__de¡
+;
+
+607 (è
+__¤þ’
+)
+
+610
+__u
+->
+__uc
+ = '\0';
+
+613
+__u
+->
+__usi
+ =
+__¤c0_2
+;
+
+614
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 1);
+
+617
+__u
+->
+__usi
+ =
+__¤c0_2
+;
+
+618
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+619
+__u
+->
+__uc
+ = '\0';
+
+622
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+623
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 3);
+
+626
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+627
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+628
+__u
+->
+__uc
+ = '\0';
+
+631
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+632
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+633
+__u
+->
+__usi
+ =
+__¤c4_2
+;
+
+634
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 1);
+
+637
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+638
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+639
+__u
+->
+__usi
+ =
+__¤c4_2
+;
+
+640
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 2);
+
+641
+__u
+->
+__uc
+ = '\0';
+
+644
+__u
+->
+__ui
+ =
+__¤c0_4
+;
+
+645
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 4);
+
+646
+__u
+->
+__ui
+ =
+__¤c4_4
+;
+
+647
+__u
+ =
+ `__ex‹nsiÚ__
+ ((*) __u + 3);
+
+650  &
+__u
+->
+__c
+;
+
+651
+ }
+}
+
+653 #iâdeà
+_FORCE_INLINES
+
+
+654 
+ #__¡pýy_¬gs
+(
+¤c
+) \
+
+655
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR2
+) \
+
+656 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], '\0' } }), \
+
+657
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR3
+) \
+
+658 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+660
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR4
+) \
+
+661 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+662 ((
+__cÚ¡
+ *è(
+¤c
+))[2], '\0' } }), \
+
+663
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR5
+) \
+
+664 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+665 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+667
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR6
+) \
+
+668 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+669 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+670 ((
+__cÚ¡
+ *è(
+¤c
+))[4], '\0' } }), \
+
+671
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR7
+) \
+
+672 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+673 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+674 ((
+__cÚ¡
+ *è(
+¤c
+))[4], ((__const *) (src))[5], \
+
+676
+ `__ex‹nsiÚ__
+ ((
+__STRING2_COPY_ARR8
+) \
+
+677 { { ((
+__cÚ¡
+ *è(
+¤c
+))[0], ((__const *) (src))[1], \
+
+678 ((
+__cÚ¡
+ *è(
+¤c
+))[2], ((__const *) (src))[3], \
+
+679 ((
+__cÚ¡
+ *è(
+¤c
+))[4], ((__const *) (src))[5], \
+
+680 ((
+__cÚ¡
+ *è(
+¤c
+))[6], '\0' } })
+
+ )
+
+682
+__STRING_INLINE
+ *
+__¡pýy_sm®l
+ (*,
+__STRING2_COPY_ARR2
+,
+
+683
+__STRING2_COPY_ARR3
+,
+
+684
+__STRING2_COPY_ARR4
+,
+
+685
+__STRING2_COPY_ARR5
+,
+
+686
+__STRING2_COPY_ARR6
+,
+
+687
+__STRING2_COPY_ARR7
+,
+
+688
+__STRING2_COPY_ARR8
+,
+size_t
+);
+
+689
+__STRING_INLINE
+ *
+
+690
+ $__¡pýy_sm®l
+ (*
+__de¡
+,
+
+691
+__STRING2_COPY_ARR2
+
+__¤c2
+,
+__STRING2_COPY_ARR3
+
+__¤c3
+,
+
+692
+__STRING2_COPY_ARR4
+
+__¤c4
+,
+__STRING2_COPY_ARR5
+
+__¤c5
+,
+
+693
+__STRING2_COPY_ARR6
+
+__¤c6
+,
+__STRING2_COPY_ARR7
+
+__¤c7
+,
+
+694
+__STRING2_COPY_ARR8
+
+__¤c8
+,
+size_t
+
+__¤þ’
+)
+
+697 
+__c
+;
+
+698
+__STRING2_COPY_ARR2
+
+__sÿ2
+;
+
+699
+__STRING2_COPY_ARR3
+
+__sÿ3
+;
+
+700
+__STRING2_COPY_ARR4
+
+__sÿ4
+;
+
+701
+__STRING2_COPY_ARR5
+
+__sÿ5
+;
+
+702
+__STRING2_COPY_ARR6
+
+__sÿ6
+;
+
+703
+__STRING2_COPY_ARR7
+
+__sÿ7
+;
+
+704
+__STRING2_COPY_ARR8
+
+__sÿ8
+;
+
+705 } *
+__u
+ = (*è
+__de¡
+;
+
+706 (è
+__¤þ’
+)
+
+709
+__u
+->
+__c
+ = '\0';
+
+712
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ2
+ =
+__¤c2
+;
+
+715
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ3
+ =
+__¤c3
+;
+
+718
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ4
+ =
+__¤c4
+;
+
+721
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ5
+ =
+__¤c5
+;
+
+724
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ6
+ =
+__¤c6
+;
+
+727
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ7
+ =
+__¤c7
+;
+
+730
+__ex‹nsiÚ__
+
+__u
+->
+__sÿ8
+ =
+__¤c8
+;
+
+733 
+__de¡
+ +
+__¤þ’
+ - 1;
+
+734
+ }
+}
+
+742 #iâdeà
+_HAVE_STRING_ARCH_¡ºýy
+
+
+743 #ià
+defšed
+
+_USE_STRING_ARCH_mem£t
+ && defšed
+_USE_STRING_ARCH_mempýy
+
+
+744 
+ #¡ºýy
+(
+de¡
+,
+¤c
+,
+n
+) \
+
+745 (
+ `__ex‹nsiÚ__
+ ({ *
+__de¡
+ = (
+de¡
+); \
+
+746
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+è&& __bužtš_cÚ¡ªt_°(
+n
+) \
+
+747 ? (
+ `¡¾’
+ (
+¤c
+è+ 1 >ð((
+size_t
+è(
+n
+)) \
+
+748 ? (*è
+ `memýy
+ (
+__de¡
+,
+¤c
+,
+n
+) \
+
+749 : (
+ `mem£t
+ (
+ `__mempýy
+ (
+__de¡
+,
+¤c
+,
+ `¡¾’
+ (src)), \
+
+750 '\0',
+n
+ -
+ `¡¾’
+ (
+¤c
+)), \
+
+751
+__de¡
+)) \
+
+752 :
+ `¡ºýy
+ (
+__de¡
+,
+¤c
+,
+n
+); }))
+
+ )
+
+754 
+ #¡ºýy
+(
+de¡
+,
+¤c
+,
+n
+) \
+
+755 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+è&& __bužtš_cÚ¡ªt_°(
+n
+) \
+
+756 ? (
+ `¡¾’
+ (
+¤c
+è+ 1 >ð((
+size_t
+è(
+n
+)) \
+
+757 ? (*è
+ `memýy
+ (
+de¡
+,
+¤c
+,
+n
+) \
+
+758 :
+ `¡ºýy
+ (
+de¡
+,
+¤c
+,
+n
+)) \
+
+759 :
+ `¡ºýy
+ (
+de¡
+,
+¤c
+,
+n
+)))
+
+ )
+
+765 #iâdeà
+_HAVE_STRING_ARCH_¡ºÿt
+
+
+766 #ifdeà
+_USE_STRING_ARCH_¡rchr
+
+
+767 
+ #¡ºÿt
+(
+de¡
+,
+¤c
+,
+n
+) \
+
+768 (
+ `__ex‹nsiÚ__
+ ({ *
+__de¡
+ = (
+de¡
+); \
+
+769
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+è&& __bužtš_cÚ¡ªt_°(
+n
+) \
+
+770 ? (
+ `¡¾’
+ (
+¤c
+è< ((
+size_t
+è(
+n
+)) \
+
+771 ?
+ `¡rÿt
+ (
+__de¡
+,
+¤c
+) \
+
+772 : (*((*è
+ `__mempýy
+ (
+ `¡rchr
+ (
+__de¡
+, '\0'), \
+
+773
+¤c
+,
+n
+)èð'\0',
+__de¡
+)) \
+
+774 :
+ `¡ºÿt
+ (
+de¡
+,
+¤c
+,
+n
+); }))
+
+ )
+
+776 
+ #¡ºÿt
+(
+de¡
+,
+¤c
+,
+n
+) \
+
+777 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+¤c
+è&& __bužtš_cÚ¡ªt_°(
+n
+) \
+
+778 ? (
+ `¡¾’
+ (
+¤c
+è< ((
+size_t
+è(
+n
+)) \
+
+779 ?
+ `¡rÿt
+ (
+de¡
+,
+¤c
+) \
+
+780 :
+ `¡ºÿt
+ (
+de¡
+,
+¤c
+,
+n
+)) \
+
+781 :
+ `¡ºÿt
+ (
+de¡
+,
+¤c
+,
+n
+)))
+
+ )
+
+787 #iâdeà
+_HAVE_STRING_ARCH_¡rcmp
+
+
+788 
+ #¡rcmp
+(
+s1
+,
+s2
+) \
+
+789
+__ex‹nsiÚ__
+ \
+
+790 ({
+size_t
+
+__s1_Ën
+,
+__s2_Ën
+; \
+
+791 (
+ `__bužtš_cÚ¡ªt_p
+ (
+s1
+è&& __bužtš_cÚ¡ªt_°(
+s2
+) \
+
+792 && (
+__s1_Ën
+ =
+ `¡¾’
+ (
+s1
+),
+__s2_Ën
+ = sŒËÀ(
+s2
+), \
+
+793 (!
+ `__¡ršg2_1b±r_p
+ (
+s1
+è||
+__s1_Ën
+ >= 4) \
+
+794 && (!
+ `__¡ršg2_1b±r_p
+ (
+s2
+è||
+__s2_Ën
+ >= 4)) \
+
+795 ?
+ `memcmp
+ ((
+__cÚ¡
+ *è(
+s1
+), (__cÚ¡ *è(
+s2
+), \
+
+796 (
+__s1_Ën
+ <
+__s2_Ën
+ ? __s1_len : __s2_len) + 1) \
+
+797 : (
+ `__bužtš_cÚ¡ªt_p
+ (
+s1
+è&&
+ `__¡ršg2_1b±r_p
+ (s1) \
+
+798 && (
+__s1_Ën
+ =
+ `¡¾’
+ (
+s1
+), __s1_len < 4) \
+
+799 ? (
+ `__bužtš_cÚ¡ªt_p
+ (
+s2
+è&&
+ `__¡ršg2_1b±r_p
+ (s2) \
+
+800 ?
+ `__¡rcmp_cc
+ (
+s1
+,
+s2
+,
+__s1_Ën
+) \
+
+801 :
+ `__¡rcmp_cg
+ (
+s1
+,
+s2
+,
+__s1_Ën
+)) \
+
+802 : (
+ `__bužtš_cÚ¡ªt_p
+ (
+s2
+è&&
+ `__¡ršg2_1b±r_p
+ (s2) \
+
+803 && (
+__s2_Ën
+ =
+ `¡¾’
+ (
+s2
+), __s2_len < 4) \
+
+804 ? (
+ `__bužtš_cÚ¡ªt_p
+ (
+s1
+è&&
+ `__¡ršg2_1b±r_p
+ (s1) \
+
+805 ?
+ `__¡rcmp_cc
+ (
+s1
+,
+s2
+,
+__s2_Ën
+) \
+
+806 :
+ `__¡rcmp_gc
+ (
+s1
+,
+s2
+,
+__s2_Ën
+)) \
+
+807 :
+ `¡rcmp
+ (
+s1
+,
+s2
+)))); })
+
+ )
+
+809 
+ #__¡rcmp_cc
+(
+s1
+,
+s2
+,
+l
+) \
+
+810 (
+ `__ex‹nsiÚ__
+ ({ 
+__»suÉ
+ = \
+
+811 (((
+__cÚ¡
+ *è(__cÚ¡ *è(
+s1
+))[0] \
+
+812 - ((
+__cÚ¡
+ *è(__cÚ¡ *)(
+s2
+))[0]);\
+
+813 ià(
+l
+ > 0 &&
+__»suÉ
+ == 0) \
+
+815
+__»suÉ
+ = (((
+__cÚ¡
+ *) \
+
+816 (
+__cÚ¡
+ *è(
+s1
+))[1] \
+
+817 - ((
+__cÚ¡
+ *) \
+
+818 (
+__cÚ¡
+ *è(
+s2
+))[1]); \
+
+819 ià(
+l
+ > 1 &&
+__»suÉ
+ == 0) \
+
+821
+__»suÉ
+ = \
+
+822 (((
+__cÚ¡
+ *) \
+
+823 (
+__cÚ¡
+ *è(
+s1
+))[2] \
+
+824 - ((
+__cÚ¡
+ *) \
+
+825 (
+__cÚ¡
+ *è(
+s2
+))[2]); \
+
+826 ià(
+l
+ > 2 &&
+__»suÉ
+ == 0) \
+
+827
+__»suÉ
+ = \
+
+828 (((
+__cÚ¡
+ *) \
+
+829 (
+__cÚ¡
+ *è(
+s1
+))[3] \
+
+830 - ((
+__cÚ¡
+ *) \
+
+831 (
+__cÚ¡
+ *è(
+s2
+))[3]); \
+
+834
+__»suÉ
+; }))
+
+ )
+
+836 
+ #__¡rcmp_cg
+(
+s1
+,
+s2
+,
+l1
+) \
+
+837 (
+ `__ex‹nsiÚ__
+ ({
+__cÚ¡
+ *
+__s2
+ = \
+
+838 (
+__cÚ¡
+ *è(__cÚ¡ *è(
+s2
+); \
+
+839 
+__»suÉ
+ = \
+
+840 (((
+__cÚ¡
+ *è(__cÚ¡ *è(
+s1
+))[0] \
+
+841 -
+__s2
+[0]); \
+
+842 ià(
+l1
+ > 0 &&
+__»suÉ
+ == 0) \
+
+844
+__»suÉ
+ = (((
+__cÚ¡
+ *) \
+
+845 (
+__cÚ¡
+ *è(
+s1
+))[1] -
+__s2
+[1]); \
+
+846 ià(
+l1
+ > 1 &&
+__»suÉ
+ == 0) \
+
+848
+__»suÉ
+ = (((
+__cÚ¡
+ *) \
+
+849 (
+__cÚ¡
+ *è(
+s1
+))[2] -
+__s2
+[2]);\
+
+850 ià(
+l1
+ > 2 &&
+__»suÉ
+ == 0) \
+
+851
+__»suÉ
+ = (((
+__cÚ¡
+ *) \
+
+852 (
+__cÚ¡
+ *è(
+s1
+))[3] \
+
+853 -
+__s2
+[3]); \
+
+856
+__»suÉ
+; }))
+
+ )
+
+858 
+ #__¡rcmp_gc
+(
+s1
+,
+s2
+,
+l2
+) \
+
+859 (
+ `__ex‹nsiÚ__
+ ({
+__cÚ¡
+ *
+__s1
+ = \
+
+860 (
+__cÚ¡
+ *è(__cÚ¡ *è(
+s1
+); \
+
+861 
+__»suÉ
+ = \
+
+862
+__s1
+[0] - ((
+__cÚ¡
+ *) \
+
+863 (
+__cÚ¡
+ *è(
+s2
+))[0]; \
+
+864 ià(
+l2
+ > 0 &&
+__»suÉ
+ == 0) \
+
+866
+__»suÉ
+ = (
+__s1
+[1] \
+
+867 - ((
+__cÚ¡
+ *) \
+
+868 (
+__cÚ¡
+ *è(
+s2
+))[1]); \
+
+869 ià(
+l2
+ > 1 &&
+__»suÉ
+ == 0) \
+
+871
+__»suÉ
+ = \
+
+872 (
+__s1
+[2] - ((
+__cÚ¡
+ *) \
+
+873 (
+__cÚ¡
+ *è(
+s2
+))[2]); \
+
+874 ià(
+l2
+ > 2 &&
+__»suÉ
+ == 0) \
+
+875
+__»suÉ
+ = \
+
+876 (
+__s1
+[3] \
+
+877 - ((
+__cÚ¡
+ *) \
+
+878 (
+__cÚ¡
+ *è(
+s2
+))[3]); \
+
+881
+__»suÉ
+; }))
+
+ )
+
+886 #iâdeà
+_HAVE_STRING_ARCH_¡ºcmp
+
+
+887 
+ #¡ºcmp
+(
+s1
+,
+s2
+,
+n
+) \
+
+888 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+n
+) \
+
+889 && ((
+ `__bužtš_cÚ¡ªt_p
+ (
+s1
+) \
+
+890 &&
+ `¡¾’
+ (
+s1
+è< ((
+size_t
+è(
+n
+))) \
+
+891 || (
+ `__bužtš_cÚ¡ªt_p
+ (
+s2
+) \
+
+892 &&
+ `¡¾’
+ (
+s2
+è< ((
+size_t
+è(
+n
+)))) \
+
+893 ?
+ `¡rcmp
+ (
+s1
+,
+s2
+è:
+ `¡ºcmp
+ (s1, s2,
+n
+)))
+
+ )
+
+899 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡rc¥n
+ || defšed
+_FORCE_INLINES
+
+
+900 #iâdeà
+_HAVE_STRING_ARCH_¡rc¥n
+
+
+901 
+ #¡rc¥n
+(
+s
+,
+»jeù
+) \
+
+902
+__ex‹nsiÚ__
+ \
+
+903 ({ 
+__r0
+,
+__r1
+,
+__r2
+; \
+
+904 (
+ `__bužtš_cÚ¡ªt_p
+ (
+»jeù
+è&&
+ `__¡ršg2_1b±r_p
+ (reject) \
+
+905 ? ((
+__r0
+ = ((
+__cÚ¡
+ *è(
+»jeù
+))[0], __r0 == '\0') \
+
+906 ?
+ `¡¾’
+ (
+s
+) \
+
+907 : ((
+__r1
+ = ((
+__cÚ¡
+ *è(
+»jeù
+))[1], __r1 == '\0') \
+
+908 ?
+ `__¡rc¥n_c1
+ (
+s
+,
+__r0
+) \
+
+909 : ((
+__r2
+ = ((
+__cÚ¡
+ *è(
+»jeù
+))[2], __r2 == '\0') \
+
+910 ?
+ `__¡rc¥n_c2
+ (
+s
+,
+__r0
+,
+__r1
+) \
+
+911 : (((
+__cÚ¡
+ *è(
+»jeù
+))[3] == '\0' \
+
+912 ?
+ `__¡rc¥n_c3
+ (
+s
+,
+__r0
+,
+__r1
+,
+__r2
+) \
+
+913 :
+ `¡rc¥n
+ (
+s
+,
+»jeù
+))))) \
+
+914 :
+ `¡rc¥n
+ (
+s
+,
+»jeù
+)); })
+
+ )
+
+917
+__STRING_INLINE
+
+size_t
+
+__¡rc¥n_c1
+ (
+__cÚ¡
+ *
+__s
+, 
+__»jeù
+);
+
+918
+__STRING_INLINE
+
+size_t
+
+
+919
+ $__¡rc¥n_c1
+ (
+__cÚ¡
+ *
+__s
+, 
+__»jeù
+)
+
+921 
+size_t
+
+__»suÉ
+ = 0;
+
+922 
+__s
+[
+__»suÉ
+] !ð'\0' && __s[__»suÉ] !ð
+__»jeù
+)
+
+923 ++
+__»suÉ
+;
+
+924 
+__»suÉ
+;
+
+925
+ }
+}
+
+927
+__STRING_INLINE
+
+size_t
+
+__¡rc¥n_c2
+ (
+__cÚ¡
+ *
+__s
+, 
+__»jeù1
+,
+
+928 
+__»jeù2
+);
+
+929
+__STRING_INLINE
+
+size_t
+
+
+930
+ $__¡rc¥n_c2
+ (
+__cÚ¡
+ *
+__s
+, 
+__»jeù1
+, 
+__»jeù2
+)
+
+932 
+size_t
+
+__»suÉ
+ = 0;
+
+933 
+__s
+[
+__»suÉ
+] !ð'\0' && __s[__»suÉ] !ð
+__»jeù1
+
+
+934 &&
+__s
+[
+__»suÉ
+] !ð
+__»jeù2
+)
+
+935 ++
+__»suÉ
+;
+
+936 
+__»suÉ
+;
+
+937
+ }
+}
+
+939
+__STRING_INLINE
+
+size_t
+
+__¡rc¥n_c3
+ (
+__cÚ¡
+ *
+__s
+, 
+__»jeù1
+,
+
+940 
+__»jeù2
+, 
+__»jeù3
+);
+
+941
+__STRING_INLINE
+
+size_t
+
+
+942
+ $__¡rc¥n_c3
+ (
+__cÚ¡
+ *
+__s
+, 
+__»jeù1
+, 
+__»jeù2
+,
+
+943 
+__»jeù3
+)
+
+945 
+size_t
+
+__»suÉ
+ = 0;
+
+946 
+__s
+[
+__»suÉ
+] !ð'\0' && __s[__»suÉ] !ð
+__»jeù1
+
+
+947 &&
+__s
+[
+__»suÉ
+] !ð
+__»jeù2
+ && __s[__»suÉ] !ð
+__»jeù3
+)
+
+948 ++
+__»suÉ
+;
+
+949 
+__»suÉ
+;
+
+950
+ }
+}
+
+956 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡r¥n
+ || defšed
+_FORCE_INLINES
+
+
+957 #iâdeà
+_HAVE_STRING_ARCH_¡r¥n
+
+
+958 
+ #¡r¥n
+(
+s
+,
+acû±
+) \
+
+959
+__ex‹nsiÚ__
+ \
+
+960 ({ 
+__a0
+,
+__a1
+,
+__a2
+; \
+
+961 (
+ `__bužtš_cÚ¡ªt_p
+ (
+acû±
+è&&
+ `__¡ršg2_1b±r_p
+ (accept) \
+
+962 ? ((
+__a0
+ = ((
+__cÚ¡
+ *è(
+acû±
+))[0], __a0 == '\0') \
+
+963 ? ((è(
+s
+), 0) \
+
+964 : ((
+__a1
+ = ((
+__cÚ¡
+ *è(
+acû±
+))[1], __a1 == '\0') \
+
+965 ?
+ `__¡r¥n_c1
+ (
+s
+,
+__a0
+) \
+
+966 : ((
+__a2
+ = ((
+__cÚ¡
+ *è(
+acû±
+))[2], __a2 == '\0') \
+
+967 ?
+ `__¡r¥n_c2
+ (
+s
+,
+__a0
+,
+__a1
+) \
+
+968 : (((
+__cÚ¡
+ *è(
+acû±
+))[3] == '\0' \
+
+969 ?
+ `__¡r¥n_c3
+ (
+s
+,
+__a0
+,
+__a1
+,
+__a2
+) \
+
+970 :
+ `¡r¥n
+ (
+s
+,
+acû±
+))))) \
+
+971 :
+ `¡r¥n
+ (
+s
+,
+acû±
+)); })
+
+ )
+
+974
+__STRING_INLINE
+
+size_t
+
+__¡r¥n_c1
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±
+);
+
+975
+__STRING_INLINE
+
+size_t
+
+
+976
+ $__¡r¥n_c1
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±
+)
+
+978 
+size_t
+
+__»suÉ
+ = 0;
+
+980 
+__s
+[
+__»suÉ
+] =ð
+__acû±
+)
+
+981 ++
+__»suÉ
+;
+
+982 
+__»suÉ
+;
+
+983
+ }
+}
+
+985
+__STRING_INLINE
+
+size_t
+
+__¡r¥n_c2
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±1
+,
+
+986 
+__acû±2
+);
+
+987
+__STRING_INLINE
+
+size_t
+
+
+988
+ $__¡r¥n_c2
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±1
+, 
+__acû±2
+)
+
+990 
+size_t
+
+__»suÉ
+ = 0;
+
+992 
+__s
+[
+__»suÉ
+] =ð
+__acû±1
+ || __s[__»suÉ] =ð
+__acû±2
+)
+
+993 ++
+__»suÉ
+;
+
+994 
+__»suÉ
+;
+
+995
+ }
+}
+
+997
+__STRING_INLINE
+
+size_t
+
+__¡r¥n_c3
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±1
+,
+
+998 
+__acû±2
+, 
+__acû±3
+);
+
+999
+__STRING_INLINE
+
+size_t
+
+
+1000
+ $__¡r¥n_c3
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±1
+, 
+__acû±2
+, 
+__acû±3
+)
+
+1002 
+size_t
+
+__»suÉ
+ = 0;
+
+1004 
+__s
+[
+__»suÉ
+] =ð
+__acû±1
+ || __s[__»suÉ] =ð
+__acû±2
+
+
+1005 ||
+__s
+[
+__»suÉ
+] =ð
+__acû±3
+)
+
+1006 ++
+__»suÉ
+;
+
+1007 
+__»suÉ
+;
+
+1008
+ }
+}
+
+1013 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡½brk
+ || defšed
+_FORCE_INLINES
+
+
+1014 #iâdeà
+_HAVE_STRING_ARCH_¡½brk
+
+
+1015 
+ #¡½brk
+(
+s
+,
+acû±
+) \
+
+1016
+__ex‹nsiÚ__
+ \
+
+1017 ({ 
+__a0
+,
+__a1
+,
+__a2
+; \
+
+1018 (
+ `__bužtš_cÚ¡ªt_p
+ (
+acû±
+è&&
+ `__¡ršg2_1b±r_p
+ (accept) \
+
+1019 ? ((
+__a0
+ = ((
+__cÚ¡
+ *è(
+acû±
+))[0], __a0 == '\0') \
+
+1020 ? ((è(
+s
+),
+NULL
+) \
+
+1021 : ((
+__a1
+ = ((
+__cÚ¡
+ *è(
+acû±
+))[1], __a1 == '\0') \
+
+1022 ?
+ `¡rchr
+ (
+s
+,
+__a0
+) \
+
+1023 : ((
+__a2
+ = ((
+__cÚ¡
+ *è(
+acû±
+))[2], __a2 == '\0') \
+
+1024 ?
+ `__¡½brk_c2
+ (
+s
+,
+__a0
+,
+__a1
+) \
+
+1025 : (((
+__cÚ¡
+ *è(
+acû±
+))[3] == '\0' \
+
+1026 ?
+ `__¡½brk_c3
+ (
+s
+,
+__a0
+,
+__a1
+,
+__a2
+) \
+
+1027 :
+ `¡½brk
+ (
+s
+,
+acû±
+))))) \
+
+1028 :
+ `¡½brk
+ (
+s
+,
+acû±
+)); })
+
+ )
+
+1031
+__STRING_INLINE
+ *
+__¡½brk_c2
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±1
+,
+
+1032 
+__acû±2
+);
+
+1033
+__STRING_INLINE
+ *
+
+1034
+ $__¡½brk_c2
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±1
+, 
+__acû±2
+)
+
+1037 *
+__s
+ !ð'\0' && *__ !ð
+__acû±1
+ && *__ !ð
+__acû±2
+)
+
+1038 ++
+__s
+;
+
+1039  *
+__s
+ =ð'\0' ?
+NULL
+ : (*è(
+size_t
+) __s;
+
+1040
+ }
+}
+
+1042
+__STRING_INLINE
+ *
+__¡½brk_c3
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±1
+,
+
+1043 
+__acû±2
+, 
+__acû±3
+);
+
+1044
+__STRING_INLINE
+ *
+
+1045
+ $__¡½brk_c3
+ (
+__cÚ¡
+ *
+__s
+, 
+__acû±1
+, 
+__acû±2
+,
+
+1046 
+__acû±3
+)
+
+1049 *
+__s
+ !ð'\0' && *__ !ð
+__acû±1
+ && *__ !ð
+__acû±2
+
+
+1050 && *
+__s
+ !ð
+__acû±3
+)
+
+1051 ++
+__s
+;
+
+1052  *
+__s
+ =ð'\0' ?
+NULL
+ : (*è(
+size_t
+) __s;
+
+1053
+ }
+}
+
+1059 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡r¡r
+ && !
+__GNUC_PREREQ
+ (2, 97)
+
+1060 
+ #¡r¡r
+(
+hay¡ack
+,
+ÃedË
+) \
+
+1061 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+ÃedË
+è&&
+ `__¡ršg2_1b±r_p
+ (needle) \
+
+1062 ? (((
+__cÚ¡
+ *è(
+ÃedË
+))[0] == '\0' \
+
+1063 ? (*è(
+size_t
+è(
+hay¡ack
+) \
+
+1064 : (((
+__cÚ¡
+ *è(
+ÃedË
+))[1] == '\0' \
+
+1065 ?
+ `¡rchr
+ (
+hay¡ack
+, \
+
+1066 ((
+__cÚ¡
+ *è(
+ÃedË
+))[0]) \
+
+1067 :
+ `¡r¡r
+ (
+hay¡ack
+,
+ÃedË
+))) \
+
+1068 :
+ `¡r¡r
+ (
+hay¡ack
+,
+ÃedË
+)))
+
+ )
+
+1072 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡¹ok_r
+ || defšed
+_FORCE_INLINES
+
+
+1073 #iâdeà
+_HAVE_STRING_ARCH_¡¹ok_r
+
+
+1074 
+ #__¡¹ok_r
+(
+s
+,
+£p
+,
+Ãx
+) \
+
+1075 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+£p
+è&&
+ `__¡ršg2_1b±r_p
+ (sep) \
+
+1076 ? (((
+__cÚ¡
+ *è(
+£p
+))[0] != '\0' \
+
+1077 && ((
+__cÚ¡
+ *è(
+£p
+))[1] == '\0' \
+
+1078 ?
+ `__¡¹ok_r_1c
+ (
+s
+, ((
+__cÚ¡
+ *è(
+£p
+))[0],
+Ãx
+) \
+
+1079 :
+ `__¡¹ok_r
+ (
+s
+,
+£p
+,
+Ãx
+)) \
+
+1080 :
+ `__¡¹ok_r
+ (
+s
+,
+£p
+,
+Ãx
+)))
+
+ )
+
+1083
+__STRING_INLINE
+ *
+__¡¹ok_r_1c
+ (*
+__s
+, 
+__£p
+, **
+__Ãx
+);
+
+1084
+__STRING_INLINE
+ *
+
+1085
+ $__¡¹ok_r_1c
+ (*
+__s
+, 
+__£p
+, **
+__Ãx
+)
+
+1087 *
+__»suÉ
+;
+
+1088 ià(
+__s
+ =ð
+NULL
+)
+
+1089
+__s
+ = *
+__Ãx
+;
+
+1090 *
+__s
+ =ð
+__£p
+)
+
+1091 ++
+__s
+;
+
+1092
+__»suÉ
+ =
+NULL
+;
+
+1093 ià(*
+__s
+ != '\0')
+
+1095
+__»suÉ
+ =
+__s
+++;
+
+1096 *
+__s
+ != '\0')
+
+1097 ià(*
+__s
+++ =ð
+__£p
+)
+
+1099
+__s
+[-1] = '\0';
+
+1102 *
+__Ãx
+ =
+__s
+;
+
+1104 
+__»suÉ
+;
+
+1105
+ }
+}
+
+1106 #ià
+defšed
+
+__USE_POSIX
+ || defšed
+__USE_MISC
+
+
+1107 
+ #¡¹ok_r
+(
+s
+,
+£p
+,
+Ãx
+ `__¡¹ok_r
+ (s, s•,‚ex)
+
+ )
+
+1112 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡r£p
+ || defšed
+_FORCE_INLINES
+
+
+1113 #iâdeà
+_HAVE_STRING_ARCH_¡r£p
+
+
+1115
+*
+__¡r£p_g
+ (**
+__¡ršgp
+,
+__cÚ¡
+ *
+__d–im
+);
+
+1116 
+ #__¡r£p
+(
+s
+,
+»jeù
+) \
+
+1117
+__ex‹nsiÚ__
+ \
+
+1118 ({ 
+__r0
+,
+__r1
+,
+__r2
+; \
+
+1119 (
+ `__bužtš_cÚ¡ªt_p
+ (
+»jeù
+è&&
+ `__¡ršg2_1b±r_p
+ (reject) \
+
+1120 && (
+__r0
+ = ((
+__cÚ¡
+ *è(
+»jeù
+))[0], \
+
+1121 ((
+__cÚ¡
+ *è(
+»jeù
+))[0] != '\0') \
+
+1122 ? ((
+__r1
+ = ((
+__cÚ¡
+ *è(
+»jeù
+))[1], \
+
+1123 ((
+__cÚ¡
+ *è(
+»jeù
+))[1] == '\0') \
+
+1124 ?
+ `__¡r£p_1c
+ (
+s
+,
+__r0
+) \
+
+1125 : ((
+__r2
+ = ((
+__cÚ¡
+ *è(
+»jeù
+))[2], __r2 == '\0') \
+
+1126 ?
+ `__¡r£p_2c
+ (
+s
+,
+__r0
+,
+__r1
+) \
+
+1127 : (((
+__cÚ¡
+ *è(
+»jeù
+))[3] == '\0' \
+
+1128 ?
+ `__¡r£p_3c
+ (
+s
+,
+__r0
+,
+__r1
+,
+__r2
+) \
+
+1129 :
+ `__¡r£p_g
+ (
+s
+,
+»jeù
+)))) \
+
+1130 :
+ `__¡r£p_g
+ (
+s
+,
+»jeù
+)); })
+
+ )
+
+1133
+__STRING_INLINE
+ *
+__¡r£p_1c
+ (**
+__s
+, 
+__»jeù
+);
+
+1134
+__STRING_INLINE
+ *
+
+1135
+ $__¡r£p_1c
+ (**
+__s
+, 
+__»jeù
+)
+
+1137 *
+__»tv®
+ = *
+__s
+;
+
+1138 ià(
+__»tv®
+ !ð
+NULL
+ && (*
+__s
+ =
+ `¡rchr
+ (__»tv®,
+__»jeù
+)) != NULL)
+
+1139 *(*
+__s
+)++ = '\0';
+
+1140 
+__»tv®
+;
+
+1141
+ }
+}
+
+1143
+__STRING_INLINE
+ *
+__¡r£p_2c
+ (**
+__s
+, 
+__»jeù1
+, 
+__»jeù2
+);
+
+1144
+__STRING_INLINE
+ *
+
+1145
+ $__¡r£p_2c
+ (**
+__s
+, 
+__»jeù1
+, 
+__»jeù2
+)
+
+1147 *
+__»tv®
+ = *
+__s
+;
+
+1148 ià(
+__»tv®
+ !ð
+NULL
+)
+
+1150 *
+__ý
+ =
+__»tv®
+;
+
+1153 ià(*
+__ý
+ == '\0')
+
+1155
+__ý
+ =
+NULL
+;
+
+1158 ià(*
+__ý
+ =ð
+__»jeù1
+ || *__ý =ð
+__»jeù2
+)
+
+1160 *
+__ý
+++ = '\0';
+
+1163 ++
+__ý
+;
+
+1165 *
+__s
+ =
+__ý
+;
+
+1167 
+__»tv®
+;
+
+1168
+ }
+}
+
+1170
+__STRING_INLINE
+ *
+__¡r£p_3c
+ (**
+__s
+, 
+__»jeù1
+, 
+__»jeù2
+,
+
+1171 
+__»jeù3
+);
+
+1172
+__STRING_INLINE
+ *
+
+1173
+ $__¡r£p_3c
+ (**
+__s
+, 
+__»jeù1
+, 
+__»jeù2
+, 
+__»jeù3
+)
+
+1175 *
+__»tv®
+ = *
+__s
+;
+
+1176 ià(
+__»tv®
+ !ð
+NULL
+)
+
+1178 *
+__ý
+ =
+__»tv®
+;
+
+1181 ià(*
+__ý
+ == '\0')
+
+1183
+__ý
+ =
+NULL
+;
+
+1186 ià(*
+__ý
+ =ð
+__»jeù1
+ || *__ý =ð
+__»jeù2
+ || *__ý =ð
+__»jeù3
+)
+
+1188 *
+__ý
+++ = '\0';
+
+1191 ++
+__ý
+;
+
+1193 *
+__s
+ =
+__ý
+;
+
+1195 
+__»tv®
+;
+
+1196
+ }
+}
+
+1197 #ifdeà
+__USE_BSD
+
+
+1198 
+ #¡r£p
+(
+s
+,
+»jeù
+ `__¡r£p
+ (s,„ejeù)
+
+ )
+
+1205 #ifdeà
+__USE_MISC
+
+
+1207 #ià!
+defšed
+
+_HAVE_STRING_ARCH_¡rdup
+ || !defšed
+_HAVE_STRING_ARCH_¡ºdup
+
+
+1208 
+ #__Ãed_m®loc_ªd_ÿÎoc
+
+
+ )
+
+1209 
+ ~<¡dlib.h
+>
+
+1212 #iâdeà
+_HAVE_STRING_ARCH_¡rdup
+
+
+1214
+*
+ $__¡rdup
+ (
+__cÚ¡
+ *
+__¡ršg
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+1215 
+ #__¡rdup
+(
+s
+) \
+
+1216 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+s
+è&&
+ `__¡ršg2_1b±r_p
+ (s) \
+
+1217 ? (((
+__cÚ¡
+ *è(
+s
+))[0] == '\0' \
+
+1218 ? (*è
+ `ÿÎoc
+ (1, 1) \
+
+1219 : ({
+size_t
+
+__Ën
+ =
+ `¡¾’
+ (
+s
+) + 1; \
+
+1220 *
+__»tv®
+ = (*è
+ `m®loc
+ (
+__Ën
+); \
+
+1221 ià(
+__»tv®
+ !ð
+NULL
+) \
+
+1222
+__»tv®
+ = (*è
+ `memýy
+ (__»tv®,
+s
+,
+__Ën
+); \
+
+1223
+__»tv®
+;
+ }
+})) \
+
+1224 :
+ `__¡rdup
+ (
+s
+)))
+
+ )
+
+1226 #ià
+defšed
+
+__USE_SVID
+ || defšed
+__USE_BSD
+ || defšed
+__USE_XOPEN_EXTENDED
+
+
+1227 
+ #¡rdup
+(
+s
+ `__¡rdup
+ (s)
+
+ )
+
+1231 #iâdeà
+_HAVE_STRING_ARCH_¡ºdup
+
+
+1233
+*
+ $__¡ºdup
+ (
+__cÚ¡
+ *
+__¡ršg
+,
+size_t
+
+__n
+)
+
+1234
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+1235 
+ #__¡ºdup
+(
+s
+,
+n
+) \
+
+1236 (
+ `__ex‹nsiÚ__
+ (
+ `__bužtš_cÚ¡ªt_p
+ (
+s
+è&&
+ `__¡ršg2_1b±r_p
+ (s) \
+
+1237 ? (((
+__cÚ¡
+ *è(
+s
+))[0] == '\0' \
+
+1238 ? (*è
+ `ÿÎoc
+ (1, 1) \
+
+1239 : ({
+size_t
+
+__Ën
+ =
+ `¡¾’
+ (
+s
+) + 1; \
+
+1240
+size_t
+
+__n
+ = (
+n
+); \
+
+1241 *
+__»tv®
+; \
+
+1242 ià(
+__n
+ <
+__Ën
+) \
+
+1243
+__Ën
+ =
+__n
+ + 1; \
+
+1244
+__»tv®
+ = (*è
+ `m®loc
+ (
+__Ën
+); \
+
+1245 ià(
+__»tv®
+ !ð
+NULL
+) \
+
+1247
+__»tv®
+[
+__Ën
+ - 1] = '\0'; \
+
+1248
+__»tv®
+ = (*è
+ `memýy
+ (__»tv®,
+s
+, \
+
+1249
+__Ën
+ - 1); \
+
+1251
+__»tv®
+;
+ }
+})) \
+
+1252 :
+ `__¡ºdup
+ (
+s
+,
+n
+)))
+
+ )
+
+1254 #ifdeà
+__USE_GNU
+
+
+1255 
+ #¡ºdup
+(
+s
+,
+n
+ `__¡ºdup
+ (s,‚)
+
+ )
+
+1261 #iâdeà
+_FORCE_INLINES
+
+
+1262 #undeà
+__STRING_INLINE
+
+
+ @/usr/include/bits/time.h
+
+24 #iâdeà
+__Ãed_timev®
+
+
+25 #iâdeà
+_BITS_TIME_H
+
+
+26 
+ #_BITS_TIME_H
+ 1
+
+ )
+
+34 
+ #CLOCKS_PER_SEC
+ 1000000l
+
+ )
+
+36 #ià!
+defšed
+
+__STRICT_ANSI__
+ && !defšed
+__USE_XOPEN2K
+
+
+39 
+ ~<b™s/ty³s.h
+>
+
+40
+
+__syscÚf
+ ();
+
+41 
+ #CLK_TCK
+ ((
+__þock_t
+ `__syscÚf
+ (2)è
+
+ )
+
+44 #ifdeà
+__USE_POSIX199309
+
+
+46 
+ #CLOCK_REALTIME
+ 0
+
+ )
+
+48 
+ #CLOCK_PROCESS_CPUTIME_ID
+ 2
+
+ )
+
+50 
+ #CLOCK_THREAD_CPUTIME_ID
+ 3
+
+ )
+
+53 
+ #TIMER_ABSTIME
+ 1
+
+ )
+
+59 #ifdeà
+__Ãed_timev®
+
+
+60 #undeà
+__Ãed_timev®
+
+
+61 #iâdeà
+_STRUCT_TIMEVAL
+
+
+62 
+ #_STRUCT_TIMEVAL
+ 1
+
+ )
+
+63 
+ ~<b™s/ty³s.h
+>
+
+67 
+ stimev®
+
+
+69
+__time_t
+
+ mtv_£c
+;
+
+70
+__su£cÚds_t
+
+ mtv_u£c
+;
+
+ @/usr/include/bits/types.h
+
+23 #iâdef
+_BITS_TYPES_H
+
+
+24 
+ #_BITS_TYPES_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+28 
+ #__Ãed_size_t
+
+
+ )
+
+29 
+ ~<¡ddef.h
+>
+
+32 
+ t__u_ch¬
+;
+
+33 
+ t__u_shÜt
+;
+
+34 
+ t__u_št
+;
+
+35 
+ t__u_lÚg
+;
+
+36 #ifdeà
+__GLIBC_HAVE_LONG_LONG
+
+
+37
+__ex‹nsiÚ__
+ 
+ t__u_quad_t
+;
+
+38
+__ex‹nsiÚ__
+ 
+ t__quad_t
+;
+
+42 
+ m__v®
+[2];
+
+43 }
+ t__quad_t
+;
+
+46
+__u_lÚg
+
+ m__v®
+[2];
+
+47 }
+ t__u_quad_t
+;
+
+49 sigÃd 
+ t__št8_t
+;
+
+50 
+ t__ušt8_t
+;
+
+51 sigÃd 
+ t__št16_t
+;
+
+52 
+ t__ušt16_t
+;
+
+53 sigÃd 
+ t__št32_t
+;
+
+54 
+ t__ušt32_t
+;
+
+55 #ifdeà
+__GLIBC_HAVE_LONG_LONG
+
+
+56
+__ex‹nsiÚ__
+ sigÃd 
+ t__št64_t
+;
+
+57
+__ex‹nsiÚ__
+ 
+ t__ušt64_t
+;
+
+59 
+__quad_t
+ *
+ t__qaddr_t
+;
+
+61 
+__u_quad_t
+
+ t__dev_t
+;
+
+62 
+__u_št
+
+ t__uid_t
+;
+
+63 
+__u_št
+
+ t__gid_t
+;
+
+64 
+__u_lÚg
+
+ t__šo_t
+;
+
+65 
+__u_št
+
+ t__mode_t
+;
+
+66 
+__u_št
+
+ t__Æšk_t
+;
+
+67 
+ t__off_t
+;
+
+68 
+__quad_t
+
+ t__loff_t
+;
+
+69 
+ t__pid_t
+;
+
+70 
+ t__ssize_t
+;
+
+71 
+__u_lÚg
+
+ t__¾im_t
+;
+
+72 
+__u_quad_t
+
+ t__¾im64_t
+;
+
+73 
+__u_št
+
+ t__id_t
+;
+
+77 
+ m__v®
+[2];
+
+78 }
+ t__fsid_t
+;
+
+81 
+ t__daddr_t
+;
+
+82 *
+ t__ÿddr_t
+;
+
+83 
+ t__time_t
+;
+
+84 
+ t__u£cÚds_t
+;
+
+85 
+ t__su£cÚds_t
+;
+
+86 
+ t__swblk_t
+;
+
+88 
+ t__þock_t
+;
+
+91 
+ t__þockid_t
+;
+
+94 
+ t__tim”_t
+;
+
+98 
+ #__FD_SETSIZE
+ 1024
+
+ )
+
+101 
+ t__key_t
+;
+
+104 
+ t__c_pid_t
+;
+
+108 
+ t__blksize_t
+;
+
+113 
+ t__blkút_t
+;
+
+114 
+__quad_t
+
+ t__blkút64_t
+;
+
+117 
+__u_lÚg
+
+ t__fsblkút_t
+;
+
+118 
+__u_quad_t
+
+ t__fsblkút64_t
+;
+
+121 
+__u_lÚg
+
+ t__fsfžút_t
+;
+
+122 
+__u_quad_t
+
+ t__fsfžút64_t
+;
+
+125 
+__u_quad_t
+
+ t__šo64_t
+;
+
+128 
+__loff_t
+
+ t__off64_t
+;
+
+131 
+ t__t_sÿÏr_t
+;
+
+132 
+ t__t_usÿÏr_t
+;
+
+135 
+ t__šŒ_t
+;
+
+138 
+ t__sockËn_t
+;
+
+142 #ià
+defšed
+
+__USE_POSIX199506
+ || defšed
+__USE_UNIX98
+
+
+143 
+ ~<b™s/±h»adty³s.h
+>
+
+ @/usr/include/bits/waitflags.h
+
+20 #ià!
+defšed
+
+_SYS_WAIT_H
+ && !defšed
+_STDLIB_H
+
+
+26 
+ #WNOHANG
+ 1
+
+ )
+
+27 
+ #WUNTRACED
+ 2
+
+ )
+
+29 
+ #__WALL
+ 0x40000000
+
+ )
+
+30 
+ #__WCLONE
+ 0x80000000
+
+ )
+
+ @/usr/include/bits/waitstatus.h
+
+20 #ià!
+defšed
+
+_SYS_WAIT_H
+ && !defšed
+_STDLIB_H
+
+
+29 
+ #__WEXITSTATUS
+(
+¡©us
+è(((¡©usè& 0xff00è>> 8)
+
+ )
+
+32 
+ #__WTERMSIG
+(
+¡©us
+è((¡©usè& 0x7f)
+
+ )
+
+35 
+ #__WSTOPSIG
+(
+¡©us
+ `__WEXITSTATUS
+(¡©us)
+
+ )
+
+38 
+ #__WIFEXITED
+(
+¡©us
+è(
+ `__WTERMSIG
+(¡©usè=ð0)
+
+ )
+
+41 #ifdef
+__GNUC__
+
+
+42 
+ #__WIFSIGNALED
+(
+¡©us
+) \
+
+43 (
+ `__ex‹nsiÚ__
+ ({ 
+__¡©us
+ = (
+¡©us
+); \
+
+44 !
+ `__WIFSTOPPED
+(
+__¡©us
+è&& !
+ `__WIFEXITED
+(__¡©us); }))
+
+ )
+
+46 
+ #__WIFSIGNALED
+(
+¡©us
+è(!
+ `__WIFSTOPPED
+(¡©usè&& !
+ `__WIFEXITED
+(¡©us))
+
+ )
+
+50 
+ #__WIFSTOPPED
+(
+¡©us
+è(((¡©usè& 0xffè=ð0x7f)
+
+ )
+
+53 
+ #__WCOREDUMP
+(
+¡©us
+è((¡©usè&
+__WCOREFLAG
+)
+
+ )
+
+56 
+ #__W_EXITCODE
+(
+»t
+,
+sig
+è(Ô‘è<< 8 | (sig))
+
+ )
+
+57 
+ #__W_STOPCODE
+(
+sig
+è((sigè<< 8 | 0x7f)
+
+ )
+
+58 
+ #__WCOREFLAG
+ 0x80
+
+ )
+
+61 #ifdef
+__USE_BSD
+
+
+63 
+ ~<’dŸn.h
+>
+
+65 
+ uwa™
+
+
+67 
+ mw_¡©us
+;
+
+70 #if
+__BYTE_ORDER
+ =ð
+__LITTLE_ENDIAN
+
+
+71 
+ m__w_‹rmsig
+:7;
+
+72 
+ m__w_cÜedump
+:1;
+
+73 
+ m__w_»tcode
+:8;
+
+76 #if
+__BYTE_ORDER
+ =ð
+__BIG_ENDIAN
+
+
+78 
+ m__w_»tcode
+:8;
+
+79 
+ m__w_cÜedump
+:1;
+
+80 
+ m__w_‹rmsig
+:7;
+
+82 }
+ m__wa™_‹rmš©ed
+;
+
+85 #if
+__BYTE_ORDER
+ =ð
+__LITTLE_ENDIAN
+
+
+86 
+ m__w_¡Ýv®
+:8;
+
+87 
+ m__w_¡Ýsig
+:8;
+
+90 #if
+__BYTE_ORDER
+ =ð
+__BIG_ENDIAN
+
+
+92 
+ m__w_¡Ýsig
+:8;
+
+93 
+ m__w_¡Ýv®
+:8;
+
+95 }
+ m__wa™_¡Ý³d
+;
+
+98 
+ #w_‹rmsig
+
+__wa™_‹rmš©ed
+.
+__w_‹rmsig
+
+
+ )
+
+99 
+ #w_cÜedump
+
+__wa™_‹rmš©ed
+.
+__w_cÜedump
+
+
+ )
+
+100 
+ #w_»tcode
+
+__wa™_‹rmš©ed
+.
+__w_»tcode
+
+
+ )
+
+101 
+ #w_¡Ýsig
+
+__wa™_¡Ý³d
+.
+__w_¡Ýsig
+
+
+ )
+
+102 
+ #w_¡Ýv®
+
+__wa™_¡Ý³d
+.
+__w_¡Ýv®
+
+
+ )
+
+ @/usr/include/endian.h
+
+19 #iâdef
+_ENDIAN_H
+
+
+20 
+ #_ENDIAN_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+32 
+ #__LITTLE_ENDIAN
+ 1234
+
+ )
+
+33 
+ #__BIG_ENDIAN
+ 4321
+
+ )
+
+34 
+ #__PDP_ENDIAN
+ 3412
+
+ )
+
+37 
+ ~<b™s/’dŸn.h
+>
+
+41 #iâdeà
+__FLOAT_WORD_ORDER
+
+
+42 
+ #__FLOAT_WORD_ORDER
+
+__BYTE_ORDER
+
+
+ )
+
+45 #ifdef
+__USE_BSD
+
+
+46 
+ #LITTLE_ENDIAN
+
+__LITTLE_ENDIAN
+
+
+ )
+
+47 
+ #BIG_ENDIAN
+
+__BIG_ENDIAN
+
+
+ )
+
+48 
+ #PDP_ENDIAN
+
+__PDP_ENDIAN
+
+
+ )
+
+49 
+ #BYTE_ORDER
+
+__BYTE_ORDER
+
+
+ )
+
+52 #ià
+__BYTE_ORDER
+ =ð
+__LITTLE_ENDIAN
+
+
+53 
+ #__LONG_LONG_PAIR
+(
+HI
+,
+LO
+èLO,
+ )
+HI
+
+54 #–ià
+__BYTE_ORDER
+ =ð
+__BIG_ENDIAN
+
+
+55 
+ #__LONG_LONG_PAIR
+(
+HI
+,
+LO
+èHI,
+ )
+LO
+
+ @/usr/include/features.h
+
+19 #iâdef
+_FEATURES_H
+
+
+20 
+ #_FEATURES_H
+ 1
+
+ )
+
+86 #undeà
+__USE_ISOC99
+
+
+87 #undeà
+__USE_POSIX
+
+
+88 #undeà
+__USE_POSIX2
+
+
+89 #undeà
+__USE_POSIX199309
+
+
+90 #undeà
+__USE_POSIX199506
+
+
+91 #undeà
+__USE_XOPEN
+
+
+92 #undeà
+__USE_XOPEN_EXTENDED
+
+
+93 #undeà
+__USE_UNIX98
+
+
+94 #undeà
+__USE_XOPEN2K
+
+
+95 #undeà
+__USE_LARGEFILE
+
+
+96 #undeà
+__USE_LARGEFILE64
+
+
+97 #undeà
+__USE_FILE_OFFSET64
+
+
+98 #undeà
+__USE_BSD
+
+
+99 #undeà
+__USE_SVID
+
+
+100 #undeà
+__USE_MISC
+
+
+101 #undeà
+__USE_GNU
+
+
+102 #undeà
+__USE_REENTRANT
+
+
+103 #undeà
+__FAVOR_BSD
+
+
+104 #undeà
+__KERNEL_STRICT_NAMES
+
+
+108 #iâdeà
+_LOOSE_KERNEL_NAMES
+
+
+109 
+ #__KERNEL_STRICT_NAMES
+
+
+ )
+
+113 
+ #__USE_ANSI
+ 1
+
+ )
+
+117 #ià
+defšed
+
+_BSD_SOURCE
+ && \
+
+118 !(
+defšed
+
+ g_POSIX_SOURCE
+ || defšed
+ g_POSIX_C_SOURCE
+ || \
+
+119
+defšed
+
+ g_XOPEN_SOURCE
+ || defšed
+ g_XOPEN_SOURCE_EXTENDED
+ || \
+
+120
+defšed
+
+ g_GNU_SOURCE
+ || defšed
+ g_SVID_SOURCE
+)
+
+121 
+ #__FAVOR_BSD
+ 1
+
+ )
+
+125 #ifdeà
+_GNU_SOURCE
+
+
+126 #undeà
+_ISOC99_SOURCE
+
+
+127 
+ #_ISOC99_SOURCE
+ 1
+
+ )
+
+128 #undeà
+_POSIX_SOURCE
+
+
+129 
+ #_POSIX_SOURCE
+ 1
+
+ )
+
+130 #undeà
+_POSIX_C_SOURCE
+
+
+131 
+ #_POSIX_C_SOURCE
+ 199506L
+
+ )
+
+132 #undeà
+_XOPEN_SOURCE
+
+
+133 
+ #_XOPEN_SOURCE
+ 600
+
+ )
+
+134 #undeà
+_XOPEN_SOURCE_EXTENDED
+
+
+135 
+ #_XOPEN_SOURCE_EXTENDED
+ 1
+
+ )
+
+136 #undeà
+_LARGEFILE64_SOURCE
+
+
+137 
+ #_LARGEFILE64_SOURCE
+ 1
+
+ )
+
+138 #undeà
+_BSD_SOURCE
+
+
+139 
+ #_BSD_SOURCE
+ 1
+
+ )
+
+140 #undeà
+_SVID_SOURCE
+
+
+141 
+ #_SVID_SOURCE
+ 1
+
+ )
+
+146 #ià(!
+defšed
+
+__STRICT_ANSI__
+ && !defšed
+_ISOC99_SOURCE
+ && \
+
+147 !
+defšed
+
+ g_POSIX_SOURCE
+ && !defšed
+ g_POSIX_C_SOURCE
+ && \
+
+148 !
+defšed
+
+ g_XOPEN_SOURCE
+ && !defšed
+ g_XOPEN_SOURCE_EXTENDED
+ && \
+
+149 !
+defšed
+
+ g_BSD_SOURCE
+ && !defšed
+ g_SVID_SOURCE
+)
+
+150 
+ #_BSD_SOURCE
+ 1
+
+ )
+
+151 
+ #_SVID_SOURCE
+ 1
+
+ )
+
+158 #ià(
+defšed
+
+_ISOC99_SOURCE
+ || defšed
+_ISOC9X_SOURCE
+ \
+
+159 || (
+defšed
+
+ g__STDC_VERSION__
+ && __STDC_VERSION__ >= 199901L))
+
+160 
+ #__USE_ISOC99
+ 1
+
+ )
+
+165 #ià(!
+defšed
+
+__STRICT_ANSI__
+ && !defšed
+_POSIX_SOURCE
+ && \
+
+166 !
+defšed
+
+_POSIX_C_SOURCE
+)
+
+167 
+ #_POSIX_SOURCE
+ 1
+
+ )
+
+168 #ià
+defšed
+
+_XOPEN_SOURCE
+ && (_XOPEN_SOURCE - 0) < 500
+
+169 
+ #_POSIX_C_SOURCE
+ 2
+
+ )
+
+171 
+ #_POSIX_C_SOURCE
+ 199506L
+
+ )
+
+175 #ià
+defšed
+
+_POSIX_SOURCE
+ ||
+_POSIX_C_SOURCE
+ >ð1 || defšed
+_XOPEN_SOURCE
+
+
+176 
+ #__USE_POSIX
+ 1
+
+ )
+
+179 #ià
+defšed
+
+_POSIX_C_SOURCE
+ && _POSIX_C_SOURCE >ð2 || defšed
+_XOPEN_SOURCE
+
+
+180 
+ #__USE_POSIX2
+ 1
+
+ )
+
+183 #ià(
+_POSIX_C_SOURCE
+ - 0) >= 199309L
+
+184 
+ #__USE_POSIX199309
+ 1
+
+ )
+
+187 #ià(
+_POSIX_C_SOURCE
+ - 0) >= 199506L
+
+188 
+ #__USE_POSIX199506
+ 1
+
+ )
+
+191 #ifdef
+_XOPEN_SOURCE
+
+
+192 
+ #__USE_XOPEN
+ 1
+
+ )
+
+193 #ià(
+_XOPEN_SOURCE
+ - 0) >= 500
+
+194 
+ #__USE_XOPEN_EXTENDED
+ 1
+
+ )
+
+195 
+ #__USE_UNIX98
+ 1
+
+ )
+
+196 #undeà
+_LARGEFILE_SOURCE
+
+
+197 
+ #_LARGEFILE_SOURCE
+ 1
+
+ )
+
+198 #ià(
+_XOPEN_SOURCE
+ - 0) >= 600
+
+199 
+ #__USE_XOPEN2K
+ 1
+
+ )
+
+200 #undeà
+__USE_ISOC99
+
+
+201 
+ #__USE_ISOC99
+ 1
+
+ )
+
+204 #ifdeà
+_XOPEN_SOURCE_EXTENDED
+
+
+205 
+ #__USE_XOPEN_EXTENDED
+ 1
+
+ )
+
+210 #ifdeà
+_LARGEFILE_SOURCE
+
+
+211 
+ #__USE_LARGEFILE
+ 1
+
+ )
+
+214 #ifdeà
+_LARGEFILE64_SOURCE
+
+
+215 
+ #__USE_LARGEFILE64
+ 1
+
+ )
+
+218 #ià
+defšed
+
+_FILE_OFFSET_BITS
+ && _FILE_OFFSET_BITS == 64
+
+219 
+ #__USE_FILE_OFFSET64
+ 1
+
+ )
+
+222 #ià
+defšed
+
+_BSD_SOURCE
+ || defšed
+_SVID_SOURCE
+
+
+223 
+ #__USE_MISC
+ 1
+
+ )
+
+226 #ifdef
+_BSD_SOURCE
+
+
+227 
+ #__USE_BSD
+ 1
+
+ )
+
+230 #ifdef
+_SVID_SOURCE
+
+
+231 
+ #__USE_SVID
+ 1
+
+ )
+
+234 #ifdef
+_GNU_SOURCE
+
+
+235 
+ #__USE_GNU
+ 1
+
+ )
+
+238 #ià
+defšed
+
+_REENTRANT
+ || defšed
+_THREAD_SAFE
+
+
+239 
+ #__USE_REENTRANT
+ 1
+
+ )
+
+243 
+ #__STDC_IEC_559__
+ 1
+
+ )
+
+244 
+ #__STDC_IEC_559_COMPLEX__
+ 1
+
+ )
+
+247 
+ #__STDC_ISO_10646__
+ 200009L
+
+ )
+
+255 #undeà
+__GNU_LIBRARY__
+
+
+256 
+ #__GNU_LIBRARY__
+ 6
+
+ )
+
+260 
+ #__GLIBC__
+ 2
+
+ )
+
+261 
+ #__GLIBC_MINOR__
+ 2
+
+ )
+
+270 #ià
+defšed
+
+__GNUC__
+ && defšed
+__GNUC_MINOR__
+
+
+271 
+ #__GNUC_PREREQ
+(
+maj
+,
+mš
+) \
+
+272 ((
+__GNUC__
+ << 16è+
+__GNUC_MINOR__
+ >ð((
+maj
+è<< 16è+ (
+mš
+))
+
+ )
+
+274 
+ #__GNUC_PREREQ
+(
+maj
+,
+mš
+è0
+
+ )
+
+277 
+ #__GLIBC_PREREQ
+(
+maj
+,
+mš
+) \
+
+278 ((
+__GLIBC__
+ << 16è+
+__GLIBC_MINOR__
+ >ð((
+maj
+è<< 16è+ (
+mš
+))
+
+ )
+
+281 #ià
+defšed
+
+__GNUC__
+ \
+
+282 || (
+defšed
+
+ g__PGI
+ && defšed
+ g__i386__
+ ) \
+
+283 || (
+defšed
+
+ g__INTEL_COMPILER
+ && (defšed
+ g__i386__
+ || defšed
+ g__Ÿ64__
+)) \
+
+284 || (
+defšed
+
+ g__STDC_VERSION
+ && __STDC_VERSION >= 199901L)
+
+285 
+ #__GLIBC_HAVE_LONG_LONG
+ 1
+
+ )
+
+289 #iâdeà
+__ASSEMBLER__
+
+
+290 #iâdeà
+_SYS_CDEFS_H
+
+
+291 
+ ~<sys/cdefs.h
+>
+
+296 #ià
+defšed
+
+__USE_FILE_OFFSET64
+ && !defšed
+__REDIRECT
+
+
+297 
+ #__USE_LARGEFILE
+ 1
+
+ )
+
+298 
+ #__USE_LARGEFILE64
+ 1
+
+ )
+
+304 #ià
+__GNUC_PREREQ
+ (2, 7è&&
+defšed
+
+__OPTIMIZE__
+ \
+
+305 && !
+defšed
+
+ g__OPTIMIZE_SIZE__
+ && !defšed
+ g__NO_INLINE__
+
+
+306 
+ #__USE_EXTERN_INLINES
+ 1
+
+ )
+
+310 #iâdeà
+_LIBC
+
+
+320 
+ ~<gnu/¡ubs.h
+>
+
+ @/usr/include/getopt.h
+
+20 #iâdeà
+_GETOPT_H
+
+
+22 #iâdeà
+__Ãed_g‘Ýt
+
+
+23 
+ #_GETOPT_H
+ 1
+
+ )
+
+33 #ià!
+defšed
+
+__GNU_LIBRARY__
+
+
+34 
+ ~<ùy³.h
+>
+
+37 #ifdef
+__ýlu¥lus
+
+
+47
+*
+Ýrg
+;
+
+61
+
+Ýtšd
+;
+
+66
+
+Ý‹¼
+;
+
+70
+
+ÝtÝt
+;
+
+72 #iâdeà
+__Ãed_g‘Ýt
+
+
+94 
+ sÝtiÚ
+
+
+96 #ià(
+defšed
+
+__STDC__
+ && __STDC__è|| defšed
+__ýlu¥lus
+
+
+97 cÚ¡ *
+ gÇme
+;
+
+99 *
+ gÇme
+;
+
+103 
+ ghas_¬g
+;
+
+104 *
+ gæag
+;
+
+105 
+ gv®
+;
+
+110 
+ #no_¬gum’t
+ 0
+
+ )
+
+111 
+ #»quœed_¬gum’t
+ 1
+
+ )
+
+112 
+ #ÝtiÚ®_¬gum’t
+ 2
+
+ )
+
+140 #ià(
+defšed
+
+__STDC__
+ && __STDC__è|| defšed
+__ýlu¥lus
+
+
+141 #ifdeà
+__GNU_LIBRARY__
+
+
+145
+
+g‘Ýt
+ (
+___¬gc
+, *cÚ¡ *
+___¬gv
+, cÚ¡ *
+__shÜtÝts
+);
+
+147
+
+g‘Ýt
+ ();
+
+150 #iâdeà
+__Ãed_g‘Ýt
+
+
+151
+
+g‘Ýt_lÚg
+ (
+___¬gc
+, *cÚ¡ *
+___¬gv
+,
+
+152 cÚ¡ *
+__shÜtÝts
+,
+
+153 cÚ¡ 
+ÝtiÚ
+ *
+__lÚgÝts
+, *
+__lÚgšd
+);
+
+154
+
+g‘Ýt_lÚg_Úly
+ (
+___¬gc
+, *cÚ¡ *
+___¬gv
+,
+
+155 cÚ¡ *
+__shÜtÝts
+,
+
+156 cÚ¡ 
+ÝtiÚ
+ *
+__lÚgÝts
+, *
+__lÚgšd
+);
+
+159
+
+_g‘Ýt_š‹º®
+ (
+___¬gc
+, *cÚ¡ *
+___¬gv
+,
+
+160 cÚ¡ *
+__shÜtÝts
+,
+
+161 cÚ¡ 
+ÝtiÚ
+ *
+__lÚgÝts
+, *
+__lÚgšd
+,
+
+162 
+__lÚg_Úly
+);
+
+165
+
+g‘Ýt
+ ();
+
+166 #iâdeà
+__Ãed_g‘Ýt
+
+
+167
+
+g‘Ýt_lÚg
+ ();
+
+168
+
+g‘Ýt_lÚg_Úly
+ ();
+
+170
+
+_g‘Ýt_š‹º®
+ ();
+
+174 #ifdef
+__ýlu¥lus
+
+
+179 #undeà
+__Ãed_g‘Ýt
+
+
+ @/usr/include/libio.h
+
+29 #iâdeà
+_IO_STDIO_H
+
+
+30 
+ #_IO_STDIO_H
+
+
+ )
+
+32 
+ ~<_G_cÚfig.h
+>
+
+34 
+ #_IO_pos_t
+
+_G_åos_t
+
+
+ )
+
+35 
+ #_IO_åos_t
+
+_G_åos_t
+
+
+ )
+
+36 
+ #_IO_åos64_t
+
+_G_åos64_t
+
+
+ )
+
+37 
+ #_IO_size_t
+
+_G_size_t
+
+
+ )
+
+38 
+ #_IO_ssize_t
+
+_G_ssize_t
+
+
+ )
+
+39 
+ #_IO_off_t
+
+_G_off_t
+
+
+ )
+
+40 
+ #_IO_off64_t
+
+_G_off64_t
+
+
+ )
+
+41 
+ #_IO_pid_t
+
+_G_pid_t
+
+
+ )
+
+42 
+ #_IO_uid_t
+
+_G_uid_t
+
+
+ )
+
+43 
+ #_IO_icÚv_t
+
+_G_icÚv_t
+
+
+ )
+
+44 
+ #_IO_HAVE_SYS_WAIT
+
+_G_HAVE_SYS_WAIT
+
+
+ )
+
+45 
+ #_IO_HAVE_ST_BLKSIZE
+
+_G_HAVE_ST_BLKSIZE
+
+
+ )
+
+46 
+ #_IO_BUFSIZ
+
+_G_BUFSIZ
+
+
+ )
+
+47 
+ #_IO_va_li¡
+
+_G_va_li¡
+
+
+ )
+
+48 
+ #_IO_wšt_t
+
+_G_wšt_t
+
+
+ )
+
+50 #ifdeà
+_G_NEED_STDARG_H
+
+
+52 
+ #__Ãed___va_li¡
+
+
+ )
+
+53 
+ ~<¡d¬g.h
+>
+
+54 #ifdeà
+__GNUC_VA_LIST
+
+
+55 #undeà
+_IO_va_li¡
+
+
+56 
+ #_IO_va_li¡
+
+__gnuc_va_li¡
+
+
+ )
+
+60 #iâdeà
+__P
+
+
+61 #ià
+_G_HAVE_SYS_CDEFS
+
+
+62 
+ ~<sys/cdefs.h
+>
+
+64 #ifdeà
+__STDC__
+
+
+65 
+ #__P
+(
+p
+ )
+p
+
+66 
+ #__PMT
+(
+p
+ )
+p
+
+68 
+ #__P
+(
+p
+è()
+
+ )
+
+69 
+ #__PMT
+(
+p
+è()
+
+ )
+
+75 #iâdeà
+_PARAMS
+
+
+76 
+ #_PARAMS
+(
+´Ùos
+ `__P
+ÕrÙos)
+
+ )
+
+79 #iâdeà
+__STDC__
+
+
+81 cÚ¡
+
+ )
+
+84 
+ #_IO_UNIFIED_JUMPTABLES
+ 1
+
+ )
+
+85 #iâdeà
+_G_HAVE_PRINTF_FP
+
+
+86 
+ #_IO_USE_DTOA
+ 1
+
+ )
+
+89 #iâdeà
+EOF
+
+
+90 
+ #EOF
+ (-1)
+
+ )
+
+92 #iâdeà
+NULL
+
+
+93 #ià
+defšed
+
+__GNUG__
+ && \
+
+94 (
+ g__GNUC__
+ > 2 || (__GNUC__ =ð2 &&
+__GNUC_MINOR__
+ >= 8))
+
+95 
+ #NULL
+ (
+__nuÎ
+)
+
+ )
+
+97 #ià!
+defšed
+(
+__ýlu¥lus
+)
+
+98 
+ #NULL
+ ((*)0)
+
+ )
+
+100 
+ #NULL
+ (0)
+
+ )
+
+105 
+ #_IOS_INPUT
+ 1
+
+ )
+
+106 
+ #_IOS_OUTPUT
+ 2
+
+ )
+
+107 
+ #_IOS_ATEND
+ 4
+
+ )
+
+108 
+ #_IOS_APPEND
+ 8
+
+ )
+
+109 
+ #_IOS_TRUNC
+ 16
+
+ )
+
+110 
+ #_IOS_NOCREATE
+ 32
+
+ )
+
+111 
+ #_IOS_NOREPLACE
+ 64
+
+ )
+
+112 
+ #_IOS_BIN
+ 128
+
+ )
+
+120 
+ #_IO_MAGIC
+ 0xFBAD0000
+
+ )
+
+121 
+ #_OLD_STDIO_MAGIC
+ 0xFABC0000
+
+ )
+
+122 
+ #_IO_MAGIC_MASK
+ 0xFFFF0000
+
+ )
+
+123 
+ #_IO_USER_BUF
+ 1
+
+ )
+
+124 
+ #_IO_UNBUFFERED
+ 2
+
+ )
+
+125 
+ #_IO_NO_READS
+ 4
+
+ )
+
+126 
+ #_IO_NO_WRITES
+ 8
+
+ )
+
+127 
+ #_IO_EOF_SEEN
+ 0x10
+
+ )
+
+128 
+ #_IO_ERR_SEEN
+ 0x20
+
+ )
+
+129 
+ #_IO_DELETE_DONT_CLOSE
+ 0x40
+
+ )
+
+130 
+ #_IO_LINKED
+ 0x80
+
+ )
+
+131 
+ #_IO_IN_BACKUP
+ 0x100
+
+ )
+
+132 
+ #_IO_LINE_BUF
+ 0x200
+
+ )
+
+133 
+ #_IO_TIED_PUT_GET
+ 0x400
+
+ )
+
+134 
+ #_IO_CURRENTLY_PUTTING
+ 0x800
+
+ )
+
+135 
+ #_IO_IS_APPENDING
+ 0x1000
+
+ )
+
+136 
+ #_IO_IS_FILEBUF
+ 0x2000
+
+ )
+
+137 
+ #_IO_BAD_SEEN
+ 0x4000
+
+ )
+
+138 
+ #_IO_USER_LOCK
+ 0x8000
+
+ )
+
+141 
+ #_IO_SKIPWS
+ 01
+
+ )
+
+142 
+ #_IO_LEFT
+ 02
+
+ )
+
+143 
+ #_IO_RIGHT
+ 04
+
+ )
+
+144 
+ #_IO_INTERNAL
+ 010
+
+ )
+
+145 
+ #_IO_DEC
+ 020
+
+ )
+
+146 
+ #_IO_OCT
+ 040
+
+ )
+
+147 
+ #_IO_HEX
+ 0100
+
+ )
+
+148 
+ #_IO_SHOWBASE
+ 0200
+
+ )
+
+149 
+ #_IO_SHOWPOINT
+ 0400
+
+ )
+
+150 
+ #_IO_UPPERCASE
+ 01000
+
+ )
+
+151 
+ #_IO_SHOWPOS
+ 02000
+
+ )
+
+152 
+ #_IO_SCIENTIFIC
+ 04000
+
+ )
+
+153 
+ #_IO_FIXED
+ 010000
+
+ )
+
+154 
+ #_IO_UNITBUF
+ 020000
+
+ )
+
+155 
+ #_IO_STDIO
+ 040000
+
+ )
+
+156 
+ #_IO_DONT_CLOSE
+ 0100000
+
+ )
+
+157 
+ #_IO_BOOLALPHA
+ 0200000
+
+ )
+
+160 
+_IO_jump_t
+; 
+ g_IO_FILE
+;
+
+163 #ifdeà
+_IO_MTSAFE_IO
+
+
+164 #ià
+defšed
+
+__GLIBC__
+ && __GLIBC__ >= 2
+
+165 
+ ~<b™s/¡dio-lock.h
+>
+
+170 
+ t_IO_lock_t
+;
+
+176 
+ s_IO_m¬k”
+ {
+
+177 
+_IO_m¬k”
+ *
+ m_Ãxt
+;
+
+178 
+_IO_FILE
+ *
+ m_sbuf
+;
+
+182 
+ m_pos
+;
+
+184 
+£t_¡»ampos
+(
+¡»ampos
+
+è{
+ m_¥os
+ = sp; }
+
+185 
+£t_off£t
+(
+off£t
+è{
+ m_pos
+ = off£t;
+ m_¥os
+ = (
+¡»ampos
+)(-2); }
+
+186
+ mpublic
+:
+
+187
+¡»amm¬k”
+(
+¡»ambuf
+ *
+sb
+);
+
+188 ~
+¡»amm¬k”
+();
+
+189 
+§všg
+(è{ 
+ m_¥os
+ == -2; }
+
+190 
+d–
+(
+¡»amm¬k”
+&);
+
+191 
+d–
+();
+
+196
+ e__codecvt_»suÉ
+
+
+198
+ m__codecvt_ok
+,
+
+199
+ m__codecvt_·¹Ÿl
+,
+
+200
+ m__codecvt_”rÜ
+,
+
+201
+ m__codecvt_nocÚv
+
+
+204 #ià
+defšed
+
+_LIBC
+ || defšed
+_GLIBCPP_USE_WCHAR_T
+
+
+207 
+ s_IO_codecvt
+
+
+209 (*
+ m__codecvt_de¡r
+è(
+ m_IO_codecvt
+ *);
+
+210
+__codecvt_»suÉ
+ (*
+__codecvt_do_out
+è(
+ m_IO_codecvt
+ *,
+
+211
+ m__mb¡©e_t
+ *,
+
+212 cÚ¡
+ mwch¬_t
+ *,
+
+213 cÚ¡
+ mwch¬_t
+ *,
+
+214 cÚ¡
+ mwch¬_t
+ **, *,
+
+216
+__codecvt_»suÉ
+ (*
+__codecvt_do_unshiá
+è(
+ m_IO_codecvt
+ *,
+
+217
+ m__mb¡©e_t
+ *, *,
+
+219
+__codecvt_»suÉ
+ (*
+__codecvt_do_š
+è(
+ m_IO_codecvt
+ *,
+
+220
+ m__mb¡©e_t
+ *,
+
+222 cÚ¡ **,
+ mwch¬_t
+ *,
+
+223
+ mwch¬_t
+ *, wchar_t **);
+
+224 (*
+ m__codecvt_do_’codšg
+è(
+ m_IO_codecvt
+ *);
+
+225 (*
+ m__codecvt_do_®ways_nocÚv
+è(
+ m_IO_codecvt
+ *);
+
+226 (*
+ m__codecvt_do_Ëngth
+è(
+ m_IO_codecvt
+ *,
+ m__mb¡©e_t
+ *,
+
+227 cÚ¡ *, cÚ¡ *,
+ m_IO_size_t
+);
+
+228 (*
+ m__codecvt_do_max_Ëngth
+è(
+ m_IO_codecvt
+ *);
+
+230
+_IO_icÚv_t
+
+ m__cd_š
+;
+
+231
+_IO_icÚv_t
+
+ m__cd_out
+;
+
+235 
+ s_IO_wide_d©a
+
+
+237
+wch¬_t
+ *
+ m_IO_»ad_±r
+;
+
+238
+wch¬_t
+ *
+ m_IO_»ad_’d
+;
+
+239
+wch¬_t
+ *
+ m_IO_»ad_ba£
+;
+
+240
+wch¬_t
+ *
+ m_IO_wr™e_ba£
+;
+
+241
+wch¬_t
+ *
+ m_IO_wr™e_±r
+;
+
+242
+wch¬_t
+ *
+ m_IO_wr™e_’d
+;
+
+243
+wch¬_t
+ *
+ m_IO_buf_ba£
+;
+
+244
+wch¬_t
+ *
+ m_IO_buf_’d
+;
+
+246
+wch¬_t
+ *
+ m_IO_§ve_ba£
+;
+
+247
+wch¬_t
+ *
+ m_IO_backup_ba£
+;
+
+249
+wch¬_t
+ *
+ m_IO_§ve_’d
+;
+
+251
+__mb¡©e_t
+
+ m_IO_¡©e
+;
+
+252
+__mb¡©e_t
+
+ m_IO_Ï¡_¡©e
+;
+
+253 
+_IO_codecvt
+
+ m_codecvt
+;
+
+255
+wch¬_t
+
+ m_shÜtbuf
+[1];
+
+257 
+_IO_jump_t
+ *
+ m_wide_vbË
+;
+
+261 
+ s_IO_FILE
+ {
+
+262 
+ m_æags
+;
+
+263 
+ #_IO_fže_æags
+
+_æags
+
+
+ )
+
+267 *
+ m_IO_»ad_±r
+;
+
+268 *
+ m_IO_»ad_’d
+;
+
+269 *
+ m_IO_»ad_ba£
+;
+
+270 *
+ m_IO_wr™e_ba£
+;
+
+271 *
+ m_IO_wr™e_±r
+;
+
+272 *
+ m_IO_wr™e_’d
+;
+
+273 *
+ m_IO_buf_ba£
+;
+
+274 *
+ m_IO_buf_’d
+;
+
+276 *
+ m_IO_§ve_ba£
+;
+
+277 *
+ m_IO_backup_ba£
+;
+
+278 *
+ m_IO_§ve_’d
+;
+
+280 
+_IO_m¬k”
+ *
+ m_m¬k”s
+;
+
+282 
+_IO_FILE
+ *
+ m_chaš
+;
+
+284 
+ m_fž’o
+;
+
+285 
+ m_blksize
+;
+
+286
+_IO_off_t
+
+ m_Þd_off£t
+;
+
+288 
+ #__HAVE_COLUMN
+
+
+ )
+
+290 
+ m_cur_cÞumn
+;
+
+291 sigÃd 
+ m_vbË_off£t
+;
+
+292 
+ m_shÜtbuf
+[1];
+
+296
+_IO_lock_t
+ *
+ m_lock
+;
+
+297 #ifdeà
+_IO_USE_OLD_IO_FILE
+
+
+300 
+ s_IO_FILE_com¶‘e
+
+
+302 
+_IO_FILE
+
+ m_fže
+;
+
+304 #ià
+defšed
+
+_G_IO_IO_FILE_VERSION
+ && _G_IO_IO_FILE_VERSION == 0x20001
+
+305
+_IO_off64_t
+
+ m_off£t
+;
+
+306 #ià
+defšed
+
+_LIBC
+ || defšed
+_GLIBCPP_USE_WCHAR_T
+
+
+308 
+_IO_codecvt
+ *
+ m_codecvt
+;
+
+309 
+_IO_wide_d©a
+ *
+ m_wide_d©a
+;
+
+311 *
+ m__·d1
+;
+
+312 *
+ m__·d2
+;
+
+314 
+ m_mode
+;
+
+316 
+ m_unu£d2
+[15 *  () - 2 *  (*)];
+
+320 #iâdeà
+__ýlu¥lus
+
+
+321 
+_IO_FILE
+
+ t_IO_FILE
+;
+
+324 
+ g_IO_FILE_¶us
+;
+
+326
+
+_IO_FILE_¶us
+
+_IO_2_1_¡dš_
+;
+
+327
+
+_IO_FILE_¶us
+
+_IO_2_1_¡dout_
+;
+
+328
+
+_IO_FILE_¶us
+
+_IO_2_1_¡d”r_
+;
+
+329 #iâdeà
+_LIBC
+
+
+330 
+ #_IO_¡dš
+ ((
+_IO_FILE
+*)(&
+_IO_2_1_¡dš_
+))
+
+ )
+
+331 
+ #_IO_¡dout
+ ((
+_IO_FILE
+*)(&
+_IO_2_1_¡dout_
+))
+
+ )
+
+332 
+ #_IO_¡d”r
+ ((
+_IO_FILE
+*)(&
+_IO_2_1_¡d”r_
+))
+
+ )
+
+334
+_IO_FILE
+ *
+_IO_¡dš
+
+©Œibu‹_hidd’
+;
+
+335
+_IO_FILE
+ *
+_IO_¡dout
+
+©Œibu‹_hidd’
+;
+
+336
+_IO_FILE
+ *
+_IO_¡d”r
+
+©Œibu‹_hidd’
+;
+
+344 
+__ssize_t
+
+ t__io_»ad_â
+ (*
+ t__cook›
+, *
+ t__buf
+,
+ tsize_t
+
+ t__nby‹s
+);
+
+352 
+__ssize_t
+
+ t__io_wr™e_â
+ (*
+ t__cook›
+,
+ t__cÚ¡
+ *
+ t__buf
+,
+
+353
+ tsize_t
+
+ t__n
+);
+
+361 
+ t__io_£ek_â
+ (*
+ t__cook›
+,
+ t_IO_off64_t
+ *
+ t__pos
+, 
+ t__w
+);
+
+364 
+ t__io_þo£_â
+ (*
+ t__cook›
+);
+
+367 #ifdeà
+_GNU_SOURCE
+
+
+369 
+__io_»ad_â
+
+ tcook›_»ad_funùiÚ_t
+;
+
+370 
+__io_wr™e_â
+
+ tcook›_wr™e_funùiÚ_t
+;
+
+371 
+__io_£ek_â
+
+ tcook›_£ek_funùiÚ_t
+;
+
+372 
+__io_þo£_â
+
+ tcook›_þo£_funùiÚ_t
+;
+
+377
+__io_»ad_â
+ *
+ m»ad
+;
+
+378
+__io_wr™e_â
+ *
+ mwr™e
+;
+
+379
+__io_£ek_â
+ *
+ m£ek
+;
+
+380
+__io_þo£_â
+ *
+ mþo£
+;
+
+381 }
+ t_IO_cook›_io_funùiÚs_t
+;
+
+382 
+_IO_cook›_io_funùiÚs_t
+
+ tcook›_io_funùiÚs_t
+;
+
+384 
+ g_IO_cook›_fže
+;
+
+387
+
+_IO_cook›_š™
+ (
+_IO_cook›_fže
+ *
+__cfže
+, 
+__»ad_wr™e
+,
+
+388 *
+__cook›
+,
+_IO_cook›_io_funùiÚs_t
+
+__âs
+);
+
+392 #ifdeà
+__ýlu¥lus
+
+
+396
+
+__undӾow
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+397
+
+__uæow
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+398
+
+__ovӾow
+ (
+_IO_FILE
+ *, è
+__THROW
+;
+
+399
+_IO_wšt_t
+
+__wundӾow
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+400
+_IO_wšt_t
+
+__wuæow
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+401
+_IO_wšt_t
+
+__wovӾow
+ (
+_IO_FILE
+ *, _IO_wšt_tè
+__THROW
+;
+
+403 
+ #_IO_g‘c_uÆocked
+(
+_å
+) \
+
+404 ((
+_å
+)->
+_IO_»ad_±r
+ >ð(_å)->
+_IO_»ad_’d
+ ?
+ `__uæow
+ (_fp) \
+
+405 : *(*è(
+_å
+)->
+_IO_»ad_±r
+++)
+
+ )
+
+406 
+ #_IO_³ekc_uÆocked
+(
+_å
+) \
+
+407 ((
+_å
+)->
+_IO_»ad_±r
+ >ð(_å)->
+_IO_»ad_’d
+ \
+
+408 &&
+ `__undӾow
+ (
+_å
+è=ð
+EOF
+ ? EOF \
+
+409 : *(*è(
+_å
+)->
+_IO_»ad_±r
+)
+
+ )
+
+410 
+ #_IO_putc_uÆocked
+(
+_ch
+,
+_å
+) \
+
+411 (((
+_å
+)->
+_IO_wr™e_±r
+ >ð(_å)->
+_IO_wr™e_’d
+) \
+
+412 ?
+ `__ovӾow
+ (
+_å
+, (è(
+_ch
+)) \
+
+413 : (è(*(
+_å
+)->
+_IO_wr™e_±r
+++ = (
+_ch
+)))
+
+ )
+
+415 
+ #_IO_g‘wc_uÆocked
+(
+_å
+) \
+
+416 ((
+_å
+)->
+_wide_d©a
+->
+_IO_»ad_±r
+ >ð(_å)->_wide_d©a->
+_IO_»ad_’d
+ \
+
+417 ?
+ `__wuæow
+ (
+_å
+è: (
+_IO_wšt_t
+è*(_å)->
+_wide_d©a
+->
+_IO_»ad_±r
+++)
+
+ )
+
+418 
+ #_IO_putwc_uÆocked
+(
+_wch
+,
+_å
+) \
+
+419 ((
+_å
+)->
+_wide_d©a
+->
+_IO_wr™e_±r
+ >ð(_å)->_wide_d©a->
+_IO_wr™e_’d
+ \
+
+420 ?
+ `__wovӾow
+ (
+_å
+,
+_wch
+) \
+
+421 : (
+_IO_wšt_t
+è(*(
+_å
+)->
+_wide_d©a
+->
+_IO_wr™e_±r
+++ = (
+_wch
+)))
+
+ )
+
+423 
+ #_IO_ãof_uÆocked
+(
+__å
+è(((__å)->
+_æags
+ &
+_IO_EOF_SEEN
+è!ð0)
+
+ )
+
+424 
+ #_IO_ã¼Ü_uÆocked
+(
+__å
+è(((__å)->
+_æags
+ &
+_IO_ERR_SEEN
+è!ð0)
+
+ )
+
+426
+
+_IO_g‘c
+ (
+_IO_FILE
+ *
+__å
+__THROW
+;
+
+427
+
+_IO_putc
+ (
+__c
+,
+_IO_FILE
+ *
+__å
+__THROW
+;
+
+428
+
+_IO_ãof
+ (
+_IO_FILE
+ *
+__å
+__THROW
+;
+
+429
+
+_IO_ã¼Ü
+ (
+_IO_FILE
+ *
+__å
+__THROW
+;
+
+431
+
+_IO_³ekc_locked
+ (
+_IO_FILE
+ *
+__å
+__THROW
+;
+
+434 
+ #_IO_PENDING_OUTPUT_COUNT
+(
+_å
+) \
+
+435 ((
+_å
+)->
+_IO_wr™e_±r
+ - (_å)->
+_IO_wr™e_ba£
+)
+
+ )
+
+437
+
+_IO_æockfže
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+438
+
+_IO_fuÆockfže
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+439
+
+_IO_árylockfže
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+441 #ifdeà
+_IO_MTSAFE_IO
+
+
+442 
+ #_IO_³ekc
+(
+_å
+ `_IO_³ekc_locked
+ (_å)
+
+ )
+
+443 
+ #_IO_æockfže
+(
+_å
+) \
+
+444 ià(((
+_å
+)->
+_æags
+ &
+_IO_USER_LOCK
+è=ð0è
+ `_IO_æockfže
+ (_å)
+
+ )
+
+445 
+ #_IO_fuÆockfže
+(
+_å
+) \
+
+446 ià(((
+_å
+)->
+_æags
+ &
+_IO_USER_LOCK
+è=ð0è
+ `_IO_fuÆockfže
+ (_å)
+
+ )
+
+448 
+ #_IO_³ekc
+(
+_å
+ `_IO_³ekc_uÆocked
+ (_å)
+
+ )
+
+449 
+ #_IO_æockfže
+(
+_å
+
+ )
+
+450 
+ #_IO_fuÆockfže
+(
+_å
+
+ )
+
+451 
+ #_IO_árylockfže
+(
+_å
+
+ )
+
+452 
+ #_IO_þ—nup_»giÚ_¡¬t
+(
+_fù
+,
+_å
+
+ )
+
+453 
+ #_IO_þ—nup_»giÚ_’d
+(
+_Do™
+
+ )
+
+456
+
+_IO_vfsÿnf
+ (
+_IO_FILE
+ *
+__»¡riù
+, const * __restrict,
+
+457
+_IO_va_li¡
+, *
+__»¡riù
+__THROW
+;
+
+458
+
+_IO_vårštf
+ (
+_IO_FILE
+ *
+__»¡riù
+, const *__restrict,
+
+459
+_IO_va_li¡
+__THROW
+;
+
+460
+_IO_ssize_t
+
+_IO_·dn
+ (
+_IO_FILE
+ *, , _IO_ssize_tè
+__THROW
+;
+
+461
+_IO_size_t
+
+_IO_sg‘n
+ (
+_IO_FILE
+ *, *, _IO_size_tè
+__THROW
+;
+
+463
+_IO_off64_t
+
+_IO_£ekoff
+ (
+_IO_FILE
+ *, _IO_off64_t, , è
+__THROW
+;
+
+464
+_IO_off64_t
+
+_IO_£ekpos
+ (
+_IO_FILE
+ *, _IO_off64_t, è
+__THROW
+;
+
+466
+
+_IO_ä“_backup_¬—
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+468 #ià
+defšed
+
+_LIBC
+ || defšed
+_GLIBCPP_USE_WCHAR_T
+
+
+469
+_IO_wšt_t
+
+_IO_g‘wc
+ (
+_IO_FILE
+ *
+__å
+__THROW
+;
+
+470
+_IO_wšt_t
+
+_IO_putwc
+ (
+wch¬_t
+
+__wc
+,
+_IO_FILE
+ *
+__å
+__THROW
+;
+
+471
+
+_IO_fwide
+ (
+_IO_FILE
+ *
+__å
+, 
+__mode
+__THROW
+;
+
+472 #ià
+__GNUC__
+ >= 2
+
+475 #ià
+defšed
+
+_LIBC
+ && defšed
+SHARED
+
+
+476 
+ ~<shlib-com·t.h
+>
+
+477 #ià
+SHLIB_COMPAT
+ (
+libc
+,
+GLIBC_2_0
+,
+GLIBC_2_1
+)
+
+478 
+ #_IO_fwide_maybe_šcom·tibË
+ \
+
+479 (
+ `__bužtš_ex³ù
+ (&
+_IO_¡dš_u£d
+ =ð
+NULL
+, 0))
+
+ )
+
+480
+cÚ¡ 
+_IO_¡dš_u£d
+;
+
+481
+w—k_ex‹º
+ (
+_IO_¡dš_u£d
+);
+
+484 #iâdeà
+_IO_fwide_maybe_šcom·tibË
+
+
+485 
+ #_IO_fwide_maybe_šcom·tibË
+ (0)
+
+ )
+
+489 
+ #_IO_fwide
+(
+__å
+,
+__mode
+) \
+
+490 ({ 
+__»suÉ
+ = (
+__mode
+); \
+
+491 ià(
+__»suÉ
+ < 0 && !
+_IO_fwide_maybe_šcom·tibË
+) \
+
+493 ià((
+__å
+)->
+_mode
+ == 0) \
+
+495 (
+__å
+)->
+_mode
+ = -1; \
+
+496
+__»suÉ
+ = (
+__å
+)->
+_mode
+; \
+
+498 ià(
+ `__bužtš_cÚ¡ªt_p
+ (
+__mode
+) && (__mode) == 0) \
+
+499
+__»suÉ
+ = (
+__å
+)->
+_mode
+; \
+
+501
+__»suÉ
+ =
+ `_IO_fwide
+ (
+__å
+, __result); \
+
+502
+__»suÉ
+; })
+
+ )
+
+505
+
+_IO_vfwsÿnf
+ (
+_IO_FILE
+ *
+__»¡riù
+, cÚ¡
+wch¬_t
+ * __restrict,
+
+506
+_IO_va_li¡
+, *
+__»¡riù
+__THROW
+;
+
+507
+
+_IO_vfw´štf
+ (
+_IO_FILE
+ *
+__»¡riù
+, cÚ¡
+wch¬_t
+ *__restrict,
+
+508
+_IO_va_li¡
+__THROW
+;
+
+509
+_IO_ssize_t
+
+_IO_w·dn
+ (
+_IO_FILE
+ *,
+wšt_t
+, _IO_ssize_tè
+__THROW
+;
+
+510
+
+_IO_ä“_wbackup_¬—
+ (
+_IO_FILE
+ *è
+__THROW
+;
+
+513 #ifdeà
+__ýlu¥lus
+
+
+ @/usr/include/limits.h
+
+23 #iâdeà
+_LIBC_LIMITS_H_
+
+
+24 
+ #_LIBC_LIMITS_H_
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+32 
+ #MB_LEN_MAX
+ 16
+
+ )
+
+37 #ià!
+defšed
+
+__GNUC__
+ || __GNUC__ < 2
+
+42 #iâdeà
+_LIMITS_H
+
+
+43 
+ #_LIMITS_H
+ 1
+
+ )
+
+45 
+ ~<b™s/wÜdsize.h
+>
+
+54 
+ #CHAR_BIT
+ 8
+
+ )
+
+57 
+ #SCHAR_MIN
+ (-128)
+
+ )
+
+58 
+ #SCHAR_MAX
+ 127
+
+ )
+
+61 
+ #UCHAR_MAX
+ 255
+
+ )
+
+64 #ifdeà
+__CHAR_UNSIGNED__
+
+
+65 
+ #CHAR_MIN
+ 0
+
+ )
+
+66 
+ #CHAR_MAX
+
+UCHAR_MAX
+
+
+ )
+
+68 
+ #CHAR_MIN
+
+SCHAR_MIN
+
+
+ )
+
+69 
+ #CHAR_MAX
+
+SCHAR_MAX
+
+
+ )
+
+73 
+ #SHRT_MIN
+ (-32768)
+
+ )
+
+74 
+ #SHRT_MAX
+ 32767
+
+ )
+
+77 
+ #USHRT_MAX
+ 65535
+
+ )
+
+80 
+ #INT_MIN
+ (-
+INT_MAX
+ - 1)
+
+ )
+
+81 
+ #INT_MAX
+ 2147483647
+
+ )
+
+84 
+ #UINT_MAX
+ 4294967295U
+
+ )
+
+87 #ià
+__WORDSIZE
+ == 64
+
+88 
+ #LONG_MAX
+ 9223372036854775807L
+
+ )
+
+90 
+ #LONG_MAX
+ 2147483647L
+
+ )
+
+92 
+ #LONG_MIN
+ (-
+LONG_MAX
+ - 1L)
+
+ )
+
+95 #ià
+__WORDSIZE
+ == 64
+
+96 
+ #ULONG_MAX
+ 18446744073709551615UL
+
+ )
+
+98 
+ #ULONG_MAX
+ 4294967295UL
+
+ )
+
+101 #ifdeà
+__USE_ISOC99
+
+
+104 
+ #LLONG_MAX
+ 9223372036854775807LL
+
+ )
+
+105 
+ #LLONG_MIN
+ (-
+LLONG_MAX
+ - 1LL)
+
+ )
+
+108 
+ #ULLONG_MAX
+ 18446744073709551615ULL
+
+ )
+
+122 #ià
+defšed
+
+__GNUC__
+ && !defšed
+_GCC_LIMITS_H_
+
+
+124 #šþude_Ãxˆ<
+lim™s
+.
+h
+>
+
+129 #ifdeà
+__USE_ISOC99
+
+
+130 #iâdeà
+LLONG_MIN
+
+
+131 
+ #LLONG_MIN
+
+LONG_LONG_MIN
+
+
+ )
+
+133 #iâdeà
+LLONG_MAX
+
+
+134 
+ #LLONG_MAX
+
+LONG_LONG_MAX
+
+
+ )
+
+136 #iâdeà
+ULLONG_MAX
+
+
+137 
+ #ULLONG_MAX
+
+ULONG_LONG_MAX
+
+
+ )
+
+142 #ifdef
+__USE_POSIX
+
+
+144 
+ ~<b™s/posix1_lim.h
+>
+
+147 #ifdef
+__USE_POSIX2
+
+
+148 
+ ~<b™s/posix2_lim.h
+>
+
+151 #ifdef
+__USE_XOPEN
+
+
+152 
+ ~<b™s/xÝ’_lim.h
+>
+
+ @/usr/include/linux/limits.h
+
+1 #iâdeà
+_LINUX_LIMITS_H
+
+
+2 
+ #_LINUX_LIMITS_H
+
+
+ )
+
+4 
+ #NR_OPEN
+ 1024
+
+ )
+
+6 
+ #NGROUPS_MAX
+ 32
+
+ )
+
+7 
+ #ARG_MAX
+ 131072
+
+ )
+
+8 
+ #CHILD_MAX
+ 999
+
+ )
+
+9 
+ #OPEN_MAX
+ 256
+
+ )
+
+10 
+ #LINK_MAX
+ 127
+
+ )
+
+11 
+ #MAX_CANON
+ 255
+
+ )
+
+12 
+ #MAX_INPUT
+ 255
+
+ )
+
+13 
+ #NAME_MAX
+ 255
+
+ )
+
+14 
+ #PATH_MAX
+ 4096
+
+ )
+
+15 
+ #PIPE_BUF
+ 4096
+
+ )
+
+17 
+ #RTSIG_MAX
+ 32
+
+ )
+
+ @/usr/include/linux/param.h
+
+1 #iâdeà
+_LINUX_PARAM_H
+
+
+2 
+ #_LINUX_PARAM_H
+
+
+ )
+
+4 
+ ~<asm/·¿m.h
+>
+
+ @/usr/include/rpc/netdb.h
+
+36 #iâdeà
+_RPC_NETDB_H
+
+
+37 
+ #_RPC_NETDB_H
+ 1
+
+ )
+
+39 
+ ~<ã©u»s.h
+>
+
+41 
+ #__Ãed_size_t
+
+
+ )
+
+42 
+ ~<¡ddef.h
+>
+
+44
+__BEGIN_DECLS
+
+
+46 
+ s½ûÁ
+
+
+48 *
+ mr_Çme
+;
+
+49 **
+ mr_®Ÿ£s
+;
+
+50 
+ mr_numb”
+;
+
+53
+
+ $£ŒpûÁ
+ (
+__¡ayÝ’
+__THROW
+;
+
+54
+
+ $’d½ûÁ
+ (è
+__THROW
+;
+
+55
+
+½ûÁ
+ *
+ $g‘½cbyÇme
+ (
+__cÚ¡
+ *
+__Çme
+__THROW
+;
+
+56
+
+½ûÁ
+ *
+ $g‘½cbynumb”
+ (
+__numb”
+__THROW
+;
+
+57
+
+½ûÁ
+ *
+ $g‘½ûÁ
+ (è
+__THROW
+;
+
+59 #ifdeà
+__USE_MISC
+
+
+60
+
+ $g‘½cbyÇme_r
+ (
+__cÚ¡
+ *
+__Çme
+, 
+½ûÁ
+ *
+__»suÉ_buf
+,
+
+61 *
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+62 
+½ûÁ
+ **
+__»suÉ
+__THROW
+;
+
+64
+
+ $g‘½cbynumb”_r
+ (
+__numb”
+, 
+½ûÁ
+ *
+__»suÉ_buf
+,
+
+65 *
+__bufãr
+,
+size_t
+
+__buæ’
+,
+
+66 
+½ûÁ
+ **
+__»suÉ
+__THROW
+;
+
+68
+
+ $g‘½ûÁ_r
+ (
+½ûÁ
+ *
+__»suÉ_buf
+, *
+__bufãr
+,
+
+69
+size_t
+
+__buæ’
+, 
+½ûÁ
+ **
+__»suÉ
+__THROW
+;
+
+72
+__END_DECLS
+
+
+ @/usr/include/stdint.h
+
+23 #iâdeà
+_STDINT_H
+
+
+24 
+ #_STDINT_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+27 
+ ~<b™s/wch¬.h
+>
+
+28 
+ ~<b™s/wÜdsize.h
+>
+
+35 #iâdeà
+__št8_t_defšed
+
+
+36 
+ #__št8_t_defšed
+
+
+ )
+
+37 sigÃd 
+ tšt8_t
+;
+
+38 
+ tšt16_t
+;
+
+39 
+ tšt32_t
+;
+
+40 #ià
+__WORDSIZE
+ == 64
+
+41 
+ tšt64_t
+;
+
+43
+__ex‹nsiÚ__
+
+
+44 
+ tšt64_t
+;
+
+49 
+ tušt8_t
+;
+
+50 
+ tušt16_t
+;
+
+51 #iâdeà
+__ušt32_t_defšed
+
+
+52 
+ tušt32_t
+;
+
+53 
+ #__ušt32_t_defšed
+
+
+ )
+
+55 #ià
+__WORDSIZE
+ == 64
+
+56 
+ tušt64_t
+;
+
+58
+__ex‹nsiÚ__
+
+
+59 
+ tušt64_t
+;
+
+66 sigÃd 
+ tšt_Ëa¡8_t
+;
+
+67 
+ tšt_Ëa¡16_t
+;
+
+68 
+ tšt_Ëa¡32_t
+;
+
+69 #ià
+__WORDSIZE
+ == 64
+
+70 
+ tšt_Ëa¡64_t
+;
+
+72
+__ex‹nsiÚ__
+
+
+73 
+ tšt_Ëa¡64_t
+;
+
+77 
+ tušt_Ëa¡8_t
+;
+
+78 
+ tušt_Ëa¡16_t
+;
+
+79 
+ tušt_Ëa¡32_t
+;
+
+80 #ià
+__WORDSIZE
+ == 64
+
+81 
+ tušt_Ëa¡64_t
+;
+
+83
+__ex‹nsiÚ__
+
+
+84 
+ tušt_Ëa¡64_t
+;
+
+91 sigÃd 
+ tšt_ç¡8_t
+;
+
+92 #ià
+__WORDSIZE
+ == 64
+
+93 
+ tšt_ç¡16_t
+;
+
+94 
+ tšt_ç¡32_t
+;
+
+95 
+ tšt_ç¡64_t
+;
+
+97 
+ tšt_ç¡16_t
+;
+
+98 
+ tšt_ç¡32_t
+;
+
+99
+__ex‹nsiÚ__
+
+
+100 
+ tšt_ç¡64_t
+;
+
+104 
+ tušt_ç¡8_t
+;
+
+105 #ià
+__WORDSIZE
+ == 64
+
+106 
+ tušt_ç¡16_t
+;
+
+107 
+ tušt_ç¡32_t
+;
+
+108 
+ tušt_ç¡64_t
+;
+
+110 
+ tušt_ç¡16_t
+;
+
+111 
+ tušt_ç¡32_t
+;
+
+112
+__ex‹nsiÚ__
+
+
+113 
+ tušt_ç¡64_t
+;
+
+118 #ià
+__WORDSIZE
+ == 64
+
+119 #iâdeà
+__šŒ_t_defšed
+
+
+120 
+ tšŒ_t
+;
+
+121 
+ #__šŒ_t_defšed
+
+
+ )
+
+123 
+ tušŒ_t
+;
+
+125 #iâdeà
+__šŒ_t_defšed
+
+
+126 
+ tšŒ_t
+;
+
+127 
+ #__šŒ_t_defšed
+
+
+ )
+
+129 
+ tušŒ_t
+;
+
+134 #ià
+__WORDSIZE
+ == 64
+
+135 
+ tštmax_t
+;
+
+136 
+ tuštmax_t
+;
+
+138
+__ex‹nsiÚ__
+
+
+139 
+ tštmax_t
+;
+
+140
+__ex‹nsiÚ__
+
+
+141 
+ tuštmax_t
+;
+
+147 #ià!
+defšed
+
+__ýlu¥lus
+ || defšed
+__STDC_LIMIT_MACROS
+
+
+149 #ià
+__WORDSIZE
+ == 64
+
+150 
+ #__INT64_C
+(
+c
+èø##
+L
+
+
+ )
+
+151 
+ #__UINT64_C
+(
+c
+èø##
+UL
+
+
+ )
+
+153 
+ #__INT64_C
+(
+c
+èø##
+LL
+
+
+ )
+
+154 
+ #__UINT64_C
+(
+c
+èø##
+ULL
+
+
+ )
+
+160 
+ #INT8_MIN
+ (-128)
+
+ )
+
+161 
+ #INT16_MIN
+ (-32767-1)
+
+ )
+
+162 
+ #INT32_MIN
+ (-2147483647-1)
+
+ )
+
+163 
+ #INT64_MIN
+ (-
+ `__INT64_C
+(9223372036854775807)-1)
+
+ )
+
+165 
+ #INT8_MAX
+ (127)
+
+ )
+
+166 
+ #INT16_MAX
+ (32767)
+
+ )
+
+167 
+ #INT32_MAX
+ (2147483647)
+
+ )
+
+168 
+ #INT64_MAX
+ (
+ `__INT64_C
+(9223372036854775807))
+
+ )
+
+171 
+ #UINT8_MAX
+ (255)
+
+ )
+
+172 
+ #UINT16_MAX
+ (65535)
+
+ )
+
+173 
+ #UINT32_MAX
+ (4294967295U)
+
+ )
+
+174 
+ #UINT64_MAX
+ (
+ `__UINT64_C
+(18446744073709551615))
+
+ )
+
+178 
+ #INT_LEAST8_MIN
+ (-128)
+
+ )
+
+179 
+ #INT_LEAST16_MIN
+ (-32767-1)
+
+ )
+
+180 
+ #INT_LEAST32_MIN
+ (-2147483647-1)
+
+ )
+
+181 
+ #INT_LEAST64_MIN
+ (-
+ `__INT64_C
+(9223372036854775807)-1)
+
+ )
+
+183 
+ #INT_LEAST8_MAX
+ (127)
+
+ )
+
+184 
+ #INT_LEAST16_MAX
+ (32767)
+
+ )
+
+185 
+ #INT_LEAST32_MAX
+ (2147483647)
+
+ )
+
+186 
+ #INT_LEAST64_MAX
+ (
+ `__INT64_C
+(9223372036854775807))
+
+ )
+
+189 
+ #UINT_LEAST8_MAX
+ (255)
+
+ )
+
+190 
+ #UINT_LEAST16_MAX
+ (65535)
+
+ )
+
+191 
+ #UINT_LEAST32_MAX
+ (4294967295U)
+
+ )
+
+192 
+ #UINT_LEAST64_MAX
+ (
+ `__UINT64_C
+(18446744073709551615))
+
+ )
+
+196 
+ #INT_FAST8_MIN
+ (-128)
+
+ )
+
+197 #ià
+__WORDSIZE
+ == 64
+
+198 
+ #INT_FAST16_MIN
+ (-9223372036854775807L-1)
+
+ )
+
+199 
+ #INT_FAST32_MIN
+ (-9223372036854775807L-1)
+
+ )
+
+201 
+ #INT_FAST16_MIN
+ (-2147483647-1)
+
+ )
+
+202 
+ #INT_FAST32_MIN
+ (-2147483647-1)
+
+ )
+
+204 
+ #INT_FAST64_MIN
+ (-
+ `__INT64_C
+(9223372036854775807)-1)
+
+ )
+
+206 
+ #INT_FAST8_MAX
+ (127)
+
+ )
+
+207 #ià
+__WORDSIZE
+ == 64
+
+208 
+ #INT_FAST16_MAX
+ (9223372036854775807L)
+
+ )
+
+209 
+ #INT_FAST32_MAX
+ (9223372036854775807L)
+
+ )
+
+211 
+ #INT_FAST16_MAX
+ (2147483647)
+
+ )
+
+212 
+ #INT_FAST32_MAX
+ (2147483647)
+
+ )
+
+214 
+ #INT_FAST64_MAX
+ (
+ `__INT64_C
+(9223372036854775807))
+
+ )
+
+217 
+ #UINT_FAST8_MAX
+ (255)
+
+ )
+
+218 #ià
+__WORDSIZE
+ == 64
+
+219 
+ #UINT_FAST16_MAX
+ (18446744073709551615UL)
+
+ )
+
+220 
+ #UINT_FAST32_MAX
+ (18446744073709551615UL)
+
+ )
+
+222 
+ #UINT_FAST16_MAX
+ (4294967295U)
+
+ )
+
+223 
+ #UINT_FAST32_MAX
+ (4294967295U)
+
+ )
+
+225 
+ #UINT_FAST64_MAX
+ (
+ `__UINT64_C
+(18446744073709551615))
+
+ )
+
+229 #ià
+__WORDSIZE
+ == 64
+
+230 
+ #INTPTR_MIN
+ (-9223372036854775807L-1)
+
+ )
+
+231 
+ #INTPTR_MAX
+ (9223372036854775807L)
+
+ )
+
+232 
+ #UINTPTR_MAX
+ (18446744073709551615UL)
+
+ )
+
+234 
+ #INTPTR_MIN
+ (-2147483647-1)
+
+ )
+
+235 
+ #INTPTR_MAX
+ (2147483647)
+
+ )
+
+236 
+ #UINTPTR_MAX
+ (4294967295U)
+
+ )
+
+241 
+ #INTMAX_MIN
+ (-
+ `__INT64_C
+(9223372036854775807)-1)
+
+ )
+
+243 
+ #INTMAX_MAX
+ (
+ `__INT64_C
+(9223372036854775807))
+
+ )
+
+246 
+ #UINTMAX_MAX
+ (
+ `__UINT64_C
+(18446744073709551615))
+
+ )
+
+252 #ià
+__WORDSIZE
+ == 64
+
+253 
+ #PTRDIFF_MIN
+ (-9223372036854775807L-1)
+
+ )
+
+254 
+ #PTRDIFF_MAX
+ (9223372036854775807L)
+
+ )
+
+256 
+ #PTRDIFF_MIN
+ (-2147483647-1)
+
+ )
+
+257 
+ #PTRDIFF_MAX
+ (2147483647)
+
+ )
+
+261 
+ #SIG_ATOMIC_MIN
+ (-2147483647-1)
+
+ )
+
+262 
+ #SIG_ATOMIC_MAX
+ (2147483647)
+
+ )
+
+265 #ià
+__WORDSIZE
+ == 64
+
+266 
+ #SIZE_MAX
+ (18446744073709551615UL)
+
+ )
+
+268 
+ #SIZE_MAX
+ (4294967295U)
+
+ )
+
+272 #iâdeà
+WCHAR_MIN
+
+
+274 
+ #WCHAR_MIN
+
+__WCHAR_MIN
+
+
+ )
+
+275 
+ #WCHAR_MAX
+
+__WCHAR_MAX
+
+
+ )
+
+279 
+ #WINT_MIN
+ (0u)
+
+ )
+
+280 
+ #WINT_MAX
+ (4294967295u)
+
+ )
+
+287 #ià!
+defšed
+
+__ýlu¥lus
+ || defšed
+__STDC_CONSTANT_MACROS
+
+
+290 
+ #INT8_C
+(
+c
+ )
+c
+
+291 
+ #INT16_C
+(
+c
+ )
+c
+
+292 
+ #INT32_C
+(
+c
+ )
+c
+
+293 #ià
+__WORDSIZE
+ == 64
+
+294 
+ #INT64_C
+(
+c
+èø##
+L
+
+
+ )
+
+296 
+ #INT64_C
+(
+c
+èø##
+LL
+
+
+ )
+
+300 
+ #UINT8_C
+(
+c
+èø##
+U
+
+
+ )
+
+301 
+ #UINT16_C
+(
+c
+èø##
+U
+
+
+ )
+
+302 
+ #UINT32_C
+(
+c
+èø##
+U
+
+
+ )
+
+303 #ià
+__WORDSIZE
+ == 64
+
+304 
+ #UINT64_C
+(
+c
+èø##
+UL
+
+
+ )
+
+306 
+ #UINT64_C
+(
+c
+èø##
+ULL
+
+
+ )
+
+310 #ià
+__WORDSIZE
+ == 64
+
+311 
+ #INTMAX_C
+(
+c
+èø##
+L
+
+
+ )
+
+312 
+ #UINTMAX_C
+(
+c
+èø##
+UL
+
+
+ )
+
+314 
+ #INTMAX_C
+(
+c
+èø##
+LL
+
+
+ )
+
+315 
+ #UINTMAX_C
+(
+c
+èø##
+ULL
+
+
+ )
+
+ @/usr/include/sys/sysmacros.h
+
+20 #iâdeà
+_SYS_SYSMACROS_H
+
+
+21 
+ #_SYS_SYSMACROS_H
+ 1
+
+ )
+
+27 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+28 
+ #majÜ
+(
+dev
+è(()(((devè>> 8è& 0xff))
+
+ )
+
+29 
+ #mšÜ
+(
+dev
+è(()((devè& 0xff))
+
+ )
+
+30 
+ #makedev
+(
+majÜ
+,
+mšÜ
+) (((() (major)) << 8) \
+
+31 | ((è(
+mšÜ
+)))
+
+ )
+
+35 
+ ~<’dŸn.h
+>
+
+36 #ià
+__BYTE_ORDER
+ =ð
+__BIG_ENDIAN
+
+
+37 
+ #majÜ
+(
+dev
+è(((dev).
+__v®
+[1] >> 8è& 0xff)
+
+ )
+
+38 
+ #mšÜ
+(
+dev
+è((dev).
+__v®
+[1] & 0xff)
+
+ )
+
+39 
+ #makedev
+(
+majÜ
+,
+mšÜ
+) { 0, (((() (major)) << 8) \
+
+40 | ((è(
+mšÜ
+))è}
+
+ )
+
+42 
+ #majÜ
+(
+dev
+è(((dev).
+__v®
+[0] >> 8è& 0xff)
+
+ )
+
+43 
+ #mšÜ
+(
+dev
+è((dev).
+__v®
+[0] & 0xff)
+
+ )
+
+44 
+ #makedev
+(
+majÜ
+,
+mšÜ
+) { (((() (major)) << 8) \
+
+45 | ((è(
+mšÜ
+))), 0 }
+
+ )
+
+ @/usr/include/sys/ttydefaults.h
+
+40 #iâdeà
+_SYS_TTYDEFAULTS_H_
+
+
+41 
+ #_SYS_TTYDEFAULTS_H_
+
+
+ )
+
+46 
+ #TTYDEF_IFLAG
+ (
+BRKINT
+ |
+ISTRIP
+ |
+ICRNL
+ |
+IMAXBEL
+ |
+IXON
+ |
+IXANY
+)
+
+ )
+
+47 
+ #TTYDEF_OFLAG
+ (
+OPOST
+ |
+ONLCR
+ |
+XTABS
+)
+
+ )
+
+48 
+ #TTYDEF_LFLAG
+ (
+ECHO
+ |
+ICANON
+ |
+ISIG
+ |
+IEXTEN
+ |
+ECHOE
+|
+ECHOKE
+|
+ECHOCTL
+)
+
+ )
+
+49 
+ #TTYDEF_CFLAG
+ (
+CREAD
+ |
+CS7
+ |
+PARENB
+ |
+HUPCL
+)
+
+ )
+
+50 
+ #TTYDEF_SPEED
+ (
+B9600
+)
+
+ )
+
+55 
+ #CTRL
+(
+x
+è(x&037)
+
+ )
+
+56 
+ #CEOF
+
+ `CTRL
+('d')
+
+ )
+
+57 #ifdeà
+_POSIX_VDISABLE
+
+
+58 
+ #CEOL
+
+_POSIX_VDISABLE
+
+
+ )
+
+60 
+ #CEOL
+ '\0'
+
+ )
+
+62 
+ #CERASE
+ 0177
+
+ )
+
+63 
+ #CINTR
+
+ `CTRL
+('c')
+
+ )
+
+64 #ifdeà
+_POSIX_VDISABLE
+
+
+65 
+ #CSTATUS
+
+_POSIX_VDISABLE
+
+
+ )
+
+67 
+ #CSTATUS
+ '\0'
+
+ )
+
+69 
+ #CKILL
+
+ `CTRL
+('u')
+
+ )
+
+70 
+ #CMIN
+ 1
+
+ )
+
+71 
+ #CQUIT
+ 034
+
+ )
+
+72 
+ #CSUSP
+
+ `CTRL
+('z')
+
+ )
+
+73 
+ #CTIME
+ 0
+
+ )
+
+74 
+ #CDSUSP
+
+ `CTRL
+('y')
+
+ )
+
+75 
+ #CSTART
+
+ `CTRL
+('q')
+
+ )
+
+76 
+ #CSTOP
+
+ `CTRL
+('s')
+
+ )
+
+77 
+ #CLNEXT
+
+ `CTRL
+('v')
+
+ )
+
+78 
+ #CDISCARD
+
+ `CTRL
+('o')
+
+ )
+
+79 
+ #CWERASE
+
+ `CTRL
+('w')
+
+ )
+
+80 
+ #CREPRINT
+
+ `CTRL
+('r')
+
+ )
+
+81 
+ #CEOT
+
+CEOF
+
+
+ )
+
+83 
+ #CBRK
+
+CEOL
+
+
+ )
+
+84 
+ #CRPRNT
+
+CREPRINT
+
+
+ )
+
+85 
+ #CFLUSH
+
+CDISCARD
+
+
+ )
+
+93 #ifdeà
+TTYDEFCHARS
+
+
+94
+cc_t
+
+ g‰ydefch¬s
+[
+NCCS
+] = {
+
+95
+CEOF
+,
+CEOL
+, CEOL,
+CERASE
+,
+CWERASE
+,
+CKILL
+,
+CREPRINT
+,
+
+96
+_POSIX_VDISABLE
+,
+CINTR
+,
+CQUIT
+,
+CSUSP
+,
+CDSUSP
+,
+CSTART
+,
+CSTOP
+,
+CLNEXT
+,
+
+97
+CDISCARD
+,
+CMIN
+,
+CTIME
+,
+CSTATUS
+,
+_POSIX_VDISABLE
+
+
+99 #undeà
+TTYDEFCHARS
+
+
+ @/usr/include/sys/uio.h
+
+19 #iâdeà
+_SYS_UIO_H
+
+
+20 
+ #_SYS_UIO_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+24 
+ ~<sys/ty³s.h
+>
+
+26
+ g__BEGIN_DECLS
+
+
+29 
+ ~<b™s/uio.h
+>
+
+37
+ssize_t
+
+ $»adv
+ (
+__fd
+,
+__cÚ¡
+ 
+iovec
+ *
+__veùÜ
+, 
+__couÁ
+)
+
+38
+__THROW
+;
+
+45
+ssize_t
+
+ $wr™ev
+ (
+__fd
+,
+__cÚ¡
+ 
+iovec
+ *
+__veùÜ
+, 
+__couÁ
+)
+
+46
+__THROW
+;
+
+48
+__END_DECLS
+
+
+ @/usr/include/ucontext.h
+
+21 #iâdeà
+_UCONTEXT_H
+
+
+22 
+ #_UCONTEXT_H
+ 1
+
+ )
+
+24 
+ ~<ã©u»s.h
+>
+
+27 
+ ~<sys/ucÚ‹xt.h
+>
+
+29
+__BEGIN_DECLS
+
+
+32
+
+ $g‘cÚ‹xt
+ (
+ucÚ‹xt_t
+ *
+__uý
+__THROW
+;
+
+35
+
+ $£tcÚ‹xt
+ (
+__cÚ¡
+
+ucÚ‹xt_t
+ *
+__uý
+__THROW
+;
+
+39
+
+ $sw­cÚ‹xt
+ (
+ucÚ‹xt_t
+ *
+__»¡riù
+
+__ouý
+,
+
+40
+__cÚ¡
+
+ucÚ‹xt_t
+ *
+__»¡riù
+
+__uý
+__THROW
+;
+
+48
+
+ `makecÚ‹xt
+ (
+ucÚ‹xt_t
+ *
+__uý
+, (*
+__func
+) (),
+
+49 
+__¬gc
+, ...è
+__THROW
+;
+
+51
+__END_DECLS
+
+
+ @/usr/include/xlocale.h
+
+21 #iâdeà
+_XLOCALE_H
+
+
+22 
+ #_XLOCALE_H
+ 1
+
+ )
+
+28 
+ s__loÿË_¡ruù
+
+
+31 
+loÿË_d©a
+ *
+ m__loÿËs
+[13];
+
+34 cÚ¡ *
+ m__ùy³_b
+;
+
+35 cÚ¡ *
+ m__ùy³_tÞow”
+;
+
+36 cÚ¡ *
+ m__ùy³_touµ”
+;
+
+37 } *
+ t__loÿË_t
+;
+
+ @/usr/include/_G_config.h
+
+4 #iâdeà
+_G_cÚfig_h
+
+
+5 
+ #_G_cÚfig_h
+ 1
+
+ )
+
+9 
+ ~<b™s/ty³s.h
+>
+
+10 
+ #__Ãed_size_t
+
+
+ )
+
+11 
+ #__Ãed_wch¬_t
+
+
+ )
+
+12 
+ #__Ãed_wšt_t
+
+
+ )
+
+13 
+ #__Ãed_NULL
+
+
+ )
+
+14 
+ ~<¡ddef.h
+>
+
+15 #iâdeà
+_WINT_T
+
+
+20 
+ #_WINT_T
+
+
+ )
+
+21 
+ twšt_t
+;
+
+23 
+ #__Ãed_mb¡©e_t
+
+
+ )
+
+24 
+ ~<wch¬.h
+>
+
+25 
+ #_G_size_t
+
+size_t
+
+
+ )
+
+28
+__off_t
+
+ m__pos
+;
+
+29
+__mb¡©e_t
+
+ m__¡©e
+;
+
+30 }
+ t_G_åos_t
+;
+
+33
+__off64_t
+
+ m__pos
+;
+
+34
+__mb¡©e_t
+
+ m__¡©e
+;
+
+35 }
+ t_G_åos64_t
+;
+
+36 
+ #_G_ssize_t
+
+__ssize_t
+
+
+ )
+
+37 
+ #_G_off_t
+
+__off_t
+
+
+ )
+
+38 
+ #_G_off64_t
+
+__off64_t
+
+
+ )
+
+39 
+ #_G_pid_t
+
+__pid_t
+
+
+ )
+
+40 
+ #_G_uid_t
+
+__uid_t
+
+
+ )
+
+41 
+ #_G_wch¬_t
+
+wch¬_t
+
+
+ )
+
+42 
+ #_G_wšt_t
+
+wšt_t
+
+
+ )
+
+43 
+ #_G_¡©64
+
+¡©64
+
+
+ )
+
+44 
+ ~<gcÚv.h
+>
+
+47 
+__gcÚv_šfo
+
+ m__cd
+;
+
+50 
+__gcÚv_šfo
+
+ m__cd
+;
+
+51 
+__gcÚv_¡•_d©a
+
+ m__d©a
+;
+
+52 }
+ m__combšed
+;
+
+53 }
+ t_G_icÚv_t
+;
+
+55 
+ t_G_št16_t
+
+ t__©Œibu‹__
+ ((
+ t__mode__
+ (
+ t__HI__
+)));
+
+56 
+ t_G_št32_t
+
+ t__©Œibu‹__
+ ((
+ t__mode__
+ (
+ t__SI__
+)));
+
+57 
+ t_G_ušt16_t
+
+ t__©Œibu‹__
+ ((
+ t__mode__
+ (
+ t__HI__
+)));
+
+58 
+ t_G_ušt32_t
+
+ t__©Œibu‹__
+ ((
+ t__mode__
+ (
+ t__SI__
+)));
+
+60 
+ #_G_HAVE_BOOL
+ 1
+
+ )
+
+64 
+ #_G_HAVE_ATEXIT
+ 1
+
+ )
+
+65 
+ #_G_HAVE_SYS_CDEFS
+ 1
+
+ )
+
+66 
+ #_G_HAVE_SYS_WAIT
+ 1
+
+ )
+
+67 
+ #_G_NEED_STDARG_H
+ 1
+
+ )
+
+68 
+ #_G_va_li¡
+
+__gnuc_va_li¡
+
+
+ )
+
+70 
+ #_G_HAVE_PRINTF_FP
+ 1
+
+ )
+
+71 
+ #_G_HAVE_MMAP
+ 1
+
+ )
+
+72 
+ #_G_HAVE_LONG_DOUBLE_IO
+ 1
+
+ )
+
+73 
+ #_G_HAVE_IO_FILE_OPEN
+ 1
+
+ )
+
+74 
+ #_G_HAVE_IO_GETLINE_INFO
+ 1
+
+ )
+
+76 
+ #_G_IO_IO_FILE_VERSION
+ 0x20001
+
+ )
+
+78 
+ #_G_OPEN64
+
+__Ý’64
+
+
+ )
+
+79 
+ #_G_LSEEK64
+
+__l£ek64
+
+
+ )
+
+80 
+ #_G_MMAP64
+
+__mm­64
+
+
+ )
+
+81 
+ #_G_FSTAT64
+(
+fd
+,
+buf
+ `__fx¡©64
+ (
+_STAT_VER
+, fd, buf)
+
+ )
+
+84 
+ #_G_HAVE_ST_BLKSIZE
+
+ `defšed
+ (
+_STATBUF_ST_BLKSIZE
+)
+
+ )
+
+86 
+ #_G_BUFSIZ
+ 8192
+
+ )
+
+89 
+ #_G_NAMES_HAVE_UNDERSCORE
+ 0
+
+ )
+
+90 
+ #_G_VTABLE_LABEL_HAS_LENGTH
+ 1
+
+ )
+
+91 
+ #_G_USING_THUNKS
+ 1
+
+ )
+
+92 
+ #_G_VTABLE_LABEL_PREFIX
+ "__vt_"
+
+ )
+
+93 
+ #_G_VTABLE_LABEL_PREFIX_ID
+
+__vt_
+
+
+ )
+
+96 #ià
+defšed
+
+__ýlu¥lus
+ || defšed
+__STDC__
+
+
+97 
+ #_G_ARGS
+(
+ARGLIST
+ )
+ARGLIST
+
+99 
+ #_G_ARGS
+(
+ARGLIST
+è()
+
+ )
+
+ @/usr/include/asm/ioctls.h
+
+1 #iâdeà
+__ARCH_I386_IOCTLS_H__
+
+
+2 
+ #__ARCH_I386_IOCTLS_H__
+
+
+ )
+
+4 
+ ~<asm/ioùl.h
+>
+
+8 
+ #TCGETS
+ 0x5401
+
+ )
+
+9 
+ #TCSETS
+ 0x5402
+
+ )
+
+10 
+ #TCSETSW
+ 0x5403
+
+ )
+
+11 
+ #TCSETSF
+ 0x5404
+
+ )
+
+12 
+ #TCGETA
+ 0x5405
+
+ )
+
+13 
+ #TCSETA
+ 0x5406
+
+ )
+
+14 
+ #TCSETAW
+ 0x5407
+
+ )
+
+15 
+ #TCSETAF
+ 0x5408
+
+ )
+
+16 
+ #TCSBRK
+ 0x5409
+
+ )
+
+17 
+ #TCXONC
+ 0x540A
+
+ )
+
+18 
+ #TCFLSH
+ 0x540B
+
+ )
+
+19 
+ #TIOCEXCL
+ 0x540C
+
+ )
+
+20 
+ #TIOCNXCL
+ 0x540D
+
+ )
+
+21 
+ #TIOCSCTTY
+ 0x540E
+
+ )
+
+22 
+ #TIOCGPGRP
+ 0x540F
+
+ )
+
+23 
+ #TIOCSPGRP
+ 0x5410
+
+ )
+
+24 
+ #TIOCOUTQ
+ 0x5411
+
+ )
+
+25 
+ #TIOCSTI
+ 0x5412
+
+ )
+
+26 
+ #TIOCGWINSZ
+ 0x5413
+
+ )
+
+27 
+ #TIOCSWINSZ
+ 0x5414
+
+ )
+
+28 
+ #TIOCMGET
+ 0x5415
+
+ )
+
+29 
+ #TIOCMBIS
+ 0x5416
+
+ )
+
+30 
+ #TIOCMBIC
+ 0x5417
+
+ )
+
+31 
+ #TIOCMSET
+ 0x5418
+
+ )
+
+32 
+ #TIOCGSOFTCAR
+ 0x5419
+
+ )
+
+33 
+ #TIOCSSOFTCAR
+ 0x541A
+
+ )
+
+34 
+ #FIONREAD
+ 0x541B
+
+ )
+
+35 
+ #TIOCINQ
+
+FIONREAD
+
+
+ )
+
+36 
+ #TIOCLINUX
+ 0x541C
+
+ )
+
+37 
+ #TIOCCONS
+ 0x541D
+
+ )
+
+38 
+ #TIOCGSERIAL
+ 0x541E
+
+ )
+
+39 
+ #TIOCSSERIAL
+ 0x541F
+
+ )
+
+40 
+ #TIOCPKT
+ 0x5420
+
+ )
+
+41 
+ #FIONBIO
+ 0x5421
+
+ )
+
+42 
+ #TIOCNOTTY
+ 0x5422
+
+ )
+
+43 
+ #TIOCSETD
+ 0x5423
+
+ )
+
+44 
+ #TIOCGETD
+ 0x5424
+
+ )
+
+45 
+ #TCSBRKP
+ 0x5425
+
+ )
+
+46 
+ #TIOCTTYGSTRUCT
+ 0x5426
+
+ )
+
+47 
+ #TIOCSBRK
+ 0x5427
+
+ )
+
+48 
+ #TIOCCBRK
+ 0x5428
+
+ )
+
+49 
+ #TIOCGSID
+ 0x5429
+
+ )
+
+50 
+ #TIOCGPTN
+
+ `_IOR
+('T',0x30, è
+
+ )
+
+51 
+ #TIOCSPTLCK
+
+ `_IOW
+('T',0x31, è
+
+ )
+
+53 
+ #FIONCLEX
+ 0x5450
+
+ )
+
+54 
+ #FIOCLEX
+ 0x5451
+
+ )
+
+55 
+ #FIOASYNC
+ 0x5452
+
+ )
+
+56 
+ #TIOCSERCONFIG
+ 0x5453
+
+ )
+
+57 
+ #TIOCSERGWILD
+ 0x5454
+
+ )
+
+58 
+ #TIOCSERSWILD
+ 0x5455
+
+ )
+
+59 
+ #TIOCGLCKTRMIOS
+ 0x5456
+
+ )
+
+60 
+ #TIOCSLCKTRMIOS
+ 0x5457
+
+ )
+
+61 
+ #TIOCSERGSTRUCT
+ 0x5458
+
+ )
+
+62 
+ #TIOCSERGETLSR
+ 0x5459
+
+ )
+
+63 
+ #TIOCSERGETMULTI
+ 0x545A
+
+ )
+
+64 
+ #TIOCSERSETMULTI
+ 0x545B
+
+ )
+
+66 
+ #TIOCMIWAIT
+ 0x545C
+
+ )
+
+67 
+ #TIOCGICOUNT
+ 0x545D
+
+ )
+
+68 
+ #TIOCGHAYESESP
+ 0x545E
+
+ )
+
+69 
+ #TIOCSHAYESESP
+ 0x545F
+
+ )
+
+70 
+ #FIOQSIZE
+ 0x5460
+
+ )
+
+73 
+ #TIOCPKT_DATA
+ 0
+
+ )
+
+74 
+ #TIOCPKT_FLUSHREAD
+ 1
+
+ )
+
+75 
+ #TIOCPKT_FLUSHWRITE
+ 2
+
+ )
+
+76 
+ #TIOCPKT_STOP
+ 4
+
+ )
+
+77 
+ #TIOCPKT_START
+ 8
+
+ )
+
+78 
+ #TIOCPKT_NOSTOP
+ 16
+
+ )
+
+79 
+ #TIOCPKT_DOSTOP
+ 32
+
+ )
+
+81 
+ #TIOCSER_TEMT
+ 0x01
+
+ )
+
+ @/usr/include/asm/param.h
+
+1 #iâdeà
+_ASMi386_PARAM_H
+
+
+2 
+ #_ASMi386_PARAM_H
+
+
+ )
+
+4 #iâdeà
+HZ
+
+
+5 
+ #HZ
+ 100
+
+ )
+
+8 
+ #EXEC_PAGESIZE
+ 4096
+
+ )
+
+10 #iâdeà
+NGROUPS
+
+
+11 
+ #NGROUPS
+ 32
+
+ )
+
+14 #iâdeà
+NOGROUP
+
+
+15 
+ #NOGROUP
+ (-1)
+
+ )
+
+18 
+ #MAXHOSTNAMELEN
+ 64
+
+ )
+
+ @/usr/include/asm/sigcontext.h
+
+1 #iâdeà
+_ASMi386_SIGCONTEXT_H
+
+
+2 
+ #_ASMi386_SIGCONTEXT_H
+
+
+ )
+
+18 
+ s_å»g
+ {
+
+19 
+ msignifiÿnd
+[4];
+
+20 
+ mexpÚ’t
+;
+
+23 
+ s_åx»g
+ {
+
+24 
+ msignifiÿnd
+[4];
+
+25 
+ mexpÚ’t
+;
+
+26 
+ m·ddšg
+[3];
+
+29 
+ s_xmm»g
+ {
+
+30 
+ m–em’t
+[4];
+
+33 
+ s_å¡©e
+ {
+
+35 
+ mcw
+;
+
+36 
+ msw
+;
+
+37 
+ mg
+;
+
+38 
+ moff
+;
+
+39 
+ mcs£l
+;
+
+40 
+ md©aoff
+;
+
+41 
+ md©a£l
+;
+
+42 
+_å»g
+
+ m_¡
+[8];
+
+43 
+ m¡©us
+;
+
+44 
+ mmagic
+;
+
+47 
+ m_fx¤_’v
+[6];
+
+48 
+ mmxc¤
+;
+
+49 
+ mȣrved
+;
+
+50 
+_åx»g
+
+ m_fx¤_¡
+[8];
+
+51 
+_xmm»g
+
+ m_xmm
+[8];
+
+52 
+ m·ddšg
+[56];
+
+55 
+ #X86_FXSR_MAGIC
+ 0x0000
+
+ )
+
+57 
+ ssigcÚ‹xt
+ {
+
+58 
+ mgs
+,
+ m__gsh
+;
+
+59 
+ mfs
+,
+ m__fsh
+;
+
+60 
+ mes
+,
+ m__esh
+;
+
+61 
+ mds
+,
+ m__dsh
+;
+
+62 
+ medi
+;
+
+63 
+ mesi
+;
+
+64 
+ mebp
+;
+
+65 
+ me¥
+;
+
+66 
+ mebx
+;
+
+67 
+ medx
+;
+
+68 
+ mecx
+;
+
+69 
+ m—x
+;
+
+70 
+ mŒ­no
+;
+
+71 
+ m”r
+;
+
+72 
+ me
+;
+
+73 
+ mcs
+,
+ m__csh
+;
+
+74 
+ meæags
+;
+
+75 
+ me¥_©_sigÇl
+;
+
+76 
+ mss
+,
+ m__ssh
+;
+
+77 
+_å¡©e
+ *
+ må¡©e
+;
+
+78 
+ mÞdmask
+;
+
+79 
+ mü2
+;
+
+ @/usr/include/asm/socket.h
+
+1 #iâdeà
+_ASM_SOCKET_H
+
+
+2 
+ #_ASM_SOCKET_H
+
+
+ )
+
+4 
+ ~<asm/sockios.h
+>
+
+7 
+ #SOL_SOCKET
+ 1
+
+ )
+
+9 
+ #SO_DEBUG
+ 1
+
+ )
+
+10 
+ #SO_REUSEADDR
+ 2
+
+ )
+
+11 
+ #SO_TYPE
+ 3
+
+ )
+
+12 
+ #SO_ERROR
+ 4
+
+ )
+
+13 
+ #SO_DONTROUTE
+ 5
+
+ )
+
+14 
+ #SO_BROADCAST
+ 6
+
+ )
+
+15 
+ #SO_SNDBUF
+ 7
+
+ )
+
+16 
+ #SO_RCVBUF
+ 8
+
+ )
+
+17 
+ #SO_KEEPALIVE
+ 9
+
+ )
+
+18 
+ #SO_OOBINLINE
+ 10
+
+ )
+
+19 
+ #SO_NO_CHECK
+ 11
+
+ )
+
+20 
+ #SO_PRIORITY
+ 12
+
+ )
+
+21 
+ #SO_LINGER
+ 13
+
+ )
+
+22 
+ #SO_BSDCOMPAT
+ 14
+
+ )
+
+24 
+ #SO_PASSCRED
+ 16
+
+ )
+
+25 
+ #SO_PEERCRED
+ 17
+
+ )
+
+26 
+ #SO_RCVLOWAT
+ 18
+
+ )
+
+27 
+ #SO_SNDLOWAT
+ 19
+
+ )
+
+28 
+ #SO_RCVTIMEO
+ 20
+
+ )
+
+29 
+ #SO_SNDTIMEO
+ 21
+
+ )
+
+32 
+ #SO_SECURITY_AUTHENTICATION
+ 22
+
+ )
+
+33 
+ #SO_SECURITY_ENCRYPTION_TRANSPORT
+ 23
+
+ )
+
+34 
+ #SO_SECURITY_ENCRYPTION_NETWORK
+ 24
+
+ )
+
+36 
+ #SO_BINDTODEVICE
+ 25
+
+ )
+
+39 
+ #SO_ATTACH_FILTER
+ 26
+
+ )
+
+40 
+ #SO_DETACH_FILTER
+ 27
+
+ )
+
+42 
+ #SO_PEERNAME
+ 28
+
+ )
+
+43 
+ #SO_TIMESTAMP
+ 29
+
+ )
+
+44 
+ #SCM_TIMESTAMP
+
+SO_TIMESTAMP
+
+
+ )
+
+46 
+ #SO_ACCEPTCONN
+ 30
+
+ )
+
+49 #ià
+defšed
+(
+__KERNEL__
+è|| !defšed(
+__GLIBC__
+) || (__GLIBC__ < 2)
+
+51 
+ #SOCK_STREAM
+ 1
+
+ )
+
+52 
+ #SOCK_DGRAM
+ 2
+
+ )
+
+53 
+ #SOCK_RAW
+ 3
+
+ )
+
+54 
+ #SOCK_RDM
+ 4
+
+ )
+
+55 
+ #SOCK_SEQPACKET
+ 5
+
+ )
+
+56 
+ #SOCK_PACKET
+ 10
+
+ )
+
+61 
+ #SOCK_MAX
+ (
+SOCK_PACKET
++1)
+
+ )
+
+ @/usr/include/bits/endian.h
+
+3 #iâdeà
+_ENDIAN_H
+
+
+7 
+ #__BYTE_ORDER
+
+__LITTLE_ENDIAN
+
+
+ )
+
+ @/usr/include/bits/local_lim.h
+
+25 #iâdeà
+NR_OPEN
+
+
+26 
+ #__undef_NR_OPEN
+
+
+ )
+
+28 #iâdeà
+LINK_MAX
+
+
+29 
+ #__undef_LINK_MAX
+
+
+ )
+
+31 #iâdeà
+OPEN_MAX
+
+
+32 
+ #__undef_OPEN_MAX
+
+
+ )
+
+36 
+ ~<lšux/lim™s.h
+>
+
+39 #ifdeà
+__undef_NR_OPEN
+
+
+40 #undeà
+NR_OPEN
+
+
+41 #undeà
+__undef_NR_OPEN
+
+
+44 #ifdeà
+__undef_LINK_MAX
+
+
+45 #undeà
+LINK_MAX
+
+
+46 #undeà
+__undef_LINK_MAX
+
+
+49 #ifdeà
+__undef_OPEN_MAX
+
+
+50 #undeà
+OPEN_MAX
+
+
+51 #undeà
+__undef_OPEN_MAX
+
+
+55 
+ #_POSIX_THREAD_KEYS_MAX
+ 128
+
+ )
+
+57 
+ #PTHREAD_KEYS_MAX
+ 1024
+
+ )
+
+60 
+ #_POSIX_THREAD_DESTRUCTOR_ITERATIONS
+ 4
+
+ )
+
+62 
+ #PTHREAD_DESTRUCTOR_ITERATIONS
+
+_POSIX_THREAD_DESTRUCTOR_ITERATIONS
+
+
+ )
+
+65 
+ #_POSIX_THREAD_THREADS_MAX
+ 64
+
+ )
+
+67 
+ #PTHREAD_THREADS_MAX
+ 1024
+
+ )
+
+71 
+ #AIO_PRIO_DELTA_MAX
+ 20
+
+ )
+
+74 
+ #PTHREAD_STACK_MIN
+ 16384
+
+ )
+
+77 
+ #TIMER_MAX
+ 256
+
+ )
+
+80 
+ #DELAYTIMER_MAX
+ 2147483647
+
+ )
+
+ @/usr/include/bits/posix2_lim.h
+
+23 #iâdef
+_BITS_POSIX2_LIM_H
+
+
+24 
+ #_BITS_POSIX2_LIM_H
+ 1
+
+ )
+
+28 
+ #_POSIX2_BC_BASE_MAX
+ 99
+
+ )
+
+31 
+ #_POSIX2_BC_DIM_MAX
+ 2048
+
+ )
+
+34 
+ #_POSIX2_BC_SCALE_MAX
+ 99
+
+ )
+
+37 
+ #_POSIX2_BC_STRING_MAX
+ 1000
+
+ )
+
+41 
+ #_POSIX2_COLL_WEIGHTS_MAX
+ 2
+
+ )
+
+45 
+ #_POSIX2_EXPR_NEST_MAX
+ 32
+
+ )
+
+48 
+ #_POSIX2_LINE_MAX
+ 2048
+
+ )
+
+52 
+ #_POSIX2_RE_DUP_MAX
+ 255
+
+ )
+
+56 
+ #_POSIX2_CHARCLASS_NAME_MAX
+ 14
+
+ )
+
+63 #iâdef
+BC_BASE_MAX
+
+
+64 
+ #BC_BASE_MAX
+
+_POSIX2_BC_BASE_MAX
+
+
+ )
+
+66 #iâdef
+BC_DIM_MAX
+
+
+67 
+ #BC_DIM_MAX
+
+_POSIX2_BC_DIM_MAX
+
+
+ )
+
+69 #iâdef
+BC_SCALE_MAX
+
+
+70 
+ #BC_SCALE_MAX
+
+_POSIX2_BC_SCALE_MAX
+
+
+ )
+
+72 #iâdef
+BC_STRING_MAX
+
+
+73 
+ #BC_STRING_MAX
+
+_POSIX2_BC_STRING_MAX
+
+
+ )
+
+75 #iâdef
+COLL_WEIGHTS_MAX
+
+
+76 
+ #COLL_WEIGHTS_MAX
+ 255
+
+ )
+
+78 #iâdef
+EXPR_NEST_MAX
+
+
+79 
+ #EXPR_NEST_MAX
+
+_POSIX2_EXPR_NEST_MAX
+
+
+ )
+
+81 #iâdef
+LINE_MAX
+
+
+82 
+ #LINE_MAX
+
+_POSIX2_LINE_MAX
+
+
+ )
+
+84 #iâdef
+CHARCLASS_NAME_MAX
+
+
+85 
+ #CHARCLASS_NAME_MAX
+ 2048
+
+ )
+
+89 
+ #RE_DUP_MAX
+ (0x7fff)
+
+ )
+
+ @/usr/include/bits/pthreadtypes.h
+
+15 #ià!
+defšed
+
+_BITS_TYPES_H
+ && !defšed
+_PTHREAD_H
+
+
+19 #iâdeà
+_BITS_PTHREADTYPES_H
+
+
+20 
+ #_BITS_PTHREADTYPES_H
+ 1
+
+ )
+
+22 
+ #__Ãed_sched·¿m
+
+
+ )
+
+23 
+ ~<b™s/sched.h
+>
+
+26 
+ s_±h»ad_ç¡lock
+
+
+28 
+ m__¡©us
+;
+
+29 
+ m__¥šlock
+;
+
+33 #iâdeà
+_PTHREAD_DESCR_DEFINED
+
+
+35 
+_±h»ad_desü_¡ruù
+ *
+ t_±h»ad_desü
+;
+
+36 
+ #_PTHREAD_DESCR_DEFINED
+
+
+ )
+
+41 
+ s__±h»ad_©Œ_s
+
+
+43 
+ m__d‘ach¡©e
+;
+
+44 
+ m__schedpÞicy
+;
+
+45 
+__sched_·¿m
+
+ m__sched·¿m
+;
+
+46 
+ m__šh”™sched
+;
+
+47 
+ m__scÝe
+;
+
+48
+size_t
+
+ m__gu¬dsize
+;
+
+49 
+ m__¡ackaddr_£t
+;
+
+50 *
+ m__¡ackaddr
+;
+
+51
+size_t
+
+ m__¡acksize
+;
+
+52 }
+ t±h»ad_©Œ_t
+;
+
+58 
+_±h»ad_ç¡lock
+
+ m__c_lock
+;
+
+59
+_±h»ad_desü
+
+ m__c_wa™šg
+;
+
+60 }
+ t±h»ad_cÚd_t
+;
+
+66 
+ m__dummy
+;
+
+67 }
+ t±h»ad_cÚd©Œ_t
+;
+
+70 
+ t±h»ad_key_t
+;
+
+78 
+ m__m_ȣrved
+;
+
+79 
+ m__m_couÁ
+;
+
+80
+_±h»ad_desü
+
+ m__m_owÃr
+;
+
+81 
+ m__m_kšd
+;
+
+82 
+_±h»ad_ç¡lock
+
+ m__m_lock
+;
+
+83 }
+ t±h»ad_mu‹x_t
+;
+
+89 
+ m__mu‹xkšd
+;
+
+90 }
+ t±h»ad_mu‹x©Œ_t
+;
+
+94 
+ t±h»ad_Úû_t
+;
+
+97 #ifdeà
+__USE_UNIX98
+
+
+99 
+ s_±h»ad_rwlock_t
+
+
+101 
+_±h»ad_ç¡lock
+
+ m__rw_lock
+;
+
+102 
+ m__rw_»ad”s
+;
+
+103
+_±h»ad_desü
+
+ m__rw_wr™”
+;
+
+104
+_±h»ad_desü
+
+ m__rw_»ad_wa™šg
+;
+
+105
+_±h»ad_desü
+
+ m__rw_wr™e_wa™šg
+;
+
+106 
+ m__rw_kšd
+;
+
+107 
+ m__rw_psh¬ed
+;
+
+108 }
+ t±h»ad_rwlock_t
+;
+
+114 
+ m__lockkšd
+;
+
+115 
+ m__psh¬ed
+;
+
+116 }
+ t±h»ad_rwlock©Œ_t
+;
+
+119 #ifdeà
+__USE_XOPEN2K
+
+
+121 vÞ©ž
+ t±h»ad_¥šlock_t
+;
+
+125 
+_±h»ad_ç¡lock
+
+ m__ba_lock
+;
+
+126 
+ m__ba_»quœed
+;
+
+127 
+ m__ba_´e£Á
+;
+
+128
+_±h»ad_desü
+
+ m__ba_wa™šg
+;
+
+129 }
+ t±h»ad_b¬r›r_t
+;
+
+133 
+ m__psh¬ed
+;
+
+134 }
+ t±h»ad_b¬r›¿‰r_t
+;
+
+140 
+ t±h»ad_t
+;
+
+ @/usr/include/bits/sockaddr.h
+
+24 #iâdeà
+_BITS_SOCKADDR_H
+
+
+25 
+ #_BITS_SOCKADDR_H
+ 1
+
+ )
+
+29 
+ t§_çmžy_t
+;
+
+35 
+ #__SOCKADDR_COMMON
+(
+§_´efix
+) \
+
+36
+§_çmžy_t
+
+§_´efix
+##
+çmžy
+
+
+ )
+
+38 
+ #__SOCKADDR_COMMON_SIZE
+ ( ())
+
+ )
+
+ @/usr/include/bits/stdio-lock.h
+
+20 #iâdeà
+_BITS_STDIO_LOCK_H
+
+
+21 
+ #_BITS_STDIO_LOCK_H
+ 1
+
+ )
+
+23 
+ ~<b™s/libc-lock.h
+>
+
+25
+ $__libc_lock_defše_»cursive
+ (,
+_IO_lock_t
+)
+
+28 #ifdeà
+ t_LIBC_LOCK_RECURSIVE_INITIALIZER
+
+
+29 
+ t_IO_lock_š™Ÿliz”
+
+ t_LIBC_LOCK_RECURSIVE_INITIALIZER
+
+
+ )
+
+30 #–ià
+ t_IO_MTSAFE_IO
+
+
+31 #”rÜ
+ tlibio
+
+ tÃeds
+
+ t»cursive
+
+ tmu‹xes
+ 
+ t_IO_MTSAFE_IO
+
+
+34 
+ t_IO_lock_š™
+(
+ t_Çme
+ t__libc_lock_š™_»cursive
+ (_Çme)
+
+ )
+
+35 
+ t_IO_lock_fši
+(
+ t_Çme
+ t__libc_lock_fši_»cursive
+ (_Çme)
+
+ )
+
+36 
+ t_IO_lock_lock
+(
+ t_Çme
+ t__libc_lock_lock_»cursive
+ (_Çme)
+
+ )
+
+37 
+ t_IO_lock_uÆock
+(
+ t_Çme
+ t__libc_lock_uÆock_»cursive
+ (_Çme)
+
+ )
+
+40 
+ t_IO_þ—nup_»giÚ_¡¬t
+(
+ t_fù
+,
+ t_å
+) \
+
+41
+ t__libc_þ—nup_»giÚ_¡¬t
+ (((
+ t_å
+)->
+ t_æags
+ &
+ t_IO_USER_LOCK
+è=ð0,
+ t_fù
+, _å)
+
+ )
+
+42 
+ t_IO_þ—nup_»giÚ_¡¬t_nßrg
+(
+ t_fù
+) \
+
+43
+ t__libc_þ—nup_»giÚ_¡¬t
+ (1,
+ t_fù
+,
+ tNULL
+)
+
+ )
+
+44 
+ t_IO_þ—nup_»giÚ_’d
+(
+ t_do™
+) \
+
+45
+ t__libc_þ—nup_»giÚ_’d
+ (
+ t_do™
+)
+
+ )
+
+ @/usr/include/bits/uio.h
+
+19 #iâdeà
+_SYS_UIO_H
+
+
+24 
+ ~<sys/ty³s.h
+>
+
+38 
+ #UIO_MAXIOV
+ 1024
+
+ )
+
+42 
+ siovec
+
+
+44 *
+ miov_ba£
+;
+
+45
+size_t
+
+ miov_Ën
+;
+
+ @/usr/include/bits/wchar.h
+
+20 #iâdeà
+_BITS_WCHAR_H
+
+
+21 
+ #_BITS_WCHAR_H
+ 1
+
+ )
+
+23 
+ #__WCHAR_MIN
+ (-2147483647È- 1l)
+
+ )
+
+24 
+ #__WCHAR_MAX
+ (2147483647l)
+
+ )
+
+ @/usr/include/bits/wordsize.h
+
+19 
+ #__WORDSIZE
+ 32
+
+ )
+
+ @/usr/include/bits/xopen_lim.h
+
+30 #iâdeà
+_XOPEN_LIM_H
+
+
+31 
+ #_XOPEN_LIM_H
+ 1
+
+ )
+
+33 
+ #__Ãed_IOV_MAX
+
+
+ )
+
+34 
+ ~<b™s/¡dio_lim.h
+>
+
+66 
+ #_XOPEN_IOV_MAX
+
+_POSIX_UIO_MAXIOV
+
+
+ )
+
+71 
+ #NL_ARGMAX
+
+_POSIX_ARG_MAX
+
+
+ )
+
+74 
+ #NL_LANGMAX
+
+_POSIX2_LINE_MAX
+
+
+ )
+
+77 
+ #NL_MSGMAX
+
+INT_MAX
+
+
+ )
+
+81 
+ #NL_NMAX
+
+INT_MAX
+
+
+ )
+
+84 
+ #NL_SETMAX
+
+INT_MAX
+
+
+ )
+
+87 
+ #NL_TEXTMAX
+
+INT_MAX
+
+
+ )
+
+90 
+ #NZERO
+ 20
+
+ )
+
+94 #ifdeà
+INT_MAX
+
+
+95 #ià
+INT_MAX
+ == 32767
+
+96 
+ #WORD_BIT
+ 16
+
+ )
+
+98 #ià
+INT_MAX
+ == 2147483647
+
+99 
+ #WORD_BIT
+ 32
+
+ )
+
+102 
+ #WORD_BIT
+ 64
+
+ )
+
+105 #–ià
+defšed
+
+__INT_MAX__
+
+
+106 #ià
+__INT_MAX__
+ == 32767
+
+107 
+ #WORD_BIT
+ 16
+
+ )
+
+109 #ià
+__INT_MAX__
+ == 2147483647
+
+110 
+ #WORD_BIT
+ 32
+
+ )
+
+113 
+ #WORD_BIT
+ 64
+
+ )
+
+117 
+ #WORD_BIT
+ 32
+
+ )
+
+121 #ifdeà
+LONG_MAX
+
+
+122 #ià
+LONG_MAX
+ == 2147483647
+
+123 
+ #LONG_BIT
+ 32
+
+ )
+
+126 
+ #LONG_BIT
+ 64
+
+ )
+
+128 #–ià
+defšed
+
+__LONG_MAX__
+
+
+129 #ià
+__LONG_MAX__
+ == 2147483647
+
+130 
+ #LONG_BIT
+ 32
+
+ )
+
+133 
+ #LONG_BIT
+ 64
+
+ )
+
+136 
+ ~<b™s/wÜdsize.h
+>
+
+137 #ià
+__WORDSIZE
+ == 64
+
+138 
+ #LONG_BIT
+ 64
+
+ )
+
+140 
+ #LONG_BIT
+ 32
+
+ )
+
+ @/usr/include/gnu/stubs.h
+
+5 
+ #__¡ub___k”Ãl_co¦
+
+
+ )
+
+6 
+ #__¡ub___k”Ãl_sšl
+
+
+ )
+
+7 
+ #__¡ub___k”Ãl_Æ
+
+
+ )
+
+8 
+ #__¡ub_chæags
+
+
+ )
+
+9 
+ #__¡ub_ç‰ach
+
+
+ )
+
+10 
+ #__¡ub_fchæags
+
+
+ )
+
+11 
+ #__¡ub_fd‘ach
+
+
+ )
+
+12 
+ #__¡ub_ãxecve
+
+
+ )
+
+13 
+ #__¡ub_g‰y
+
+
+ )
+
+14 
+ #__¡ub_posix_çdvi£
+
+
+ )
+
+15 
+ #__¡ub_posix_çdvi£64
+
+
+ )
+
+16 
+ #__¡ub_»voke
+
+
+ )
+
+17 
+ #__¡ub_£Žogš
+
+
+ )
+
+18 
+ #__¡ub_sig»tuº
+
+
+ )
+
+19 
+ #__¡ub_s¡k
+
+
+ )
+
+20 
+ #__¡ub_¡ty
+
+
+ )
+
+ @/usr/include/linux/errno.h
+
+1 #iâdeà
+_LINUX_ERRNO_H
+
+
+2 
+ #_LINUX_ERRNO_H
+
+
+ )
+
+4 
+ ~<asm/Ӽo.h
+>
+
+ @/usr/include/sys/cdefs.h
+
+19 #iâdef
+_SYS_CDEFS_H
+
+
+20 
+ #_SYS_CDEFS_H
+ 1
+
+ )
+
+23 #iâdeà
+_FEATURES_H
+
+
+24 
+ ~<ã©u»s.h
+>
+
+30 #ià
+defšed
+
+__GNUC__
+ && !defšed
+__STDC__
+
+
+35 #undeà
+__P
+
+
+36 #undeà
+__PMT
+
+
+38 #ifdeà
+__GNUC__
+
+
+43 #ià
+defšed
+
+__ýlu¥lus
+ &&
+__GNUC_PREREQ
+ (2,8)
+
+44 
+ #__THROW
+
+ `throw
+ ()
+
+ )
+
+46 
+ #__THROW
+
+
+ )
+
+48 
+ #__P
+(
+¬gs
+è¬g 
+__THROW
+
+
+ )
+
+51 
+ #__PMT
+(
+¬gs
+ )
+args
+
+55 
+ #__šlše
+
+
+ )
+
+57 
+ #__THROW
+
+
+ )
+
+58 
+ #__P
+(
+¬gs
+ )
+args
+
+59 
+ #__PMT
+(
+¬gs
+ )
+args
+
+61 
+ #__cÚ¡
+ cÚ¡
+
+ )
+
+62 
+ #__sigÃd
+ sigÃd
+
+ )
+
+63 
+ #__vÞ©že
+ vÞ©že
+
+ )
+
+70 
+ #__CONCAT
+(
+x
+,
+y
+èx ##
+ )
+y
+
+71 
+ #__STRING
+(
+x
+è#x
+
+ )
+
+74 
+ #__±r_t
+ *
+
+ )
+
+75 
+ #__lÚg_doubË_t
+ 
+
+ )
+
+79 #ifdef
+__ýlu¥lus
+
+
+80 
+ #__BEGIN_DECLS
+
+"C" {
+
+ )
+
+81 
+ #__END_DECLS
+ }
+
+ )
+
+83 
+ #__BEGIN_DECLS
+
+
+ )
+
+84 
+ #__END_DECLS
+
+
+ )
+
+89 #iâdeà
+__BOUNDED_POINTERS__
+
+
+90 
+ #__bounded
+
+
+ )
+
+91 
+ #__unbounded
+
+
+ )
+
+92 
+ #__±rv®ue
+
+
+ )
+
+97 #ià
+__GNUC_PREREQ
+ (2,97)
+
+99 
+ #__æex¬r
+ []
+
+ )
+
+101 #ifdeà
+__GNUC__
+
+
+102 
+ #__æex¬r
+ [0]
+
+ )
+
+104 #ià
+defšed
+
+__STDC_VERSION__
+ && __STDC_VERSION__ >= 199901L
+
+105 
+ #__æex¬r
+ []
+
+ )
+
+108 
+ #__æex¬r
+ [1]
+
+ )
+
+124 #ià
+defšed
+
+__GNUC__
+ && __GNUC__ >= 2
+
+126 
+ #__REDIRECT
+(
+Çme
+,
+´Ùo
+,
+®Ÿs
+èÇm´ÙØ
+ `__asm__
+ (
+ `__ASMNAME
+ (#®Ÿs))
+
+ )
+
+127 
+ #__ASMNAME
+(
+úame
+ `__ASMNAME2
+ (
+__USER_LABEL_PREFIX__
+, cÇme)
+
+ )
+
+128 
+ #__ASMNAME2
+(
+´efix
+,
+úame
+ `__STRING
+ (´efixè
+ )
+cname
+
+141 #ià!
+defšed
+
+__GNUC__
+ || __GNUC__ < 2
+
+142 
+ #__©Œibu‹__
+(
+xyz
+
+ )
+
+148 #ià
+__GNUC_PREREQ
+ (2,96)
+
+149 
+ #__©Œibu‹_m®loc__
+
+ `__©Œibu‹__
+ ((
+__m®loc__
+))
+
+ )
+
+151 
+ #__©Œibu‹_m®loc__
+
+
+ )
+
+157 #ià
+__GNUC_PREREQ
+ (2,96)
+
+158 
+ #__©Œibu‹_pu»__
+
+ `__©Œibu‹__
+ ((
+__pu»__
+))
+
+ )
+
+160 
+ #__©Œibu‹_pu»__
+
+
+ )
+
+166 #ià
+__GNUC_PREREQ
+ (3,1)
+
+167 
+ #__©Œibu‹_u£d__
+
+ `__©Œibu‹__
+ ((
+__u£d__
+))
+
+ )
+
+168 
+ #__©Œibu‹_nošlše__
+
+ `__©Œibu‹__
+ ((
+__nošlše__
+))
+
+ )
+
+170 
+ #__©Œibu‹_u£d__
+
+ `__©Œibu‹__
+ ((
+__unu£d__
+))
+
+ )
+
+171 
+ #__©Œibu‹_nošlše__
+
+
+ )
+
+180 #ià
+__GNUC_PREREQ
+ (2,8)
+
+181 
+ #__©Œibu‹_fÜm©_¬g__
+(
+x
+ `__©Œibu‹__
+ ((
+ `__fÜm©_¬g__
+ (x)))
+
+ )
+
+183 
+ #__©Œibu‹_fÜm©_¬g__
+(
+x
+
+ )
+
+190 #ià
+__GNUC_PREREQ
+ (2,97)
+
+191 
+ #__©Œibu‹_fÜm©_¡rfmÚ__
+(
+a
+,
+b
+) \
+
+192
+ `__©Œibu‹__
+ ((
+ `__fÜm©__
+ (
+__¡rfmÚ__
+,
+a
+,
+b
+)))
+
+ )
+
+194 
+ #__©Œibu‹_fÜm©_¡rfmÚ__
+(
+a
+,
+b
+
+ )
+
+201 #ià!
+__GNUC_PREREQ
+ (2,8)
+
+202 
+ #__ex‹nsiÚ__
+
+
+ )
+
+206 #ià!
+__GNUC_PREREQ
+ (2,92)
+
+207 
+ #__»¡riù
+
+
+ )
+
+213 #ià
+__GNUC_PREREQ
+ (3,1è&& !
+defšed
+
+__GNUG__
+
+
+214 
+ #__»¡riù_¬r
+
+__»¡riù
+
+
+ )
+
+216 #ifdeà
+__GNUC__
+
+
+217 
+ #__»¡riù_¬r
+
+
+ )
+
+219 #ià
+defšed
+
+__STDC_VERSION__
+ && __STDC_VERSION__ >= 199901L
+
+220 
+ #__»¡riù_¬r
+
+»¡riù
+
+
+ )
+
+223 
+ #__»¡riù_¬r
+
+
+ )
+
+ @/usr/include/sys/ucontext.h
+
+19 #iâdeà
+_SYS_UCONTEXT_H
+
+
+20 
+ #_SYS_UCONTEXT_H
+ 1
+
+ )
+
+22 
+ ~<ã©u»s.h
+>
+
+23 
+ ~<sigÇl.h
+>
+
+27 
+ ~<b™s/sigcÚ‹xt.h
+>
+
+31 
+ tg»g_t
+;
+
+34 
+ #NGREG
+ 19
+
+ )
+
+37 
+g»g_t
+
+ tg»g£t_t
+[
+NGREG
+];
+
+39 #ifdeà
+__USE_GNU
+
+
+43
+ mREG_GS
+ = 0,
+
+44 
+ #REG_GS
+
+REG_GS
+
+
+ )
+
+45
+ mREG_FS
+,
+
+46 
+ #REG_FS
+
+REG_FS
+
+
+ )
+
+47
+ mREG_ES
+,
+
+48 
+ #REG_ES
+
+REG_ES
+
+
+ )
+
+49
+ mREG_DS
+,
+
+50 
+ #REG_DS
+
+REG_DS
+
+
+ )
+
+51
+ mREG_EDI
+,
+
+52 
+ #REG_EDI
+
+REG_EDI
+
+
+ )
+
+53
+ mREG_ESI
+,
+
+54 
+ #REG_ESI
+
+REG_ESI
+
+
+ )
+
+55
+ mREG_EBP
+,
+
+56 
+ #REG_EBP
+
+REG_EBP
+
+
+ )
+
+57
+ mREG_ESP
+,
+
+58 
+ #REG_ESP
+
+REG_ESP
+
+
+ )
+
+59
+ mREG_EBX
+,
+
+60 
+ #REG_EBX
+
+REG_EBX
+
+
+ )
+
+61
+ mREG_EDX
+,
+
+62 
+ #REG_EDX
+
+REG_EDX
+
+
+ )
+
+63
+ mREG_ECX
+,
+
+64 
+ #REG_ECX
+
+REG_ECX
+
+
+ )
+
+65
+ mREG_EAX
+,
+
+66 
+ #REG_EAX
+
+REG_EAX
+
+
+ )
+
+67
+ mREG_TRAPNO
+,
+
+68 
+ #REG_TRAPNO
+
+REG_TRAPNO
+
+
+ )
+
+69
+ mREG_ERR
+,
+
+70 
+ #REG_ERR
+
+REG_ERR
+
+
+ )
+
+71
+ mREG_EIP
+,
+
+72 
+ #REG_EIP
+
+REG_EIP
+
+
+ )
+
+73
+ mREG_CS
+,
+
+74 
+ #REG_CS
+
+REG_CS
+
+
+ )
+
+75
+ mREG_EFL
+,
+
+76 
+ #REG_EFL
+
+REG_EFL
+
+
+ )
+
+77
+ mREG_UESP
+,
+
+78 
+ #REG_UESP
+
+REG_UESP
+
+
+ )
+
+79
+ mREG_SS
+
+
+80 
+ #REG_SS
+
+REG_SS
+
+
+ )
+
+85 
+ s_libc_å»g
+
+
+87 
+ msignifiÿnd
+[4];
+
+88 
+ mexpÚ’t
+;
+
+91 
+ s_libc_å¡©e
+
+
+93 
+ mcw
+;
+
+94 
+ msw
+;
+
+95 
+ mg
+;
+
+96 
+ moff
+;
+
+97 
+ mcs£l
+;
+
+98 
+ md©aoff
+;
+
+99 
+ md©a£l
+;
+
+100 
+_libc_å»g
+
+ m_¡
+[8];
+
+101 
+ m¡©us
+;
+
+105 
+_libc_å¡©e
+ *
+ tå»g£t_t
+;
+
+110
+g»g£t_t
+
+ mg»gs
+;
+
+113
+å»g£t_t
+
+ må»gs
+;
+
+114 
+ mÞdmask
+;
+
+115 
+ mü2
+;
+
+116 }
+ tmcÚ‹xt_t
+;
+
+119 
+ sucÚ‹xt
+
+
+121 
+ muc_æags
+;
+
+122 
+ucÚ‹xt
+ *
+ muc_lšk
+;
+
+123
+¡ack_t
+
+ muc_¡ack
+;
+
+124
+mcÚ‹xt_t
+
+ muc_mcÚ‹xt
+;
+
+125
+__sig£t_t
+
+ muc_sigmask
+;
+
+126 
+_libc_å¡©e
+
+ m__å»gs_mem
+;
+
+127 }
+ tucÚ‹xt_t
+;
+
+ @/usr/include/asm/errno.h
+
+1 #iâdeà
+_I386_ERRNO_H
+
+
+2 
+ #_I386_ERRNO_H
+
+
+ )
+
+4 
+ #EPERM
+ 1
+
+ )
+
+5 
+ #ENOENT
+ 2
+
+ )
+
+6 
+ #ESRCH
+ 3
+
+ )
+
+7 
+ #EINTR
+ 4
+
+ )
+
+8 
+ #EIO
+ 5
+
+ )
+
+9 
+ #ENXIO
+ 6
+
+ )
+
+10 
+ #E2BIG
+ 7
+
+ )
+
+11 
+ #ENOEXEC
+ 8
+
+ )
+
+12 
+ #EBADF
+ 9
+
+ )
+
+13 
+ #ECHILD
+ 10
+
+ )
+
+14 
+ #EAGAIN
+ 11
+
+ )
+
+15 
+ #ENOMEM
+ 12
+
+ )
+
+16 
+ #EACCES
+ 13
+
+ )
+
+17 
+ #EFAULT
+ 14
+
+ )
+
+18 
+ #ENOTBLK
+ 15
+
+ )
+
+19 
+ #EBUSY
+ 16
+
+ )
+
+20 
+ #EEXIST
+ 17
+
+ )
+
+21 
+ #EXDEV
+ 18
+
+ )
+
+22 
+ #ENODEV
+ 19
+
+ )
+
+23 
+ #ENOTDIR
+ 20
+
+ )
+
+24 
+ #EISDIR
+ 21
+
+ )
+
+25 
+ #EINVAL
+ 22
+
+ )
+
+26 
+ #ENFILE
+ 23
+
+ )
+
+27 
+ #EMFILE
+ 24
+
+ )
+
+28 
+ #ENOTTY
+ 25
+
+ )
+
+29 
+ #ETXTBSY
+ 26
+
+ )
+
+30 
+ #EFBIG
+ 27
+
+ )
+
+31 
+ #ENOSPC
+ 28
+
+ )
+
+32 
+ #ESPIPE
+ 29
+
+ )
+
+33 
+ #EROFS
+ 30
+
+ )
+
+34 
+ #EMLINK
+ 31
+
+ )
+
+35 
+ #EPIPE
+ 32
+
+ )
+
+36 
+ #EDOM
+ 33
+
+ )
+
+37 
+ #ERANGE
+ 34
+
+ )
+
+38 
+ #EDEADLK
+ 35
+
+ )
+
+39 
+ #ENAMETOOLONG
+ 36
+
+ )
+
+40 
+ #ENOLCK
+ 37
+
+ )
+
+41 
+ #ENOSYS
+ 38
+
+ )
+
+42 
+ #ENOTEMPTY
+ 39
+
+ )
+
+43 
+ #ELOOP
+ 40
+
+ )
+
+44 
+ #EWOULDBLOCK
+
+EAGAIN
+
+
+ )
+
+45 
+ #ENOMSG
+ 42
+
+ )
+
+46 
+ #EIDRM
+ 43
+
+ )
+
+47 
+ #ECHRNG
+ 44
+
+ )
+
+48 
+ #EL2NSYNC
+ 45
+
+ )
+
+49 
+ #EL3HLT
+ 46
+
+ )
+
+50 
+ #EL3RST
+ 47
+
+ )
+
+51 
+ #ELNRNG
+ 48
+
+ )
+
+52 
+ #EUNATCH
+ 49
+
+ )
+
+53 
+ #ENOCSI
+ 50
+
+ )
+
+54 
+ #EL2HLT
+ 51
+
+ )
+
+55 
+ #EBADE
+ 52
+
+ )
+
+56 
+ #EBADR
+ 53
+
+ )
+
+57 
+ #EXFULL
+ 54
+
+ )
+
+58 
+ #ENOANO
+ 55
+
+ )
+
+59 
+ #EBADRQC
+ 56
+
+ )
+
+60 
+ #EBADSLT
+ 57
+
+ )
+
+62 
+ #EDEADLOCK
+
+EDEADLK
+
+
+ )
+
+64 
+ #EBFONT
+ 59
+
+ )
+
+65 
+ #ENOSTR
+ 60
+
+ )
+
+66 
+ #ENODATA
+ 61
+
+ )
+
+67 
+ #ETIME
+ 62
+
+ )
+
+68 
+ #ENOSR
+ 63
+
+ )
+
+69 
+ #ENONET
+ 64
+
+ )
+
+70 
+ #ENOPKG
+ 65
+
+ )
+
+71 
+ #EREMOTE
+ 66
+
+ )
+
+72 
+ #ENOLINK
+ 67
+
+ )
+
+73 
+ #EADV
+ 68
+
+ )
+
+74 
+ #ESRMNT
+ 69
+
+ )
+
+75 
+ #ECOMM
+ 70
+
+ )
+
+76 
+ #EPROTO
+ 71
+
+ )
+
+77 
+ #EMULTIHOP
+ 72
+
+ )
+
+78 
+ #EDOTDOT
+ 73
+
+ )
+
+79 
+ #EBADMSG
+ 74
+
+ )
+
+80 
+ #EOVERFLOW
+ 75
+
+ )
+
+81 
+ #ENOTUNIQ
+ 76
+
+ )
+
+82 
+ #EBADFD
+ 77
+
+ )
+
+83 
+ #EREMCHG
+ 78
+
+ )
+
+84 
+ #ELIBACC
+ 79
+
+ )
+
+85 
+ #ELIBBAD
+ 80
+
+ )
+
+86 
+ #ELIBSCN
+ 81
+
+ )
+
+87 
+ #ELIBMAX
+ 82
+
+ )
+
+88 
+ #ELIBEXEC
+ 83
+
+ )
+
+89 
+ #EILSEQ
+ 84
+
+ )
+
+90 
+ #ERESTART
+ 85
+
+ )
+
+91 
+ #ESTRPIPE
+ 86
+
+ )
+
+92 
+ #EUSERS
+ 87
+
+ )
+
+93 
+ #ENOTSOCK
+ 88
+
+ )
+
+94 
+ #EDESTADDRREQ
+ 89
+
+ )
+
+95 
+ #EMSGSIZE
+ 90
+
+ )
+
+96 
+ #EPROTOTYPE
+ 91
+
+ )
+
+97 
+ #ENOPROTOOPT
+ 92
+
+ )
+
+98 
+ #EPROTONOSUPPORT
+ 93
+
+ )
+
+99 
+ #ESOCKTNOSUPPORT
+ 94
+
+ )
+
+100 
+ #EOPNOTSUPP
+ 95
+
+ )
+
+101 
+ #EPFNOSUPPORT
+ 96
+
+ )
+
+102 
+ #EAFNOSUPPORT
+ 97
+
+ )
+
+103 
+ #EADDRINUSE
+ 98
+
+ )
+
+104 
+ #EADDRNOTAVAIL
+ 99
+
+ )
+
+105 
+ #ENETDOWN
+ 100
+
+ )
+
+106 
+ #ENETUNREACH
+ 101
+
+ )
+
+107 
+ #ENETRESET
+ 102
+
+ )
+
+108 
+ #ECONNABORTED
+ 103
+
+ )
+
+109 
+ #ECONNRESET
+ 104
+
+ )
+
+110 
+ #ENOBUFS
+ 105
+
+ )
+
+111 
+ #EISCONN
+ 106
+
+ )
+
+112 
+ #ENOTCONN
+ 107
+
+ )
+
+113 
+ #ESHUTDOWN
+ 108
+
+ )
+
+114 
+ #ETOOMANYREFS
+ 109
+
+ )
+
+115 
+ #ETIMEDOUT
+ 110
+
+ )
+
+116 
+ #ECONNREFUSED
+ 111
+
+ )
+
+117 
+ #EHOSTDOWN
+ 112
+
+ )
+
+118 
+ #EHOSTUNREACH
+ 113
+
+ )
+
+119 
+ #EALREADY
+ 114
+
+ )
+
+120 
+ #EINPROGRESS
+ 115
+
+ )
+
+121 
+ #ESTALE
+ 116
+
+ )
+
+122 
+ #EUCLEAN
+ 117
+
+ )
+
+123 
+ #ENOTNAM
+ 118
+
+ )
+
+124 
+ #ENAVAIL
+ 119
+
+ )
+
+125 
+ #EISNAM
+ 120
+
+ )
+
+126 
+ #EREMOTEIO
+ 121
+
+ )
+
+127 
+ #EDQUOT
+ 122
+
+ )
+
+129 
+ #ENOMEDIUM
+ 123
+
+ )
+
+130 
+ #EMEDIUMTYPE
+ 124
+
+ )
+
+ @/usr/include/asm/ioctl.h
+
+6 #iâdeà
+_ASMI386_IOCTL_H
+
+
+7 
+ #_ASMI386_IOCTL_H
+
+
+ )
+
+27 
+ #_IOC_NRBITS
+ 8
+
+ )
+
+28 
+ #_IOC_TYPEBITS
+ 8
+
+ )
+
+29 
+ #_IOC_SIZEBITS
+ 14
+
+ )
+
+30 
+ #_IOC_DIRBITS
+ 2
+
+ )
+
+32 
+ #_IOC_NRMASK
+ ((1 <<
+_IOC_NRBITS
+)-1)
+
+ )
+
+33 
+ #_IOC_TYPEMASK
+ ((1 <<
+_IOC_TYPEBITS
+)-1)
+
+ )
+
+34 
+ #_IOC_SIZEMASK
+ ((1 <<
+_IOC_SIZEBITS
+)-1)
+
+ )
+
+35 
+ #_IOC_DIRMASK
+ ((1 <<
+_IOC_DIRBITS
+)-1)
+
+ )
+
+37 
+ #_IOC_NRSHIFT
+ 0
+
+ )
+
+38 
+ #_IOC_TYPESHIFT
+ (
+_IOC_NRSHIFT
++
+_IOC_NRBITS
+)
+
+ )
+
+39 
+ #_IOC_SIZESHIFT
+ (
+_IOC_TYPESHIFT
++
+_IOC_TYPEBITS
+)
+
+ )
+
+40 
+ #_IOC_DIRSHIFT
+ (
+_IOC_SIZESHIFT
++
+_IOC_SIZEBITS
+)
+
+ )
+
+45 
+ #_IOC_NONE
+ 0U
+
+ )
+
+46 
+ #_IOC_WRITE
+ 1U
+
+ )
+
+47 
+ #_IOC_READ
+ 2U
+
+ )
+
+49 
+ #_IOC
+(
+dœ
+,
+ty³
+,
+,
+size
+) \
+
+50 (((
+dœ
+è<<
+_IOC_DIRSHIFT
+) | \
+
+51 ((
+ty³
+è<<
+_IOC_TYPESHIFT
+) | \
+
+52 ((
+è<<
+_IOC_NRSHIFT
+) | \
+
+53 ((
+size
+è<<
+_IOC_SIZESHIFT
+))
+
+ )
+
+56 
+ #_IO
+(
+ty³
+,
+ `_IOC
+(
+_IOC_NONE
+,Ñy³),Òr),0)
+
+ )
+
+57 
+ #_IOR
+(
+ty³
+,
+,
+size
+ `_IOC
+(
+_IOC_READ
+,Ñy³),Òr),(size))
+
+ )
+
+58 
+ #_IOW
+(
+ty³
+,
+,
+size
+ `_IOC
+(
+_IOC_WRITE
+,Ñy³),Òr),(size))
+
+ )
+
+59 
+ #_IOWR
+(
+ty³
+,
+,
+size
+ `_IOC
+(
+_IOC_READ
+|
+_IOC_WRITE
+,Ñy³),Òr),(size))
+
+ )
+
+62 
+ #_IOC_DIR
+(
+è((Òrè>>
+_IOC_DIRSHIFT
+è&
+_IOC_DIRMASK
+)
+
+ )
+
+63 
+ #_IOC_TYPE
+(
+è((Òrè>>
+_IOC_TYPESHIFT
+è&
+_IOC_TYPEMASK
+)
+
+ )
+
+64 
+ #_IOC_NR
+(
+è((Òrè>>
+_IOC_NRSHIFT
+è&
+_IOC_NRMASK
+)
+
+ )
+
+65 
+ #_IOC_SIZE
+(
+è((Òrè>>
+_IOC_SIZESHIFT
+è&
+_IOC_SIZEMASK
+)
+
+ )
+
+69 
+ #IOC_IN
+ (
+_IOC_WRITE
+ <<
+_IOC_DIRSHIFT
+)
+
+ )
+
+70 
+ #IOC_OUT
+ (
+_IOC_READ
+ <<
+_IOC_DIRSHIFT
+)
+
+ )
+
+71 
+ #IOC_INOUT
+ ((
+_IOC_WRITE
+|
+_IOC_READ
+è<<
+_IOC_DIRSHIFT
+)
+
+ )
+
+72 
+ #IOCSIZE_MASK
+ (
+_IOC_SIZEMASK
+ <<
+_IOC_SIZESHIFT
+)
+
+ )
+
+73 
+ #IOCSIZE_SHIFT
+ (
+_IOC_SIZESHIFT
+)
+
+ )
+
+ @/usr/include/asm/sockios.h
+
+1 #iâdeà
+__ARCH_I386_SOCKIOS__
+
+
+2 
+ #__ARCH_I386_SOCKIOS__
+
+
+ )
+
+5 
+ #FIOSETOWN
+ 0x8901
+
+ )
+
+6 
+ #SIOCSPGRP
+ 0x8902
+
+ )
+
+7 
+ #FIOGETOWN
+ 0x8903
+
+ )
+
+8 
+ #SIOCGPGRP
+ 0x8904
+
+ )
+
+9 
+ #SIOCATMARK
+ 0x8905
+
+ )
+
+10 
+ #SIOCGSTAMP
+ 0x8906
+
+ )
+
+ @/usr/include/bits/libc-lock.h
+
+20 #iâdeà
+_BITS_LIBC_LOCK_H
+
+
+21 
+ #_BITS_LIBC_LOCK_H
+ 1
+
+ )
+
+23 
+ ~<±h»ad.h
+>
+
+26 #ià
+defšed
+(
+_LIBC
+è|| defšed(
+_IO_MTSAFE_IO
+)
+
+27 
+±h»ad_mu‹x_t
+
+ t__libc_lock_t
+;
+
+28 ¡ruù {
+±h»ad_mu‹x_t
+
+ mmu‹x
+; }
+ t__libc_lock_»cursive_t
+;
+
+29 #ifdeà
+__USE_UNIX98
+
+
+30 
+±h»ad_rwlock_t
+
+ t__libc_rwlock_t
+;
+
+32 
+__libc_rwlock_Ýaque__
+
+ t__libc_rwlock_t
+;
+
+35 
+__libc_lock_Ýaque__
+
+ t__libc_lock_t
+;
+
+36 
+__libc_lock_»cursive_Ýaque__
+
+ t__libc_lock_»cursive_t
+;
+
+37 
+__libc_rwlock_Ýaque__
+
+ t__libc_rwlock_t
+;
+
+41 
+±h»ad_key_t
+
+ t__libc_key_t
+;
+
+50 
+ #__libc_lock_defše
+(
+CLASS
+,
+NAME
+) \
+
+51
+CLASS
+
+__libc_lock_t
+
+NAME
+;
+
+ )
+
+52 
+ #__libc_rwlock_defše
+(
+CLASS
+,
+NAME
+) \
+
+53
+CLASS
+
+__libc_rwlock_t
+
+NAME
+;
+
+ )
+
+54 
+ #__libc_lock_defše_»cursive
+(
+CLASS
+,
+NAME
+) \
+
+55
+CLASS
+
+__libc_lock_»cursive_t
+
+NAME
+;
+
+ )
+
+66 #ià
+__LT_SPINLOCK_INIT
+ == 0
+
+67 
+ #__libc_lock_defše_š™Ÿlized
+(
+CLASS
+,
+NAME
+) \
+
+68
+CLASS
+
+__libc_lock_t
+
+NAME
+;
+
+ )
+
+70 
+ #__libc_lock_defše_š™Ÿlized
+(
+CLASS
+,
+NAME
+) \
+
+71
+CLASS
+
+__libc_lock_t
+
+NAME
+ =
+PTHREAD_MUTEX_INITIALIZER
+;
+
+ )
+
+74 
+ #__libc_rwlock_defše_š™Ÿlized
+(
+CLASS
+,
+NAME
+) \
+
+75
+CLASS
+
+__libc_rwlock_t
+
+NAME
+ =
+PTHREAD_RWLOCK_INITIALIZER
+;
+
+ )
+
+79 
+ #__libc_lock_defše_š™Ÿlized_»cursive
+(
+CLASS
+,
+NAME
+) \
+
+80
+CLASS
+
+__libc_lock_»cursive_t
+
+NAME
+ =
+_LIBC_LOCK_RECURSIVE_INITIALIZER
+;
+
+ )
+
+81 
+ #_LIBC_LOCK_RECURSIVE_INITIALIZER
+ \
+
+82 {
+PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+}
+
+ )
+
+86 
+ #__libc_lock_š™
+(
+NAME
+) \
+
+87 (
+__±h»ad_mu‹x_š™
+ !ð
+NULL
+ ?
+ `__±h»ad_mu‹x_š™
+ (&(
+NAME
+), NULLè: 0);
+
+ )
+
+88 
+ #__libc_rwlock_š™
+(
+NAME
+) \
+
+89 (
+__±h»ad_rwlock_š™
+ !ð
+NULL
+ ?
+ `__±h»ad_rwlock_š™
+ (&(
+NAME
+), NULLè: 0);
+
+ )
+
+92 
+ #__libc_lock_š™_»cursive
+(
+NAME
+) \
+
+94 ià(
+__±h»ad_mu‹x_š™
+ !ð
+NULL
+) \
+
+96
+±h»ad_mu‹x©Œ_t
+
+__©Œ
+; \
+
+97
+ `__±h»ad_mu‹x©Œ_š™
+ (&
+__©Œ
+); \
+
+98
+ `__±h»ad_mu‹x©Œ_£‰y³
+ (&
+__©Œ
+,
+PTHREAD_MUTEX_RECURSIVE_NP
+); \
+
+99
+ `__±h»ad_mu‹x_š™
+ (&(
+NAME
+).
+mu‹x
+, &
+__©Œ
+); \
+
+100
+ `__±h»ad_mu‹x©Œ_de¡roy
+ (&
+__©Œ
+); \
+
+102 } 0);
+
+ )
+
+107 
+ #__libc_lock_fši
+(
+NAME
+) \
+
+108 (
+__±h»ad_mu‹x_de¡roy
+ !ð
+NULL
+ ?
+ `__±h»ad_mu‹x_de¡roy
+ (&(
+NAME
+)è: 0);
+
+ )
+
+109 
+ #__libc_rwlock_fši
+(
+NAME
+) \
+
+110 (
+__±h»ad_rwlock_de¡roy
+ !ð
+NULL
+ ?
+ `__±h»ad_rwlock_de¡roy
+ (&(
+NAME
+)è: 0);
+
+ )
+
+113 
+ #__libc_lock_fši_»cursive
+(
+NAME
+ `__libc_lock_fši
+ ((NAME).
+mu‹x
+)
+
+ )
+
+116 
+ #__libc_lock_lock
+(
+NAME
+) \
+
+117 (
+__±h»ad_mu‹x_lock
+ !ð
+NULL
+ ?
+ `__±h»ad_mu‹x_lock
+ (&(
+NAME
+)è: 0);
+
+ )
+
+118 
+ #__libc_rwlock_rdlock
+(
+NAME
+) \
+
+119 (
+__±h»ad_rwlock_rdlock
+ !ð
+NULL
+ ?
+ `__±h»ad_rwlock_rdlock
+ (&(
+NAME
+)è: 0);
+
+ )
+
+120 
+ #__libc_rwlock_w¾ock
+(
+NAME
+) \
+
+121 (
+__±h»ad_rwlock_w¾ock
+ !ð
+NULL
+ ?
+ `__±h»ad_rwlock_w¾ock
+ (&(
+NAME
+)è: 0);
+
+ )
+
+124 
+ #__libc_lock_lock_»cursive
+(
+NAME
+ `__libc_lock_lock
+ ((NAME).
+mu‹x
+)
+
+ )
+
+127 
+ #__libc_lock_Œylock
+(
+NAME
+) \
+
+128 (
+__±h»ad_mu‹x_Œylock
+ !ð
+NULL
+ ?
+ `__±h»ad_mu‹x_Œylock
+ (&(
+NAME
+)è: 0)
+
+ )
+
+129 
+ #__libc_rwlock_Œyrdlock
+(
+NAME
+) \
+
+130 (
+__±h»ad_rwlock_Œyrdlock
+ !ð
+NULL
+ \
+
+131 ?
+ `__±h»ad_rwlock_Œyrdlock
+ (&(
+NAME
+)è: 0)
+
+ )
+
+132 
+ #__libc_rwlock_Œyw¾ock
+(
+NAME
+) \
+
+133 (
+__±h»ad_rwlock_Œyw¾ock
+ !ð
+NULL
+ \
+
+134 ?
+ `__±h»ad_rwlock_Œyw¾ock
+ (&(
+NAME
+)è: 0)
+
+ )
+
+137 
+ #__libc_lock_Œylock_»cursive
+(
+NAME
+ `__libc_lock_Œylock
+ ((NAME).
+mu‹x
+)
+
+ )
+
+140 
+ #__libc_lock_uÆock
+(
+NAME
+) \
+
+141 (
+__±h»ad_mu‹x_uÆock
+ !ð
+NULL
+ ?
+ `__±h»ad_mu‹x_uÆock
+ (&(
+NAME
+)è: 0);
+
+ )
+
+142 
+ #__libc_rwlock_uÆock
+(
+NAME
+) \
+
+143 (
+__±h»ad_rwlock_uÆock
+ !ð
+NULL
+ ?
+ `__±h»ad_rwlock_uÆock
+ (&(
+NAME
+)è: 0);
+
+ )
+
+146 
+ #__libc_lock_uÆock_»cursive
+(
+NAME
+ `__libc_lock_uÆock
+ ((NAME).
+mu‹x
+)
+
+ )
+
+150 #ià
+PTHREAD_ONCE_INIT
+ == 0
+
+153 
+ #__libc_Úû_defše
+(
+CLASS
+,
+NAME
+) \
+
+154
+CLASS
+
+±h»ad_Úû_t
+
+NAME
+
+
+ )
+
+156 
+ #__libc_Úû_defše
+(
+CLASS
+,
+NAME
+) \
+
+157
+CLASS
+
+±h»ad_Úû_t
+
+NAME
+ =
+PTHREAD_ONCE_INIT
+
+
+ )
+
+161 
+ #__libc_Úû
+(
+ONCE_CONTROL
+,
+INIT_FUNCTION
+) \
+
+163 ià(
+__±h»ad_Úû
+ !ð
+NULL
+) \
+
+164
+ `__±h»ad_Úû
+ (&(
+ONCE_CONTROL
+), (
+INIT_FUNCTION
+)); \
+
+165 ià((
+ONCE_CONTROL
+è=ð
+PTHREAD_ONCE_INIT
+) { \
+
+166
+ `INIT_FUNCTION
+ (); \
+
+167 (
+ONCE_CONTROL
+èð!
+PTHREAD_ONCE_INIT
+; \
+
+169 } 0)
+
+ )
+
+173 
+ #__libc_þ—nup_»giÚ_¡¬t
+(
+DOIT
+,
+FCT
+,
+ARG
+) \
+
+174 { 
+_±h»ad_þ—nup_bufãr
+
+_bufãr
+; \
+
+175 
+_avaž
+ = (
+DOIT
+è&&
+_±h»ad_þ—nup_push_deãr
+ !ð
+NULL
+; \
+
+176 ià(
+_avaž
+) { \
+
+177
+ `_±h»ad_þ—nup_push_deãr
+ (&
+_bufãr
+, (
+FCT
+), (
+ARG
+)); \
+
+178 }
+
+ )
+
+181 
+ #__libc_þ—nup_»giÚ_’d
+(
+DOIT
+) \
+
+182 ià(
+_avaž
+) { \
+
+183
+ `_±h»ad_þ—nup_pÝ_»¡Üe
+ (&
+_bufãr
+, (
+DOIT
+)); \
+
+185 }
+
+ )
+
+188 
+ #__libc_þ—nup_’d
+(
+DOIT
+) \
+
+189 ià(
+_avaž
+) { \
+
+190
+ `_±h»ad_þ—nup_pÝ_»¡Üe
+ (&
+_bufãr
+, (
+DOIT
+)); \
+
+191 }
+
+ )
+
+194 
+ #__libc_key_ü—‹
+(
+KEY
+,
+DESTRUCTOR
+) \
+
+195 (
+__±h»ad_key_ü—‹
+ !ð
+NULL
+ ?
+ `__±h»ad_key_ü—‹
+ (
+KEY
+,
+DESTRUCTOR
+è: 1)
+
+ )
+
+198 
+ #__libc_g‘¥ecific
+(
+KEY
+) \
+
+199 (
+__±h»ad_g‘¥ecific
+ !ð
+NULL
+ ?
+ `__±h»ad_g‘¥ecific
+ (
+KEY
+è: NULL)
+
+ )
+
+202 
+ #__libc_£t¥ecific
+(
+KEY
+,
+VALUE
+) \
+
+203 (
+__±h»ad_£t¥ecific
+ !ð
+NULL
+ ?
+ `__±h»ad_£t¥ecific
+ (
+KEY
+,
+VALUE
+è: 0)
+
+ )
+
+207 
+ #__libc_©fÜk
+(
+PREPARE
+,
+PARENT
+,
+CHILD
+) \
+
+208 (
+__±h»ad_©fÜk
+ !ð
+NULL
+ ?
+ `__±h»ad_©fÜk
+ (
+PREPARE
+,
+PARENT
+,
+CHILD
+è: 0)
+
+ )
+
+213
+
+__±h»ad_mu‹x_š™
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+,
+
+214
+__cÚ¡
+
+±h»ad_mu‹x©Œ_t
+ *
+__mu‹x_©Œ
+);
+
+216
+
+__±h»ad_mu‹x_de¡roy
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+);
+
+218
+
+__±h»ad_mu‹x_Œylock
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+);
+
+220
+
+__±h»ad_mu‹x_lock
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+);
+
+222
+
+__±h»ad_mu‹x_uÆock
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+);
+
+224
+
+__±h»ad_mu‹x©Œ_š™
+ (
+±h»ad_mu‹x©Œ_t
+ *
+__©Œ
+);
+
+226
+
+__±h»ad_mu‹x©Œ_de¡roy
+ (
+±h»ad_mu‹x©Œ_t
+ *
+__©Œ
+);
+
+228
+
+__±h»ad_mu‹x©Œ_£‰y³
+ (
+±h»ad_mu‹x©Œ_t
+ *
+__©Œ
+,
+
+229 
+__kšd
+);
+
+231 #ifdeà
+__USE_UNIX98
+
+
+232
+
+__±h»ad_rwlock_š™
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+,
+
+233
+__cÚ¡
+
+±h»ad_rwlock©Œ_t
+ *
+__©Œ
+);
+
+235
+
+__±h»ad_rwlock_de¡roy
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+);
+
+237
+
+__±h»ad_rwlock_rdlock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+);
+
+239
+
+__±h»ad_rwlock_Œyrdlock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+);
+
+241
+
+__±h»ad_rwlock_w¾ock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+);
+
+243
+
+__±h»ad_rwlock_Œyw¾ock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+);
+
+245
+
+__±h»ad_rwlock_uÆock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+);
+
+248
+
+__±h»ad_key_ü—‹
+ (
+±h»ad_key_t
+ *
+__key
+,
+
+249 (*
+__de¡r_funùiÚ
+) (*));
+
+251
+
+ `__±h»ad_£t¥ecific
+ (
+±h»ad_key_t
+
+__key
+,
+
+252
+__cÚ¡
+ *
+__poš‹r
+);
+
+254
+*
+ `__±h»ad_g‘¥ecific
+ (
+±h»ad_key_t
+
+__key
+);
+
+256
+
+ `__±h»ad_Úû
+ (
+±h»ad_Úû_t
+ *
+__Úû_cÚŒÞ
+,
+
+257 (*
+__š™_routše
+) ());
+
+259
+
+ `__±h»ad_©fÜk
+ ((*
+__´•¬e
+) (),
+
+260 (*
+__·»Á
+) (),
+
+261 (*
+__chžd
+) ());
+
+267 #iâdeà
+__NO_WEAK_PTHREAD_ALIASES
+
+
+268 #ifdeà
+w—k_ex‹º
+
+
+269 #ià
+_LIBC
+
+
+270 
+ ~<bp-sym.h
+>
+
+272 
+ #BP_SYM
+ (
+sym
+ )
+sym
+
+274
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_mu‹x_š™
+))
+
+275
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_mu‹x_de¡roy
+))
+
+276
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_mu‹x_lock
+))
+
+277
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_mu‹x_Œylock
+))
+
+278
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_mu‹x_uÆock
+))
+
+279
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_mu‹x©Œ_š™
+))
+
+280
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_mu‹x©Œ_de¡roy
+))
+
+281
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_mu‹x©Œ_£‰y³
+))
+
+282
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_rwlock_š™
+))
+
+283
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_rwlock_de¡roy
+))
+
+284
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_rwlock_rdlock
+))
+
+285
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_rwlock_Œyrdlock
+))
+
+286
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_rwlock_w¾ock
+))
+
+287
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_rwlock_Œyw¾ock
+))
+
+288
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_rwlock_uÆock
+))
+
+289
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_key_ü—‹
+))
+
+290
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_£t¥ecific
+))
+
+291
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_g‘¥ecific
+))
+
+292
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+__±h»ad_Úû
+))
+
+293
+ $w—k_ex‹º
+ (
+__±h»ad_š™Ÿlize
+)
+
+294
+ $w—k_ex‹º
+ (
+__±h»ad_©fÜk
+)
+
+295
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+_±h»ad_þ—nup_push_deãr
+))
+
+296
+ `w—k_ex‹º
+ (
+ $BP_SYM
+ (
+_±h»ad_þ—nup_pÝ_»¡Üe
+))
+
+298 #´agm¨
+w—k
+
+__±h»ad_mu‹x_š™
+
+
+299 #´agm¨
+w—k
+
+__±h»ad_mu‹x_de¡roy
+
+
+300 #´agm¨
+w—k
+
+__±h»ad_mu‹x_lock
+
+
+301 #´agm¨
+w—k
+
+__±h»ad_mu‹x_Œylock
+
+
+302 #´agm¨
+w—k
+
+__±h»ad_mu‹x_uÆock
+
+
+303 #´agm¨
+w—k
+
+__±h»ad_mu‹x©Œ_š™
+
+
+304 #´agm¨
+w—k
+
+__±h»ad_mu‹x©Œ_de¡roy
+
+
+305 #´agm¨
+w—k
+
+__±h»ad_mu‹x©Œ_£‰y³
+
+
+306 #´agm¨
+w—k
+
+__±h»ad_rwlock_de¡roy
+
+
+307 #´agm¨
+w—k
+
+__±h»ad_rwlock_rdlock
+
+
+308 #´agm¨
+w—k
+
+__±h»ad_rwlock_Œyrdlock
+
+
+309 #´agm¨
+w—k
+
+__±h»ad_rwlock_w¾ock
+
+
+310 #´agm¨
+w—k
+
+__±h»ad_rwlock_Œyw¾ock
+
+
+311 #´agm¨
+w—k
+
+__±h»ad_rwlock_uÆock
+
+
+312 #´agm¨
+w—k
+
+__±h»ad_key_ü—‹
+
+
+313 #´agm¨
+w—k
+
+__±h»ad_£t¥ecific
+
+
+314 #´agm¨
+w—k
+
+__±h»ad_g‘¥ecific
+
+
+315 #´agm¨
+w—k
+
+__±h»ad_Úû
+
+
+316 #´agm¨
+w—k
+
+__±h»ad_š™Ÿlize
+
+
+317 #´agm¨
+w—k
+
+__±h»ad_©fÜk
+
+
+318 #´agm¨
+w—k
+
+_±h»ad_þ—nup_push_deãr
+
+
+319 #´agm¨
+w—k
+
+_±h»ad_þ—nup_pÝ_»¡Üe
+
+
+325 
+ #__libc_mu‹x_uÆock
+
+__±h»ad_mu‹x_uÆock
+
+
+ )
+
+ @/usr/include/bits/sched.h
+
+21 #iâdeà
+__Ãed_sched·¿m
+
+
+23 #iâdeà
+_SCHED_H
+
+
+29 
+ #SCHED_OTHER
+ 0
+
+ )
+
+30 
+ #SCHED_FIFO
+ 1
+
+ )
+
+31 
+ #SCHED_RR
+ 2
+
+ )
+
+33 #ifdeà
+__USE_MISC
+
+
+35 
+ #CSIGNAL
+ 0x000000fà
+
+ )
+
+36 
+ #CLONE_VM
+ 0x00000100
+
+ )
+
+37 
+ #CLONE_FS
+ 0x00000200
+
+ )
+
+38 
+ #CLONE_FILES
+ 0x00000400
+
+ )
+
+39 
+ #CLONE_SIGHAND
+ 0x00000800
+
+ )
+
+40 
+ #CLONE_PID
+ 0x00001000
+
+ )
+
+41 
+ #CLONE_PTRACE
+ 0x00002000
+
+ )
+
+42 
+ #CLONE_VFORK
+ 0x00004000
+
+ )
+
+47 
+ ssched_·¿m
+
+
+49 
+ m__sched_´iÜ™y
+;
+
+52
+ g__BEGIN_DECLS
+
+
+55 #ifdeà
+__USE_MISC
+
+
+56
+
+þÚe
+ ((*
+__â
+è(*
+__¬g
+), *
+__chžd_¡ack
+,
+
+57 
+__æags
+, *
+__¬g
+__THROW
+;
+
+60
+__END_DECLS
+
+
+64 #ià!
+defšed
+
+__defšed_sched·¿m
+ \
+
+65 && (
+defšed
+
+__Ãed_sched·¿m
+ || defšed
+_SCHED_H
+)
+
+66 
+ #__defšed_sched·¿m
+ 1
+
+ )
+
+68 
+ s__sched_·¿m
+
+
+70 
+__sched_´iÜ™y
+;
+
+72 #undeà
+__Ãed_sched·¿m
+
+
+ @/usr/include/gconv.h
+
+23 #iâdeà
+_GCONV_H
+
+
+24 
+ #_GCONV_H
+ 1
+
+ )
+
+26 
+ ~<ã©u»s.h
+>
+
+27 
+ #__Ãed_mb¡©e_t
+
+
+ )
+
+28 
+ ~<wch¬.h
+>
+
+29 
+ #__Ãed_size_t
+
+
+ )
+
+30 
+ #__Ãed_wch¬_t
+
+
+ )
+
+31 
+ ~<¡ddef.h
+>
+
+34 
+ #__UNKNOWN_10646_CHAR
+ ((
+wch¬_t
+è0xfffd)
+
+ )
+
+39
+ m__GCONV_OK
+ = 0,
+
+40
+ m__GCONV_NOCONV
+,
+
+41
+ m__GCONV_NODB
+,
+
+42
+ m__GCONV_NOMEM
+,
+
+44
+ m__GCONV_EMPTY_INPUT
+,
+
+45
+ m__GCONV_FULL_OUTPUT
+,
+
+46
+ m__GCONV_ILLEGAL_INPUT
+,
+
+47
+ m__GCONV_INCOMPLETE_INPUT
+,
+
+49
+ m__GCONV_ILLEGAL_DESCRIPTOR
+,
+
+50
+ m__GCONV_INTERNAL_ERROR
+
+
+57
+ m__GCONV_IS_LAST
+ = 0x0001,
+
+58
+ m__GCONV_IGNORE_ERRORS
+ = 0x0002
+
+63 
+ g__gcÚv_¡•
+;
+
+64 
+ g__gcÚv_¡•_d©a
+;
+
+65 
+ g__gcÚv_lßded_objeù
+;
+
+66 
+ g__gcÚv_Œªs_d©a
+;
+
+70 (*
+ t__gcÚv_fù
+è(
+ t__gcÚv_¡•
+ *, 
+ t__gcÚv_¡•_d©a
+ *,
+
+71
+ t__cÚ¡
+ **, __const *,
+
+72 **,
+ tsize_t
+ *, , );
+
+75 (*
+ t__gcÚv_š™_fù
+è(
+ t__gcÚv_¡•
+ *);
+
+76 (*
+ t__gcÚv_’d_fù
+è(
+ t__gcÚv_¡•
+ *);
+
+80 (*
+ t__gcÚv_Œªs_fù
+è(
+ t__gcÚv_¡•
+ *,
+
+81 
+ t__gcÚv_¡•_d©a
+ *, *,
+
+82
+ t__cÚ¡
+ *,
+
+83
+ t__cÚ¡
+ **,
+
+84
+ t__cÚ¡
+ *, **,
+
+85
+ tsize_t
+ *);
+
+88 (*
+ t__gcÚv_Œªs_cÚ‹xt_fù
+è(*,
+ t__cÚ¡
+ *,
+
+89
+ t__cÚ¡
+ *,
+
+93 (*
+ t__gcÚv_Œªs_qu”y_fù
+è(
+ t__cÚ¡
+ *, __const ***,
+
+94
+ tsize_t
+ *);
+
+97 (*
+ t__gcÚv_Œªs_š™_fù
+) (**, const *);
+
+98 (*
+ t__gcÚv_Œªs_’d_fù
+) (*);
+
+100 
+ s__gcÚv_Œªs_d©a
+
+
+103
+__gcÚv_Œªs_fù
+
+__Œªs_fù
+;
+
+104
+__gcÚv_Œªs_cÚ‹xt_fù
+
+__Œªs_cÚ‹xt_fù
+;
+
+105
+__gcÚv_Œªs_’d_fù
+
+__Œªs_’d_fù
+;
+
+106 *
+__d©a
+;
+
+107 
+__gcÚv_Œªs_d©a
+ *
+__Ãxt
+;
+
+112 
+ s__gcÚv_¡•
+
+
+114 
+__gcÚv_lßded_objeù
+ *
+__shlib_hªdË
+;
+
+115
+__cÚ¡
+ *
+__modÇme
+;
+
+117 
+__couÁ”
+;
+
+119 *
+__äom_Çme
+;
+
+120 *
+__to_Çme
+;
+
+122
+__gcÚv_fù
+
+__fù
+;
+
+123
+__gcÚv_š™_fù
+
+__š™_fù
+;
+
+124
+__gcÚv_’d_fù
+
+__’d_fù
+;
+
+128 
+__mš_Ãeded_äom
+;
+
+129 
+__max_Ãeded_äom
+;
+
+130 
+__mš_Ãeded_to
+;
+
+131 
+__max_Ãeded_to
+;
+
+134 
+__¡©eful
+;
+
+136 *
+__d©a
+;
+
+141 
+ s__gcÚv_¡•_d©a
+
+
+143 *
+__outbuf
+;
+
+144 *
+__outbuãnd
+;
+
+148 
+__æags
+;
+
+152 
+__švoÿtiÚ_couÁ”
+;
+
+156 
+__š‹º®_u£
+;
+
+158
+__mb¡©e_t
+ *
+__¡©•
+;
+
+159
+__mb¡©e_t
+
+__¡©e
+;
+
+163 
+__gcÚv_Œªs_d©a
+ *
+__λs
+;
+
+168 
+ s__gcÚv_šfo
+
+
+170
+size_t
+
+__n¡•s
+;
+
+171 
+__gcÚv_¡•
+ *
+__¡•s
+;
+
+172
+__ex‹nsiÚ__
+ 
+__gcÚv_¡•_d©a
+
+__d©a
+
+__æex¬r
+;
+
+173 } *
+ t__gcÚv_t
+;
+
+ @/usr/include/wchar.h
+
+24 #iâdeà
+_WCHAR_H
+
+
+26 #iâdeà
+__Ãed_mb¡©e_t
+
+
+27 
+ #_WCHAR_H
+ 1
+
+ )
+
+28 
+ ~<ã©u»s.h
+>
+
+31 #ifdeà
+_WCHAR_H
+
+
+33 
+ #__Ãed___FILE
+
+
+ )
+
+34 #ifdeà
+__USE_UNIX98
+
+
+35 
+ #__Ãed_FILE
+
+
+ )
+
+37 
+ ~<¡dio.h
+>
+
+39 
+ #__Ãed___va_li¡
+
+
+ )
+
+40 
+ ~<¡d¬g.h
+>
+
+43 
+ #__Ãed_size_t
+
+
+ )
+
+44 
+ #__Ãed_wch¬_t
+
+
+ )
+
+45 
+ #__Ãed_NULL
+
+
+ )
+
+47 
+ #__Ãed_wšt_t
+
+
+ )
+
+48 
+ ~<¡ddef.h
+>
+
+50 
+ ~<b™s/wch¬.h
+>
+
+54 #iâdeà
+_WINT_T
+
+
+59 
+ #_WINT_T
+
+
+ )
+
+60 
+ twšt_t
+;
+
+64 #iâdeà
+__mb¡©e_t_defšed
+
+
+65 
+ #__mb¡©e_t_defšed
+ 1
+
+ )
+
+69 
+ m__couÁ
+;
+
+72
+wšt_t
+
+ m__wch
+;
+
+73 
+ m__wchb
+[4];
+
+74 }
+ m__v®ue
+;
+
+75 }
+ t__mb¡©e_t
+;
+
+77 #undeà
+__Ãed_mb¡©e_t
+
+
+82 #ifdeà
+_WCHAR_H
+
+
+85 
+__mb¡©e_t
+
+ tmb¡©e_t
+;
+
+87 #iâdeà
+WCHAR_MIN
+
+
+89 
+ #WCHAR_MIN
+
+__WCHAR_MIN
+
+
+ )
+
+90 
+ #WCHAR_MAX
+
+__WCHAR_MAX
+
+
+ )
+
+93 #iâdeà
+WEOF
+
+
+94 
+ #WEOF
+ (0xffffffffu)
+
+ )
+
+99 #ià
+defšed
+
+__USE_XOPEN
+ && !defšed
+__USE_UNIX98
+
+
+100 
+ ~<wùy³.h
+>
+
+105 
+ gtm
+;
+
+108
+__BEGIN_DECLS
+
+
+111
+wch¬_t
+ *
+ $wcsýy
+ (
+wch¬_t
+ *
+__»¡riù
+
+__de¡
+,
+
+112
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__¤c
+__THROW
+;
+
+114
+wch¬_t
+ *
+ $wc¢ýy
+ (
+wch¬_t
+ *
+__»¡riù
+
+__de¡
+,
+
+115
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+)
+
+116
+__THROW
+;
+
+119
+wch¬_t
+ *
+ $wcsÿt
+ (
+wch¬_t
+ *
+__»¡riù
+
+__de¡
+,
+
+120
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__¤c
+__THROW
+;
+
+122
+wch¬_t
+ *
+ $wc¢ÿt
+ (
+wch¬_t
+ *
+__»¡riù
+
+__de¡
+,
+
+123
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__¤c
+,
+size_t
+
+__n
+)
+
+124
+__THROW
+;
+
+127
+
+ $wcscmp
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s1
+, __cÚ¡ wch¬_ˆ*
+__s2
+)
+
+128
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+130
+
+ $wc¢cmp
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s1
+, __cÚ¡ wch¬_ˆ*
+__s2
+,
+size_t
+
+__n
+)
+
+131
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+133 #ifdeà
+__USE_GNU
+
+
+135
+
+ $wcsÿ£cmp
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s1
+, __cÚ¡ wch¬_ˆ*
+__s2
+__THROW
+;
+
+138
+
+ $wc¢ÿ£cmp
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s1
+, __cÚ¡ wch¬_ˆ*
+__s2
+,
+
+139
+size_t
+
+__n
+__THROW
+;
+
+143 
+ ~<xloÿË.h
+>
+
+145
+
+ $__wcsÿ£cmp_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s1
+, __cÚ¡ wch¬_ˆ*
+__s2
+,
+
+146
+__loÿË_t
+
+__loc
+__THROW
+;
+
+148
+
+ $__wc¢ÿ£cmp_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s1
+, __cÚ¡ wch¬_ˆ*
+__s2
+,
+
+149
+size_t
+
+__n
+,
+__loÿË_t
+
+__loc
+__THROW
+;
+
+154
+
+ $wcscÞl
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s1
+, __cÚ¡ wch¬_ˆ*
+__s2
+__THROW
+;
+
+158
+size_t
+
+ $wcsxäm
+ (
+wch¬_t
+ *
+__»¡riù
+
+__s1
+,
+
+159
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__s2
+,
+size_t
+
+__n
+__THROW
+;
+
+161 #ifdeà
+__USE_GNU
+
+
+167
+
+ $__wcscÞl_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s1
+, __cÚ¡ wch¬_ˆ*
+__s2
+,
+
+168
+__loÿË_t
+
+__loc
+__THROW
+;
+
+172
+size_t
+
+ $__wcsxäm_l
+ (
+wch¬_t
+ *
+__s1
+,
+__cÚ¡
+ wch¬_ˆ*
+__s2
+,
+
+173
+size_t
+
+__n
+,
+__loÿË_t
+
+__loc
+__THROW
+;
+
+176
+wch¬_t
+ *
+ $wcsdup
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s
+__THROW
+
+__©Œibu‹_m®loc__
+;
+
+180
+wch¬_t
+ *
+ $wcschr
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__wcs
+, wch¬_ˆ
+__wc
+)
+
+181
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+183
+wch¬_t
+ *
+ $wc¤chr
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__wcs
+, wch¬_ˆ
+__wc
+)
+
+184
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+186 #ifdeà
+__USE_GNU
+
+
+189
+wch¬_t
+ *
+ $wcschºul
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s
+, wch¬_ˆ
+__wc
+)
+
+190
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+195
+size_t
+
+ $wcsc¥n
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__wcs
+, __cÚ¡ wch¬_ˆ*
+__»jeù
+)
+
+196
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+199
+size_t
+
+ $wcs¥n
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__wcs
+, __cÚ¡ wch¬_ˆ*
+__acû±
+)
+
+200
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+202
+wch¬_t
+ *
+ $wc¥brk
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__wcs
+, __cÚ¡ wch¬_ˆ*
+__acû±
+)
+
+203
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+205
+wch¬_t
+ *
+ $wcs¡r
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__hay¡ack
+, __cÚ¡ wch¬_ˆ*
+__ÃedË
+)
+
+206
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+208 #ifdeà
+__USE_XOPEN
+
+
+210
+wch¬_t
+ *
+ $wcswcs
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__hay¡ack
+, __cÚ¡ wch¬_ˆ*
+__ÃedË
+)
+
+211
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+215
+wch¬_t
+ *
+ $wc¡ok
+ (
+wch¬_t
+ *
+__»¡riù
+
+__s
+,
+
+216
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__d–im
+,
+
+217
+wch¬_t
+ **
+__»¡riù
+
+__±r
+__THROW
+;
+
+220
+size_t
+
+ $wc¦’
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+222 #ifdeà
+__USE_GNU
+
+
+224
+size_t
+
+ $wc¢Ën
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s
+,
+size_t
+
+__maxËn
+)
+
+225
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+230
+wch¬_t
+ *
+ $wmemchr
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s
+, wch¬_ˆ
+__c
+,
+size_t
+
+__n
+)
+
+231
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+234
+
+ $wmemcmp
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__s1
+,
+
+235
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__s2
+,
+size_t
+
+__n
+)
+
+236
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+239
+wch¬_t
+ *
+ $wmemýy
+ (
+wch¬_t
+ *
+__»¡riù
+
+__s1
+,
+
+240
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__s2
+,
+size_t
+
+__n
+__THROW
+;
+
+244
+wch¬_t
+ *
+ $wmemmove
+ (
+wch¬_t
+ *
+__s1
+,
+__cÚ¡
+ wch¬_ˆ*
+__s2
+,
+size_t
+
+__n
+)
+
+245
+__THROW
+;
+
+248
+wch¬_t
+ *
+ $wmem£t
+ (
+wch¬_t
+ *
+__s
+, wch¬_ˆ
+__c
+,
+size_t
+
+__n
+__THROW
+;
+
+250 #ifdeà
+__USE_GNU
+
+
+253
+wch¬_t
+ *
+ $wmempýy
+ (
+wch¬_t
+ *
+__»¡riù
+
+__s1
+,
+
+254
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__s2
+,
+size_t
+
+__n
+)
+
+255
+__THROW
+;
+
+261
+wšt_t
+
+ $btowc
+ (
+__c
+__THROW
+;
+
+265
+
+ $wùob
+ (
+wšt_t
+
+__c
+__THROW
+;
+
+269
+
+ $mbsš™
+ (
+__cÚ¡
+
+mb¡©e_t
+ *
+__ps
+__THROW
+
+__©Œibu‹_pu»__
+;
+
+273
+size_t
+
+ $mb¹owc
+ (
+wch¬_t
+ *
+__»¡riù
+
+__pwc
+,
+
+274
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__n
+,
+
+275
+mb¡©e_t
+ *
+__p
+__THROW
+;
+
+278
+size_t
+
+ $wütomb
+ (*
+__»¡riù
+
+__s
+,
+wch¬_t
+
+__wc
+,
+
+279
+mb¡©e_t
+ *
+__»¡riù
+
+__ps
+__THROW
+;
+
+282
+size_t
+
+ $__mb¾’
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__n
+,
+
+283
+mb¡©e_t
+ *
+__»¡riù
+
+__ps
+__THROW
+;
+
+284
+size_t
+
+ $mb¾’
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__n
+,
+
+285
+mb¡©e_t
+ *
+__»¡riù
+
+__ps
+__THROW
+;
+
+287 #ifdeà
+__USE_EXTERN_INLINES
+
+
+289
+__šlše
+
+size_t
+
+ $mb¾’
+ (
+__cÚ¡
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__n
+,
+
+290
+mb¡©e_t
+ *
+__»¡riù
+
+__ps
+__THROW
+
+
+291 {  (
+__ps
+ !ð
+NULL
+
+
+292 ?
+ `mb¹owc
+ (
+NULL
+,
+__s
+,
+__n
+,
+__ps
+è:
+ `__mb¾’
+ (__s, __n, NULL));
+ }
+}
+
+297
+size_t
+
+ $mb¤towcs
+ (
+wch¬_t
+ *
+__»¡riù
+
+__d¡
+,
+
+298
+__cÚ¡
+ **
+__»¡riù
+
+__¤c
+,
+size_t
+
+__Ën
+,
+
+299
+mb¡©e_t
+ *
+__»¡riù
+
+__ps
+__THROW
+;
+
+303
+size_t
+
+ $wc¤tombs
+ (*
+__»¡riù
+
+__d¡
+,
+
+304
+__cÚ¡
+
+wch¬_t
+ **
+__»¡riù
+
+__¤c
+,
+size_t
+
+__Ën
+,
+
+305
+mb¡©e_t
+ *
+__»¡riù
+
+__ps
+__THROW
+;
+
+308 #ifdef
+__USE_GNU
+
+
+311
+size_t
+
+ $mb¢¹owcs
+ (
+wch¬_t
+ *
+__»¡riù
+
+__d¡
+,
+
+312
+__cÚ¡
+ **
+__»¡riù
+
+__¤c
+,
+size_t
+
+__nmc
+,
+
+313
+size_t
+
+__Ën
+,
+mb¡©e_t
+ *
+__»¡riù
+
+__ps
+__THROW
+;
+
+317
+size_t
+
+ $wc¢¹ombs
+ (*
+__»¡riù
+
+__d¡
+,
+
+318
+__cÚ¡
+
+wch¬_t
+ **
+__»¡riù
+
+__¤c
+,
+
+319
+size_t
+
+__nwc
+, size_ˆ
+__Ën
+,
+
+320
+mb¡©e_t
+ *
+__»¡riù
+
+__ps
+__THROW
+;
+
+325 #ifdeà
+__USE_XOPEN
+
+
+327
+
+ $wcwidth
+ (
+wch¬_t
+
+__c
+__THROW
+;
+
+331
+
+ $wcswidth
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__s
+,
+size_t
+
+__n
+__THROW
+;
+
+337
+
+ $wc¡od
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+338
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+__THROW
+;
+
+340 #ifdeà
+__USE_ISOC99
+
+
+342
+
+ $wc¡of
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+343
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+__THROW
+;
+
+344
+
+ $wc¡Þd
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+345
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+__THROW
+;
+
+351
+
+ $wc¡Þ
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+352
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+__THROW
+;
+
+356
+
+ $wc¡oul
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+357
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+)
+
+358
+__THROW
+;
+
+360 #ià
+defšed
+
+__GNUC__
+ && defšed
+__USE_GNU
+
+
+363
+__ex‹nsiÚ__
+
+
+364
+
+ $wc¡oq
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+365
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+)
+
+366
+__THROW
+;
+
+370
+__ex‹nsiÚ__
+
+
+371
+
+ $wc¡ouq
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+372
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+373 
+__ba£
+__THROW
+;
+
+376 #ià
+defšed
+
+__USE_ISOC99
+ || (defšed
+__GNUC__
+ && defšed
+__USE_GNU
+)
+
+379
+__ex‹nsiÚ__
+
+
+380
+
+ $wc¡Þl
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+381
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+)
+
+382
+__THROW
+;
+
+386
+__ex‹nsiÚ__
+
+
+387
+
+ $wc¡ouÎ
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+388
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+389 
+__ba£
+__THROW
+;
+
+392 #ifdeà
+__USE_GNU
+
+
+406 
+ ~<xloÿË.h
+>
+
+410
+
+ $__wc¡Þ_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+411
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+, 
+__ba£
+,
+
+412
+__loÿË_t
+
+__loc
+__THROW
+;
+
+414
+
+ $__wc¡oul_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+415
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+416 
+__ba£
+,
+__loÿË_t
+
+__loc
+__THROW
+;
+
+418
+__ex‹nsiÚ__
+
+
+419
+
+ $__wc¡Þl_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+420
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+421 
+__ba£
+,
+__loÿË_t
+
+__loc
+__THROW
+;
+
+423
+__ex‹nsiÚ__
+
+
+424
+
+ $__wc¡ouÎ_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+425
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+426 
+__ba£
+,
+__loÿË_t
+
+__loc
+)
+
+427
+__THROW
+;
+
+429
+
+ $__wc¡od_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+430
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+__loÿË_t
+
+__loc
+)
+
+431
+__THROW
+;
+
+433
+
+ $__wc¡of_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+434
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+__loÿË_t
+
+__loc
+)
+
+435
+__THROW
+;
+
+437
+
+ $__wc¡Þd_l
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+438
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+439
+__loÿË_t
+
+__loc
+__THROW
+;
+
+445
+
+ $__wc¡od_š‹º®
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+446
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+, 
+__group
+)
+
+447
+__THROW
+;
+
+448
+
+ $__wc¡of_š‹º®
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+449
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+, 
+__group
+)
+
+450
+__THROW
+;
+
+451
+
+ $__wc¡Þd_š‹º®
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+452
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+453 
+__group
+__THROW
+;
+
+455 #iâdeà
+__wc¡Þ_š‹º®_defšed
+
+
+456
+
+ $__wc¡Þ_š‹º®
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+457
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+458 
+__ba£
+, 
+__group
+__THROW
+;
+
+459 
+ #__wc¡Þ_š‹º®_defšed
+ 1
+
+ )
+
+461 #iâdeà
+__wc¡oul_š‹º®_defšed
+
+
+462
+
+ $__wc¡oul_š‹º®
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Åt
+,
+
+463
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+464 
+__ba£
+, 
+__group
+__THROW
+;
+
+465 
+ #__wc¡oul_š‹º®_defšed
+ 1
+
+ )
+
+467 #iâdeà
+__wc¡Þl_š‹º®_defšed
+
+
+468
+__ex‹nsiÚ__
+
+
+469
+
+ $__wc¡Þl_š‹º®
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+470
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+471 
+__ba£
+, 
+__group
+__THROW
+;
+
+472 
+ #__wc¡Þl_š‹º®_defšed
+ 1
+
+ )
+
+474 #iâdeà
+__wc¡ouÎ_š‹º®_defšed
+
+
+475
+__ex‹nsiÚ__
+
+
+476
+
+ $__wc¡ouÎ_š‹º®
+ (
+__cÚ¡
+
+wch¬_t
+ *
+
+477
+__»¡riù
+
+__Ō
+,
+
+478
+wch¬_t
+ **
+
+479
+__»¡riù
+
+__’d±r
+,
+
+480 
+__ba£
+,
+
+481 
+__group
+__THROW
+;
+
+482 
+ #__wc¡ouÎ_š‹º®_defšed
+ 1
+
+ )
+
+486 #ià
+defšed
+
+__OPTIMIZE__
+ &&
+__GNUC__
+ >= 2
+
+489
+__šlše
+ 
+ $wc¡od
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+490
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+__THROW
+
+
+491 { 
+ `__wc¡od_š‹º®
+ (
+__Ō
+,
+__’d±r
+, 0);
+ }
+}
+
+492
+__šlše
+ 
+ $wc¡Þ
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+493
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+494 
+__ba£
+__THROW
+
+
+495 { 
+ `__wc¡Þ_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+ }
+}
+
+496
+__šlše
+ 
+ $wc¡oul
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+497
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+498 
+__ba£
+__THROW
+
+
+499 { 
+ `__wc¡oul_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+ }
+}
+
+501 #ifdeà
+__USE_GNU
+
+
+502
+__šlše
+ 
+ $wc¡of
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+503
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+__THROW
+
+
+504 { 
+ `__wc¡of_š‹º®
+ (
+__Ō
+,
+__’d±r
+, 0);
+ }
+}
+
+505
+__šlše
+ 
+ $wc¡Þd
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+506
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+__THROW
+
+
+507 { 
+ `__wc¡Þd_š‹º®
+ (
+__Ō
+,
+__’d±r
+, 0);
+ }
+}
+
+510
+__ex‹nsiÚ__
+
+
+511
+__šlše
+ 
+ $wc¡oq
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__Ō
+,
+
+512
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+513 
+__ba£
+__THROW
+
+
+514 { 
+ `__wc¡Þl_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+ }
+}
+
+515
+__ex‹nsiÚ__
+
+
+516
+__šlše
+ 
+ $wc¡ouq
+ (
+__cÚ¡
+
+wch¬_t
+ *
+
+517
+__»¡riù
+
+__Ō
+,
+
+518
+wch¬_t
+ **
+__»¡riù
+
+__’d±r
+,
+
+519 
+__ba£
+__THROW
+
+
+520 { 
+ `__wc¡ouÎ_š‹º®
+ (
+__Ō
+,
+__’d±r
+,
+__ba£
+, 0);
+ }
+}
+
+525 #ifdef
+__USE_GNU
+
+
+528
+wch¬_t
+ *
+ $wýýy
+ (
+wch¬_t
+ *
+__de¡
+,
+__cÚ¡
+ wch¬_ˆ*
+__¤c
+__THROW
+;
+
+532
+wch¬_t
+ *
+ $wýnýy
+ (
+wch¬_t
+ *
+__de¡
+,
+__cÚ¡
+ wch¬_ˆ*
+__¤c
+,
+size_t
+
+__n
+)
+
+533
+__THROW
+;
+
+538 #ià
+defšed
+
+__USE_ISOC99
+ || defšed
+__USE_UNIX98
+
+
+541
+
+ $fwide
+ (
+__FILE
+ *
+__å
+, 
+__mode
+__THROW
+;
+
+545
+
+ $fw´štf
+ (
+__FILE
+ *
+__»¡riù
+
+__¡»am
+,
+
+546
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+, ...)
+
+547
+__THROW
+ ;
+
+549
+
+ $w´štf
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+, ...)
+
+550
+__THROW
+ ;
+
+552
+
+ $sw´štf
+ (
+wch¬_t
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__n
+,
+
+553
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+, ...)
+
+554
+__THROW
+ ;
+
+557
+
+ $vfw´štf
+ (
+__FILE
+ *
+__»¡riù
+
+__s
+,
+
+558
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+,
+
+559
+__gnuc_va_li¡
+
+__¬g
+)
+
+560
+__THROW
+ ;
+
+562
+
+ $vw´štf
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+,
+
+563
+__gnuc_va_li¡
+
+__¬g
+)
+
+564
+__THROW
+ ;
+
+567
+
+ $vsw´štf
+ (
+wch¬_t
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__n
+,
+
+568
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+,
+
+569
+__gnuc_va_li¡
+
+__¬g
+)
+
+570
+__THROW
+ ;
+
+574
+
+ $fwsÿnf
+ (
+__FILE
+ *
+__»¡riù
+
+__¡»am
+,
+
+575
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+, ...)
+
+576
+__THROW
+ ;
+
+578
+
+ $wsÿnf
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+, ...)
+
+579
+__THROW
+ ;
+
+581
+
+ $swsÿnf
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__s
+,
+
+582
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+, ...)
+
+583
+__THROW
+ ;
+
+586 #ifdeà
+__USE_ISOC99
+
+
+588
+
+ $vfwsÿnf
+ (
+__FILE
+ *
+__»¡riù
+
+__s
+,
+
+589
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+,
+
+590
+__gnuc_va_li¡
+
+__¬g
+)
+
+591
+__THROW
+ ;
+
+593
+
+ $vwsÿnf
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+,
+
+594
+__gnuc_va_li¡
+
+__¬g
+)
+
+595
+__THROW
+ ;
+
+597
+
+ $vswsÿnf
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__s
+,
+
+598
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+,
+
+599
+__gnuc_va_li¡
+
+__¬g
+)
+
+600
+__THROW
+ ;
+
+605
+wšt_t
+
+ $fg‘wc
+ (
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+606
+wšt_t
+
+ $g‘wc
+ (
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+609
+wšt_t
+
+ $g‘wch¬
+ (è
+__THROW
+;
+
+613
+wšt_t
+
+ $åutwc
+ (
+wch¬_t
+
+__wc
+,
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+614
+wšt_t
+
+ $putwc
+ (
+wch¬_t
+
+__wc
+,
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+617
+wšt_t
+
+ $putwch¬
+ (
+wch¬_t
+
+__wc
+__THROW
+;
+
+622
+wch¬_t
+ *
+ $fg‘ws
+ (
+wch¬_t
+ *
+__»¡riù
+
+__ws
+, 
+__n
+,
+
+623
+__FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+626
+
+ $åutws
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__ws
+,
+
+627
+__FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+631
+wšt_t
+
+ $ung‘wc
+ (
+wšt_t
+
+__wc
+,
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+634 #ifdeà
+__USE_GNU
+
+
+637
+wšt_t
+
+ $g‘wc_uÆocked
+ (
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+638
+wšt_t
+
+ $g‘wch¬_uÆocked
+ (è
+__THROW
+;
+
+641
+wšt_t
+
+ $fg‘wc_uÆocked
+ (
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+644
+wšt_t
+
+ $åutwc_uÆocked
+ (
+wch¬_t
+
+__wc
+,
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+648
+wšt_t
+
+ $putwc_uÆocked
+ (
+wch¬_t
+
+__wc
+,
+__FILE
+ *
+__¡»am
+__THROW
+;
+
+649
+wšt_t
+
+ $putwch¬_uÆocked
+ (
+wch¬_t
+
+__wc
+__THROW
+;
+
+653
+wch¬_t
+ *
+ $fg‘ws_uÆocked
+ (
+wch¬_t
+ *
+__»¡riù
+
+__ws
+, 
+__n
+,
+
+654
+__FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+657
+
+ $åutws_uÆocked
+ (
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__ws
+,
+
+658
+__FILE
+ *
+__»¡riù
+
+__¡»am
+__THROW
+;
+
+665
+size_t
+
+ $wcsáime
+ (
+wch¬_t
+ *
+__»¡riù
+
+__s
+,
+size_t
+
+__maxsize
+,
+
+666
+__cÚ¡
+
+wch¬_t
+ *
+__»¡riù
+
+__fÜm©
+,
+
+667
+__cÚ¡
+ 
+tm
+ *
+__»¡riù
+
+__
+__THROW
+;
+
+675 #ià
+defšed
+
+__USE_UNIX98
+ && !defšed
+__USE_GNU
+
+
+676 
+ #__Ãed_iswxxx
+
+
+ )
+
+677 
+ ~<wùy³.h
+>
+
+680
+__END_DECLS
+
+
+ @/usr/include/pthread.h
+
+15 #iâdeà
+_PTHREAD_H
+
+
+16 
+ #_PTHREAD_H
+ 1
+
+ )
+
+18 
+ ~<ã©u»s.h
+>
+
+20 
+ ~<sched.h
+>
+
+21 
+ ~<time.h
+>
+
+23 
+ #__Ãed_sig£t_t
+
+
+ )
+
+24 
+ ~<sigÇl.h
+>
+
+25 
+ ~<b™s/±h»adty³s.h
+>
+
+26 
+ ~<b™s/š™¥š.h
+>
+
+29
+ g__BEGIN_DECLS
+
+
+33 
+ #PTHREAD_MUTEX_INITIALIZER
+ \
+
+34 {0, 0, 0,
+PTHREAD_MUTEX_TIMED_NP
+,
+__LOCK_INITIALIZER
+}
+
+ )
+
+35 #ifdeà
+__USE_GNU
+
+
+36 
+ #PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+ \
+
+37 {0, 0, 0,
+PTHREAD_MUTEX_RECURSIVE_NP
+,
+__LOCK_INITIALIZER
+}
+
+ )
+
+38 
+ #PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
+ \
+
+39 {0, 0, 0,
+PTHREAD_MUTEX_ERRORCHECK_NP
+,
+__LOCK_INITIALIZER
+}
+
+ )
+
+40 
+ #PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+ \
+
+41 {0, 0, 0,
+PTHREAD_MUTEX_ADAPTIVE_NP
+,
+__LOCK_INITIALIZER
+}
+
+ )
+
+44 
+ #PTHREAD_COND_INITIALIZER
+ {
+__LOCK_INITIALIZER
+, 0}
+
+ )
+
+46 #ifdeà
+__USE_UNIX98
+
+
+47 
+ #PTHREAD_RWLOCK_INITIALIZER
+ \
+
+48 {
+__LOCK_INITIALIZER
+, 0,
+NULL
+, NULL, NULL, \
+
+49
+PTHREAD_RWLOCK_DEFAULT_NP
+,
+PTHREAD_PROCESS_PRIVATE
+ }
+
+ )
+
+51 #ifdeà
+__USE_GNU
+
+
+52 
+ #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
+ \
+
+53 {
+__LOCK_INITIALIZER
+, 0,
+NULL
+, NULL, NULL, \
+
+54
+PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
+,
+PTHREAD_PROCESS_PRIVATE
+ }
+
+ )
+
+61
+ mPTHREAD_CREATE_JOINABLE
+,
+
+62 
+ #PTHREAD_CREATE_JOINABLE
+
+PTHREAD_CREATE_JOINABLE
+
+
+ )
+
+63
+ mPTHREAD_CREATE_DETACHED
+
+
+64 
+ #PTHREAD_CREATE_DETACHED
+
+PTHREAD_CREATE_DETACHED
+
+
+ )
+
+69
+ mPTHREAD_INHERIT_SCHED
+,
+
+70 
+ #PTHREAD_INHERIT_SCHED
+
+PTHREAD_INHERIT_SCHED
+
+
+ )
+
+71
+ mPTHREAD_EXPLICIT_SCHED
+
+
+72 
+ #PTHREAD_EXPLICIT_SCHED
+
+PTHREAD_EXPLICIT_SCHED
+
+
+ )
+
+77
+ mPTHREAD_SCOPE_SYSTEM
+,
+
+78 
+ #PTHREAD_SCOPE_SYSTEM
+
+PTHREAD_SCOPE_SYSTEM
+
+
+ )
+
+79
+ mPTHREAD_SCOPE_PROCESS
+
+
+80 
+ #PTHREAD_SCOPE_PROCESS
+
+PTHREAD_SCOPE_PROCESS
+
+
+ )
+
+85
+ mPTHREAD_MUTEX_TIMED_NP
+,
+
+86
+ mPTHREAD_MUTEX_RECURSIVE_NP
+,
+
+87
+ mPTHREAD_MUTEX_ERRORCHECK_NP
+,
+
+88
+ mPTHREAD_MUTEX_ADAPTIVE_NP
+
+
+89 #ifdeà
+__USE_UNIX98
+
+
+91
+ mPTHREAD_MUTEX_NORMAL
+ =
+PTHREAD_MUTEX_TIMED_NP
+,
+
+92
+ mPTHREAD_MUTEX_RECURSIVE
+ =
+PTHREAD_MUTEX_RECURSIVE_NP
+,
+
+93
+ mPTHREAD_MUTEX_ERRORCHECK
+ =
+PTHREAD_MUTEX_ERRORCHECK_NP
+,
+
+94
+ mPTHREAD_MUTEX_DEFAULT
+ =
+PTHREAD_MUTEX_NORMAL
+
+
+96 #ifdeà
+__USE_GNU
+
+
+98 ,
+ mPTHREAD_MUTEX_FAST_NP
+ =
+PTHREAD_MUTEX_ADAPTIVE_NP
+
+
+104
+ mPTHREAD_PROCESS_PRIVATE
+,
+
+105 
+ #PTHREAD_PROCESS_PRIVATE
+
+PTHREAD_PROCESS_PRIVATE
+
+
+ )
+
+106
+ mPTHREAD_PROCESS_SHARED
+
+
+107 
+ #PTHREAD_PROCESS_SHARED
+
+PTHREAD_PROCESS_SHARED
+
+
+ )
+
+110 #ifdeà
+__USE_UNIX98
+
+
+113
+ mPTHREAD_RWLOCK_PREFER_READER_NP
+,
+
+114
+ mPTHREAD_RWLOCK_PREFER_WRITER_NP
+,
+
+115
+ mPTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
+,
+
+116
+ mPTHREAD_RWLOCK_DEFAULT_NP
+ =
+PTHREAD_RWLOCK_PREFER_WRITER_NP
+
+
+120 
+ #PTHREAD_ONCE_INIT
+ 0
+
+ )
+
+124 #ifdeà
+__USE_XOPEN2K
+
+
+126 
+ #PTHREAD_BARRIER_SERIAL_THREAD
+ -1
+
+ )
+
+131 
+ s_±h»ad_þ—nup_bufãr
+
+
+133 (*
+ m__routše
+) (*);
+
+134 *
+ m__¬g
+;
+
+135 
+ m__ÿnûÉy³
+;
+
+136 
+_±h»ad_þ—nup_bufãr
+ *
+ m__´ev
+;
+
+143
+ mPTHREAD_CANCEL_ENABLE
+,
+
+144 
+ #PTHREAD_CANCEL_ENABLE
+
+PTHREAD_CANCEL_ENABLE
+
+
+ )
+
+145
+ mPTHREAD_CANCEL_DISABLE
+
+
+146 
+ #PTHREAD_CANCEL_DISABLE
+
+PTHREAD_CANCEL_DISABLE
+
+
+ )
+
+150
+ mPTHREAD_CANCEL_DEFERRED
+,
+
+151 
+ #PTHREAD_CANCEL_DEFERRED
+
+PTHREAD_CANCEL_DEFERRED
+
+
+ )
+
+152
+ mPTHREAD_CANCEL_ASYNCHRONOUS
+
+
+153 
+ #PTHREAD_CANCEL_ASYNCHRONOUS
+
+PTHREAD_CANCEL_ASYNCHRONOUS
+
+
+ )
+
+155 
+ #PTHREAD_CANCELED
+ ((*è-1)
+
+ )
+
+163
+
+±h»ad_ü—‹
+ (
+±h»ad_t
+ *
+__»¡riù
+
+__th»ad
+,
+
+164
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+__©Œ
+,
+
+165 *(*
+__¡¬t_routše
+) (*),
+
+166 *
+__»¡riù
+
+__¬g
+__THROW
+;
+
+169
+±h»ad_t
+
+ $±h»ad_£lf
+ (è
+__THROW
+;
+
+172
+
+ $±h»ad_equ®
+ (
+±h»ad_t
+
+__th»ad1
+,…th»ad_ˆ
+__th»ad2
+__THROW
+;
+
+175
+
+ $±h»ad_ex™
+ (*
+__»tv®
+)
+
+176
+__THROW
+
+ `__©Œibu‹__
+ ((
+__nÜ‘uº__
+));
+
+181
+
+ $±h»ad_još
+ (
+±h»ad_t
+
+__th
+, **
+__th»ad_»tuº
+__THROW
+;
+
+187
+
+ $±h»ad_d‘ach
+ (
+±h»ad_t
+
+__th
+__THROW
+;
+
+195
+
+ $±h»ad_©Œ_š™
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+198
+
+ $±h»ad_©Œ_de¡roy
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+201
+
+ $±h»ad_©Œ_£td‘ach¡©e
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+,
+
+202 
+__d‘ach¡©e
+__THROW
+;
+
+205
+
+ $±h»ad_©Œ_g‘d‘ach¡©e
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__©Œ
+,
+
+206 *
+__d‘ach¡©e
+__THROW
+;
+
+209
+
+ $±h»ad_©Œ_£tsched·¿m
+ (
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+__©Œ
+,
+
+210
+__cÚ¡
+ 
+sched_·¿m
+ *
+__»¡riù
+
+
+211
+__·¿m
+__THROW
+;
+
+214
+
+ $±h»ad_©Œ_g‘sched·¿m
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+
+215
+__©Œ
+,
+
+216 
+sched_·¿m
+ *
+__»¡riù
+
+__·¿m
+)
+
+217
+__THROW
+;
+
+220
+
+ $±h»ad_©Œ_£tschedpÞicy
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+, 
+__pÞicy
+)
+
+221
+__THROW
+;
+
+224
+
+ $±h»ad_©Œ_g‘schedpÞicy
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+
+225
+__©Œ
+, *
+__»¡riù
+
+__pÞicy
+)
+
+226
+__THROW
+;
+
+229
+
+ $±h»ad_©Œ_£tšh”™sched
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+,
+
+230 
+__šh”™
+__THROW
+;
+
+233
+
+ $±h»ad_©Œ_g‘šh”™sched
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+
+234
+__©Œ
+, *
+__»¡riù
+
+__šh”™
+)
+
+235
+__THROW
+;
+
+238
+
+ $±h»ad_©Œ_£tscÝe
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+, 
+__scÝe
+)
+
+239
+__THROW
+;
+
+242
+
+ $±h»ad_©Œ_g‘scÝe
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+__©Œ
+,
+
+243 *
+__»¡riù
+
+__scÝe
+__THROW
+;
+
+245 #ifdeà
+__USE_UNIX98
+
+
+247
+
+ $±h»ad_©Œ_£tgu¬dsize
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+,
+
+248
+size_t
+
+__gu¬dsize
+__THROW
+;
+
+251
+
+ $±h»ad_©Œ_g‘gu¬dsize
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+
+252
+__©Œ
+,
+size_t
+ *
+__»¡riù
+
+__gu¬dsize
+)
+
+253
+__THROW
+;
+
+260
+
+ $±h»ad_©Œ_£t¡ackaddr
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+,
+
+261 *
+__¡ackaddr
+__THROW
+;
+
+264
+
+ $±h»ad_©Œ_g‘¡ackaddr
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+
+265
+__©Œ
+, **
+__»¡riù
+
+__¡ackaddr
+)
+
+266
+__THROW
+;
+
+268 #ifdeà
+__USE_XOPEN2K
+
+
+272
+
+ $±h»ad_©Œ_£t¡ack
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+, *
+__¡ackaddr
+,
+
+273
+size_t
+
+__¡acksize
+__THROW
+;
+
+276
+
+ $±h»ad_©Œ_g‘¡ack
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+__©Œ
+,
+
+277 **
+__»¡riù
+
+__¡ackaddr
+,
+
+278
+size_t
+ *
+__»¡riù
+
+__¡acksize
+__THROW
+;
+
+284
+
+ $±h»ad_©Œ_£t¡acksize
+ (
+±h»ad_©Œ_t
+ *
+__©Œ
+,
+
+285
+size_t
+
+__¡acksize
+__THROW
+;
+
+288
+
+ $±h»ad_©Œ_g‘¡acksize
+ (
+__cÚ¡
+
+±h»ad_©Œ_t
+ *
+__»¡riù
+
+
+289
+__©Œ
+,
+size_t
+ *
+__»¡riù
+
+__¡acksize
+)
+
+290
+__THROW
+;
+
+292 #ifdeà
+__USE_GNU
+
+
+294
+
+ $±h»ad_g‘©Œ_Å
+ (
+±h»ad_t
+
+__th
+,
+±h»ad_©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+301
+
+ $±h»ad_£tsched·¿m
+ (
+±h»ad_t
+
+__rg‘_th»ad
+, 
+__pÞicy
+,
+
+302
+__cÚ¡
+ 
+sched_·¿m
+ *
+__·¿m
+)
+
+303
+__THROW
+;
+
+306
+
+ $±h»ad_g‘sched·¿m
+ (
+±h»ad_t
+
+__rg‘_th»ad
+,
+
+307 *
+__»¡riù
+
+__pÞicy
+,
+
+308 
+sched_·¿m
+ *
+__»¡riù
+
+__·¿m
+)
+
+309
+__THROW
+;
+
+311 #ifdeà
+__USE_UNIX98
+
+
+313
+
+ $±h»ad_g‘cÚcu¼’cy
+ (è
+__THROW
+;
+
+316
+
+ $±h»ad_£tcÚcu¼’cy
+ (
+__Ëv–
+__THROW
+;
+
+319 #ifdeà
+__USE_GNU
+
+
+324
+
+ $±h»ad_y›ld
+ (è
+__THROW
+;
+
+331
+
+ $±h»ad_mu‹x_š™
+ (
+±h»ad_mu‹x_t
+ *
+__»¡riù
+
+__mu‹x
+,
+
+332
+__cÚ¡
+
+±h»ad_mu‹x©Œ_t
+ *
+__»¡riù
+
+
+333
+__mu‹x_©Œ
+__THROW
+;
+
+336
+
+ $±h»ad_mu‹x_de¡roy
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+__THROW
+;
+
+339
+
+ $±h»ad_mu‹x_Œylock
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+__THROW
+;
+
+342
+
+ $±h»ad_mu‹x_lock
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+__THROW
+;
+
+344 #ifdeà
+__USE_XOPEN2K
+
+
+346
+
+ $±h»ad_mu‹x_timedlock
+ (
+±h»ad_mu‹x_t
+ *
+__»¡riù
+
+__mu‹x
+,
+
+347
+__cÚ¡
+ 
+time¥ec
+ *
+__»¡riù
+
+
+348
+__ab¡ime
+__THROW
+;
+
+352
+
+ $±h»ad_mu‹x_uÆock
+ (
+±h»ad_mu‹x_t
+ *
+__mu‹x
+__THROW
+;
+
+359
+
+ $±h»ad_mu‹x©Œ_š™
+ (
+±h»ad_mu‹x©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+362
+
+ $±h»ad_mu‹x©Œ_de¡roy
+ (
+±h»ad_mu‹x©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+365
+
+ $±h»ad_mu‹x©Œ_g‘psh¬ed
+ (
+__cÚ¡
+
+±h»ad_mu‹x©Œ_t
+ *
+
+366
+__»¡riù
+
+__©Œ
+,
+
+367 *
+__»¡riù
+
+__psh¬ed
+__THROW
+;
+
+370
+
+ $±h»ad_mu‹x©Œ_£sh¬ed
+ (
+±h»ad_mu‹x©Œ_t
+ *
+__©Œ
+,
+
+371 
+__psh¬ed
+__THROW
+;
+
+373 #ifdeà
+__USE_UNIX98
+
+
+377
+
+ $±h»ad_mu‹x©Œ_£‰y³
+ (
+±h»ad_mu‹x©Œ_t
+ *
+__©Œ
+, 
+__kšd
+)
+
+378
+__THROW
+;
+
+381
+
+ $±h»ad_mu‹x©Œ_g‘ty³
+ (
+__cÚ¡
+
+±h»ad_mu‹x©Œ_t
+ *
+__»¡riù
+
+
+382
+__©Œ
+, *
+__»¡riù
+
+__kšd
+__THROW
+;
+
+390
+
+ $±h»ad_cÚd_š™
+ (
+±h»ad_cÚd_t
+ *
+__»¡riù
+
+__cÚd
+,
+
+391
+__cÚ¡
+
+±h»ad_cÚd©Œ_t
+ *
+__»¡riù
+
+
+392
+__cÚd_©Œ
+__THROW
+;
+
+395
+
+ $±h»ad_cÚd_de¡roy
+ (
+±h»ad_cÚd_t
+ *
+__cÚd
+__THROW
+;
+
+398
+
+ $±h»ad_cÚd_sigÇl
+ (
+±h»ad_cÚd_t
+ *
+__cÚd
+__THROW
+;
+
+401
+
+ $±h»ad_cÚd_brßdÿ¡
+ (
+±h»ad_cÚd_t
+ *
+__cÚd
+__THROW
+;
+
+405
+
+ $±h»ad_cÚd_wa™
+ (
+±h»ad_cÚd_t
+ *
+__»¡riù
+
+__cÚd
+,
+
+406
+±h»ad_mu‹x_t
+ *
+__»¡riù
+
+__mu‹x
+__THROW
+;
+
+412
+
+ $±h»ad_cÚd_timedwa™
+ (
+±h»ad_cÚd_t
+ *
+__»¡riù
+
+__cÚd
+,
+
+413
+±h»ad_mu‹x_t
+ *
+__»¡riù
+
+__mu‹x
+,
+
+414
+__cÚ¡
+ 
+time¥ec
+ *
+__»¡riù
+
+
+415
+__ab¡ime
+__THROW
+;
+
+420
+
+ $±h»ad_cÚd©Œ_š™
+ (
+±h»ad_cÚd©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+423
+
+ $±h»ad_cÚd©Œ_de¡roy
+ (
+±h»ad_cÚd©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+426
+
+ $±h»ad_cÚd©Œ_g‘psh¬ed
+ (
+__cÚ¡
+
+±h»ad_cÚd©Œ_t
+ *
+
+427
+__»¡riù
+
+__©Œ
+,
+
+428 *
+__»¡riù
+
+__psh¬ed
+__THROW
+;
+
+431
+
+ $±h»ad_cÚd©Œ_£sh¬ed
+ (
+±h»ad_cÚd©Œ_t
+ *
+__©Œ
+,
+
+432 
+__psh¬ed
+__THROW
+;
+
+435 #ifdeà
+__USE_UNIX98
+
+
+440
+
+ $±h»ad_rwlock_š™
+ (
+±h»ad_rwlock_t
+ *
+__»¡riù
+
+__rwlock
+,
+
+441
+__cÚ¡
+
+±h»ad_rwlock©Œ_t
+ *
+__»¡riù
+
+
+442
+__©Œ
+__THROW
+;
+
+445
+
+ $±h»ad_rwlock_de¡roy
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+__THROW
+;
+
+448
+
+ $±h»ad_rwlock_rdlock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+__THROW
+;
+
+451
+
+ $±h»ad_rwlock_Œyrdlock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+__THROW
+;
+
+453 #ifdeà
+__USE_XOPEN2K
+
+
+455
+
+ $±h»ad_rwlock_timedrdlock
+ (
+±h»ad_rwlock_t
+ *
+__»¡riù
+
+__rwlock
+,
+
+456
+__cÚ¡
+ 
+time¥ec
+ *
+__»¡riù
+
+
+457
+__ab¡ime
+__THROW
+;
+
+461
+
+ $±h»ad_rwlock_w¾ock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+__THROW
+;
+
+464
+
+ $±h»ad_rwlock_Œyw¾ock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+__THROW
+;
+
+466 #ifdeà
+__USE_XOPEN2K
+
+
+468
+
+ $±h»ad_rwlock_timedw¾ock
+ (
+±h»ad_rwlock_t
+ *
+__»¡riù
+
+__rwlock
+,
+
+469
+__cÚ¡
+ 
+time¥ec
+ *
+__»¡riù
+
+
+470
+__ab¡ime
+__THROW
+;
+
+474
+
+ $±h»ad_rwlock_uÆock
+ (
+±h»ad_rwlock_t
+ *
+__rwlock
+__THROW
+;
+
+480
+
+ $±h»ad_rwlock©Œ_š™
+ (
+±h»ad_rwlock©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+483
+
+ $±h»ad_rwlock©Œ_de¡roy
+ (
+±h»ad_rwlock©Œ_t
+ *
+__©Œ
+__THROW
+;
+
+486
+
+ $±h»ad_rwlock©Œ_g‘psh¬ed
+ (
+__cÚ¡
+
+±h»ad_rwlock©Œ_t
+ *
+
+487
+__»¡riù
+
+__©Œ
+,
+
+488 *
+__»¡riù
+
+__psh¬ed
+__THROW
+;
+
+491
+
+ $±h»ad_rwlock©Œ_£sh¬ed
+ (
+±h»ad_rwlock©Œ_t
+ *
+__©Œ
+,
+
+492 
+__psh¬ed
+__THROW
+;
+
+495
+
+ $±h»ad_rwlock©Œ_g‘kšd_Å
+ (
+__cÚ¡
+
+±h»ad_rwlock©Œ_t
+ *
+__©Œ
+,
+
+496 *
+__´ef
+__THROW
+;
+
+499
+
+ $±h»ad_rwlock©Œ_£tkšd_Å
+ (
+±h»ad_rwlock©Œ_t
+ *
+__©Œ
+,
+
+500 
+__´ef
+__THROW
+;
+
+503 #ifdeà
+__USE_XOPEN2K
+
+
+509
+
+ $±h»ad_¥š_š™
+ (
+±h»ad_¥šlock_t
+ *
+__lock
+, 
+__psh¬ed
+)
+
+510
+__THROW
+;
+
+513
+
+ $±h»ad_¥š_de¡roy
+ (
+±h»ad_¥šlock_t
+ *
+__lock
+__THROW
+;
+
+516
+
+ $±h»ad_¥š_lock
+ (
+±h»ad_¥šlock_t
+ *
+__lock
+__THROW
+;
+
+519
+
+ $±h»ad_¥š_Œylock
+ (
+±h»ad_¥šlock_t
+ *
+__lock
+__THROW
+;
+
+522
+
+ $±h»ad_¥š_uÆock
+ (
+±h»ad_¥šlock_t
+ *
+__lock
+__THROW
+;
+
+527
+
+ $±h»ad_b¬r›r_š™
+ (
+±h»ad_b¬r›r_t
+ *
+__»¡riù
+
+__b¬r›r
+,
+
+528
+__cÚ¡
+
+±h»ad_b¬r›¿‰r_t
+ *
+__»¡riù
+
+
+529
+__©Œ
+, 
+__couÁ
+__THROW
+;
+
+531
+
+ $±h»ad_b¬r›r_de¡roy
+ (
+±h»ad_b¬r›r_t
+ *
+__b¬r›r
+__THROW
+;
+
+533
+
+ $±h»ad_b¬r›¿‰r_š™
+ (
+±h»ad_b¬r›¿‰r_t
+ *
+__©Œ
+__THROW
+;
+
+535
+
+ $±h»ad_b¬r›¿‰r_de¡roy
+ (
+±h»ad_b¬r›¿‰r_t
+ *
+__©Œ
+__THROW
+;
+
+537
+
+ $±h»ad_b¬r›¿‰r_g‘psh¬ed
+ (
+__cÚ¡
+
+±h»ad_b¬r›¿‰r_t
+ *
+
+538
+__»¡riù
+
+__©Œ
+,
+
+539 *
+__»¡riù
+
+__psh¬ed
+__THROW
+;
+
+541
+
+ $±h»ad_b¬r›¿‰r_£sh¬ed
+ (
+±h»ad_b¬r›¿‰r_t
+ *
+__©Œ
+,
+
+542 
+__psh¬ed
+__THROW
+;
+
+544
+
+ $±h»ad_b¬r›r_wa™
+ (
+±h»ad_b¬r›r_t
+ *
+__b¬r›r
+__THROW
+;
+
+556
+
+ `±h»ad_key_ü—‹
+ (
+±h»ad_key_t
+ *
+__key
+,
+
+557 (*
+__de¡r_funùiÚ
+è(*)è
+__THROW
+;
+
+560
+
+ $±h»ad_key_d–‘e
+ (
+±h»ad_key_t
+
+__key
+__THROW
+;
+
+563
+
+ $±h»ad_£t¥ecific
+ (
+±h»ad_key_t
+
+__key
+,
+
+564
+__cÚ¡
+ *
+__poš‹r
+__THROW
+;
+
+567
+*
+ $±h»ad_g‘¥ecific
+ (
+±h»ad_key_t
+
+__key
+__THROW
+;
+
+576
+
+ `±h»ad_Úû
+ (
+±h»ad_Úû_t
+ *
+__Úû_cÚŒÞ
+,
+
+577 (*
+__š™_routše
+è()è
+__THROW
+;
+
+584
+
+ $±h»ad_£tÿnûl¡©e
+ (
+__¡©e
+, *
+__Þd¡©e
+__THROW
+;
+
+588
+
+ $±h»ad_£tÿnûÉy³
+ (
+__ty³
+, *
+__Þdty³
+__THROW
+;
+
+591
+
+ $±h»ad_ÿnûl
+ (
+±h»ad_t
+
+__th»ad
+__THROW
+;
+
+596
+
+ $±h»ad_‹¡ÿnûl
+ (è
+__THROW
+;
+
+606 
+ #±h»ad_þ—nup_push
+(
+routše
+,
+¬g
+) \
+
+607 { 
+_±h»ad_þ—nup_bufãr
+
+_bufãr
+; \
+
+608
+ `_±h»ad_þ—nup_push
+ (&
+_bufãr
+, (
+routše
+), (
+¬g
+));
+
+ )
+
+610
+
+ `_±h»ad_þ—nup_push
+ (
+_±h»ad_þ—nup_bufãr
+ *
+__bufãr
+,
+
+611 (*
+__routše
+) (*),
+
+612 *
+__¬g
+__THROW
+;
+
+617 
+ #±h»ad_þ—nup_pÝ
+(
+execu‹
+) \
+
+618
+ `_±h»ad_þ—nup_pÝ
+ (&
+_bufãr
+, (
+execu‹
+));
+ }
+
+ )
+}
+
+620
+
+ $_±h»ad_þ—nup_pÝ
+ (
+_±h»ad_þ—nup_bufãr
+ *
+__bufãr
+,
+
+621 
+__execu‹
+__THROW
+;
+
+626 #ifdeà
+__USE_GNU
+
+
+627 
+ #±h»ad_þ—nup_push_deãr_Å
+(
+routše
+,
+¬g
+) \
+
+628 { 
+_±h»ad_þ—nup_bufãr
+
+_bufãr
+; \
+
+629
+ `_±h»ad_þ—nup_push_deãr
+ (&
+_bufãr
+, (
+routše
+), (
+¬g
+));
+
+ )
+
+631
+
+ `_±h»ad_þ—nup_push_deãr
+ (
+_±h»ad_þ—nup_bufãr
+ *
+__bufãr
+,
+
+632 (*
+__routše
+) (*),
+
+633 *
+__¬g
+__THROW
+;
+
+639 
+ #±h»ad_þ—nup_pÝ_»¡Üe_Å
+(
+execu‹
+) \
+
+640
+ `_±h»ad_þ—nup_pÝ_»¡Üe
+ (&
+_bufãr
+, (
+execu‹
+));
+ }
+
+ )
+}
+
+642
+
+ $_±h»ad_þ—nup_pÝ_»¡Üe
+ (
+_±h»ad_þ—nup_bufãr
+ *
+__bufãr
+,
+
+643 
+__execu‹
+__THROW
+;
+
+647 #ifdeà
+__USE_XOPEN2K
+
+
+649
+
+ $±h»ad_g‘ýuþockid
+ (
+±h»ad_t
+
+__th»ad_id
+,
+
+650
+þockid_t
+ *
+__þock_id
+__THROW
+;
+
+655 
+ ~<b™s/sigth»ad.h
+>
+
+671
+
+ `±h»ad_©fÜk
+ ((*
+__´•¬e
+) (),
+
+672 (*
+__·»Á
+) (),
+
+673 (*
+__chžd
+è()è
+__THROW
+;
+
+678
+
+ $±h»ad_kžl_Ùh”_th»ads_Å
+ (è
+__THROW
+;
+
+680
+__END_DECLS
+
+
+ @/usr/include/wctype.h
+
+24 #iâdeà
+_WCTYPE_H
+
+
+26 
+ ~<ã©u»s.h
+>
+
+27 
+ ~<b™s/ty³s.h
+>
+
+29 #iâdeà
+__Ãed_iswxxx
+
+
+30 
+ #_WCTYPE_H
+ 1
+
+ )
+
+34 
+ #__Ãed_wšt_t
+
+
+ )
+
+35 
+ ~<¡ddef.h
+>
+
+36 #iâdeà
+_WINT_T
+
+
+41 
+ #_WINT_T
+
+
+ )
+
+42 
+ twšt_t
+;
+
+47 #iâdeà
+WEOF
+
+
+48 
+ #WEOF
+ (0xffffffffu)
+
+ )
+
+51 #undeà
+__Ãed_iswxxx
+
+
+56 #iâdeà
+__iswxxx_defšed
+
+
+57 
+ #__iswxxx_defšed
+ 1
+
+ )
+
+61 
+ twùy³_t
+;
+
+63 #iâdeà
+_ISwb™
+
+
+68 
+ ~<’dŸn.h
+>
+
+69 #ià
+__BYTE_ORDER
+ =ð
+__BIG_ENDIAN
+
+
+70 
+ #_ISwb™
+(
+b™
+è(1 << (b™))
+
+ )
+
+72 
+ #_ISwb™
+(
+b™
+) \
+
+73 ((
+b™
+) < 8 ? () ((1UL << (bit)) << 24) \
+
+74 : ((
+b™
+) < 16 ? () ((1UL << (bit)) << 8) \
+
+75 : ((
+b™
+) < 24 ? () ((1UL << (bit)) >> 8) \
+
+76 : (è((1UL << (
+b™
+)è>> 24))))
+
+ )
+
+81
+ m__ISwuµ”
+ = 0,
+
+82
+ m__ISwlow”
+ = 1,
+
+83
+ m__ISw®pha
+ = 2,
+
+84
+ m__ISwdig™
+ = 3,
+
+85
+ m__ISwxdig™
+ = 4,
+
+86
+ m__ISw¥aû
+ = 5,
+
+87
+ m__ISw´št
+ = 6,
+
+88
+ m__ISwg¿ph
+ = 7,
+
+89
+ m__ISwbÏnk
+ = 8,
+
+90
+ m__ISwúŒl
+ = 9,
+
+91
+ m__ISwpunù
+ = 10,
+
+92
+ m__ISw®num
+ = 11,
+
+94
+ m_ISwuµ”
+ =
+_ISwb™
+ (
+__ISwuµ”
+),
+
+95
+ m_ISwlow”
+ =
+_ISwb™
+ (
+__ISwlow”
+),
+
+96
+ m_ISw®pha
+ =
+_ISwb™
+ (
+__ISw®pha
+),
+
+97
+ m_ISwdig™
+ =
+_ISwb™
+ (
+__ISwdig™
+),
+
+98
+ m_ISwxdig™
+ =
+_ISwb™
+ (
+__ISwxdig™
+),
+
+99
+ m_ISw¥aû
+ =
+_ISwb™
+ (
+__ISw¥aû
+),
+
+100
+ m_ISw´št
+ =
+_ISwb™
+ (
+__ISw´št
+),
+
+101
+ m_ISwg¿ph
+ =
+_ISwb™
+ (
+__ISwg¿ph
+),
+
+102
+ m_ISwbÏnk
+ =
+_ISwb™
+ (
+__ISwbÏnk
+),
+
+103
+ m_ISwúŒl
+ =
+_ISwb™
+ (
+__ISwúŒl
+),
+
+104
+ m_ISwpunù
+ =
+_ISwb™
+ (
+__ISwpunù
+),
+
+105
+ m_ISw®num
+ =
+_ISwb™
+ (
+__ISw®num
+)
+
+110
+__BEGIN_DECLS
+
+
+118
+
+ $isw®num
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+124
+
+ $isw®pha
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+127
+
+ $iswúŒl
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+131
+
+ $iswdig™
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+135
+
+ $iswg¿ph
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+140
+
+ $iswlow”
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+143
+
+ $isw´št
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+148
+
+ $iswpunù
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+153
+
+ $isw¥aû
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+158
+
+ $iswuµ”
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+163
+
+ $iswxdig™
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+168 #ifdeà
+__USE_ISOC99
+
+
+169
+
+ $iswbÏnk
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+178
+wùy³_t
+
+ $wùy³
+ (
+__cÚ¡
+ *
+__´Ý”ty
+__THROW
+;
+
+182
+
+ $iswùy³
+ (
+wšt_t
+
+__wc
+,
+wùy³_t
+
+__desc
+__THROW
+;
+
+184 #ià
+__GNUC__
+ >ð2 &&
+defšed
+
+__OPTIMIZE__
+
+
+187
+*
+__ùy³32_b
+;
+
+189 
+ #isw®num
+(
+wc
+) \
+
+190 (
+__ex‹nsiÚ__
+ \
+
+191 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+192 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISw®num
+è:
+ `isw®num
+ (wc)))
+
+ )
+
+193 
+ #isw®pha
+(
+wc
+) \
+
+194 (
+__ex‹nsiÚ__
+ \
+
+195 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+196 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISw®pha
+è:
+ `isw®pha
+ (wc)))
+
+ )
+
+197 
+ #iswúŒl
+(
+wc
+) \
+
+198 (
+__ex‹nsiÚ__
+ \
+
+199 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+200 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISwúŒl
+è:
+ `iswúŒl
+ (wc)))
+
+ )
+
+201 
+ #iswdig™
+(
+wc
+) \
+
+202 (
+__ex‹nsiÚ__
+ \
+
+203 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+204 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISwdig™
+è:
+ `iswdig™
+ (wc)))
+
+ )
+
+205 
+ #iswlow”
+(
+wc
+) \
+
+206 (
+__ex‹nsiÚ__
+ \
+
+207 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+208 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISwlow”
+è:
+ `iswlow”
+ (wc)))
+
+ )
+
+209 
+ #iswg¿ph
+(
+wc
+) \
+
+210 (
+__ex‹nsiÚ__
+ \
+
+211 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+212 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISwg¿ph
+è:
+ `iswg¿ph
+ (wc)))
+
+ )
+
+213 
+ #isw´št
+(
+wc
+) \
+
+214 (
+__ex‹nsiÚ__
+ \
+
+215 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+216 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISw´št
+è:
+ `isw´št
+ (wc)))
+
+ )
+
+217 
+ #iswpunù
+(
+wc
+) \
+
+218 (
+__ex‹nsiÚ__
+ \
+
+219 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+220 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISwpunù
+è:
+ `iswpunù
+ (wc)))
+
+ )
+
+221 
+ #isw¥aû
+(
+wc
+) \
+
+222 (
+__ex‹nsiÚ__
+ \
+
+223 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+224 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISw¥aû
+è:
+ `isw¥aû
+ (wc)))
+
+ )
+
+225 
+ #iswuµ”
+(
+wc
+) \
+
+226 (
+__ex‹nsiÚ__
+ \
+
+227 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+228 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISwuµ”
+è:
+ `iswuµ”
+ (wc)))
+
+ )
+
+229 
+ #iswxdig™
+(
+wc
+) \
+
+230 (
+__ex‹nsiÚ__
+ \
+
+231 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+232 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISwxdig™
+è:
+ `iswxdig™
+ (wc)))
+
+ )
+
+234 #ifdeà
+__USE_ISOC99
+
+
+235 
+ #iswbÏnk
+(
+wc
+) \
+
+236 (
+__ex‹nsiÚ__
+ \
+
+237 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+238 ? (è(
+__ùy³32_b
+[(
+wšt_t
+è(
+wc
+)] &
+_ISwbÏnk
+è:
+ `iswbÏnk
+ (wc)))
+
+ )
+
+249 
+__cÚ¡
+
+ t__št32_t
+ *
+ twù¿ns_t
+;
+
+252
+wšt_t
+
+ $towlow”
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+255
+wšt_t
+
+ $towuµ”
+ (
+wšt_t
+
+__wc
+__THROW
+;
+
+257 #ià
+__GNUC__
+ >ð2 &&
+defšed
+
+__OPTIMIZE__
+
+
+260
+cÚ¡
+wšt_t
+ *
+__ùy³32_tÞow”
+;
+
+261
+cÚ¡
+wšt_t
+ *
+__ùy³32_touµ”
+;
+
+263 
+ #towlow”
+(
+wc
+) \
+
+264 (
+__ex‹nsiÚ__
+ \
+
+265 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+266 ? (
+wšt_t
+__ùy³32_tÞow”
+[(wšt_tè(
+wc
+)] :
+ `towlow”
+ (wc)))
+
+ )
+
+268 
+ #towuµ”
+(
+wc
+) \
+
+269 (
+__ex‹nsiÚ__
+ \
+
+270 (
+ `__bužtš_cÚ¡ªt_p
+ (
+wc
+è&& (
+wšt_t
+è(wcè<ð
+L
+'\xff' \
+
+271 ? (
+wšt_t
+__ùy³32_touµ”
+[(wšt_tè(
+wc
+)] :
+ `towuµ”
+ (wc)))
+
+ )
+
+275
+__END_DECLS
+
+
+282 #ifdeà
+_WCTYPE_H
+
+
+288
+__BEGIN_DECLS
+
+
+292
+wù¿ns_t
+
+ $wù¿ns
+ (
+__cÚ¡
+ *
+__´Ý”ty
+__THROW
+;
+
+295
+wšt_t
+
+ $towù¿ns
+ (
+wšt_t
+
+__wc
+,
+wù¿ns_t
+
+__desc
+__THROW
+;
+
+297 #ifdeà
+__USE_GNU
+
+
+299 
+ ~<xloÿË.h
+>
+
+303
+
+ $__isw®num_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+309
+
+ $__isw®pha_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+312
+
+ $__iswúŒl_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+316
+
+ $__iswdig™_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+320
+
+ $__iswg¿ph_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+325
+
+ $__iswlow”_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+328
+
+ $__isw´št_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+333
+
+ $__iswpunù_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+338
+
+ $__isw¥aû_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+343
+
+ $__iswuµ”_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+348
+
+ $__iswxdig™_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+353
+
+ $__iswbÏnk_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+357
+wùy³_t
+
+ $__wùy³_l
+ (
+__cÚ¡
+ *
+__´Ý”ty
+,
+__loÿË_t
+
+__loÿË
+)
+
+358
+__THROW
+;
+
+362
+
+ $__iswùy³_l
+ (
+wšt_t
+
+__wc
+,
+wùy³_t
+
+__desc
+,
+__loÿË_t
+
+__loÿË
+)
+
+363
+__THROW
+;
+
+371
+wšt_t
+
+ $__towlow”_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+374
+wšt_t
+
+ $__towuµ”_l
+ (
+wšt_t
+
+__wc
+,
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+378
+wù¿ns_t
+
+ $__wù¿ns_l
+ (
+__cÚ¡
+ *
+__´Ý”ty
+,
+__loÿË_t
+
+__loÿË
+)
+
+379
+__THROW
+;
+
+382
+wšt_t
+
+ $__towù¿ns_l
+ (
+wšt_t
+
+__wc
+,
+wù¿ns_t
+
+__desc
+,
+
+383
+__loÿË_t
+
+__loÿË
+__THROW
+;
+
+387
+__END_DECLS
+
+
+ @/usr/include/bits/initspin.h
+
+23 
+ #__LT_SPINLOCK_INIT
+ 0
+
+ )
+
+26 
+ #__LOCK_INITIALIZER
+ { 0,
+__LT_SPINLOCK_INIT
+ }
+
+ )
+
+27 
+ #__ALT_LOCK_INITIALIZER
+ { 0,
+__LT_SPINLOCK_INIT
+ }
+
+ )
+
+28 
+ #__ATOMIC_INITIALIZER
+ { 0,
+__LT_SPINLOCK_INIT
+ }
+
+ )
+
+ @/usr/include/sched.h
+
+20 #iâdef
+_SCHED_H
+
+
+21 
+ #_SCHED_H
+ 1
+
+ )
+
+23 
+ ~<ã©u»s.h
+>
+
+26 
+ ~<b™s/ty³s.h
+>
+
+28 
+ #__Ãed_time¥ec
+
+
+ )
+
+29 
+ ~<time.h
+>
+
+32 
+ ~<b™s/sched.h
+>
+
+34 
+ #sched_´iÜ™y
+
+__sched_´iÜ™y
+
+
+ )
+
+37
+__BEGIN_DECLS
+
+
+40
+
+ $sched_£¬am
+ (
+__pid_t
+
+__pid
+,
+__cÚ¡
+ 
+sched_·¿m
+ *
+__·¿m
+)
+
+41
+__THROW
+;
+
+44
+
+ $sched_g‘·¿m
+ (
+__pid_t
+
+__pid
+, 
+sched_·¿m
+ *
+__·¿m
+__THROW
+;
+
+47
+
+ $sched_£tscheduËr
+ (
+__pid_t
+
+__pid
+, 
+__pÞicy
+,
+
+48
+__cÚ¡
+ 
+sched_·¿m
+ *
+__·¿m
+__THROW
+;
+
+51
+
+ $sched_g‘scheduËr
+ (
+__pid_t
+
+__pid
+__THROW
+;
+
+54
+
+ $sched_y›ld
+ (è
+__THROW
+;
+
+57
+
+ $sched_g‘_´iÜ™y_max
+ (
+__®gÜ™hm
+__THROW
+;
+
+60
+
+ $sched_g‘_´iÜ™y_mš
+ (
+__®gÜ™hm
+__THROW
+;
+
+63
+
+ $sched_¼_g‘_š‹rv®
+ (
+__pid_t
+
+__pid
+, 
+time¥ec
+ *
+__t
+__THROW
+;
+
+65
+__END_DECLS
+
+
+ @
+1
+.
+1
+/usr/include
+148
+3046
+EXTERN.h
+INTERN.h
+arg.h
+array.c
+array.h
+cmd.c
+cmd.h
+config.h
+cons.c
+consarg.c
+doarg.c
+doio.c
+dolist.c
+dump.c
+eval.c
+form.c
+form.h
+handy.h
+hash.c
+hash.h
+malloc.c
+patch-malloc.c
+patchlevel.h
+perl.c
+perl.h
+perly.c
+perly.h
+regcomp.c
+regcomp.h
+regexec.c
+regexp.h
+spat.h
+stab.c
+stab.h
+str.c
+str.h
+toke.c
+tperly.c
+usersub.c
+util.c
+util.h
+/usr/include/ctype.h
+/usr/include/dirent.h
+/usr/include/errno.h
+/usr/include/fcntl.h
+/usr/include/gdbm.h
+/usr/include/grp.h
+/usr/include/netdb.h
+/usr/include/netinet/in.h
+/usr/include/pwd.h
+/usr/include/setjmp.h
+/usr/include/signal.h
+/usr/include/stdio.h
+/usr/include/stdlib.h
+/usr/include/string.h
+/usr/include/sys/dir.h
+/usr/include/sys/file.h
+/usr/include/sys/ioctl.h
+/usr/include/sys/ipc.h
+/usr/include/sys/msg.h
+/usr/include/sys/param.h
+/usr/include/sys/select.h
+/usr/include/sys/sem.h
+/usr/include/sys/shm.h
+/usr/include/sys/socket.h
+/usr/include/sys/stat.h
+/usr/include/sys/time.h
+/usr/include/sys/times.h
+/usr/include/sys/types.h
+/usr/include/time.h
+/usr/include/utime.h
+/usr/include/alloca.h
+/usr/include/bits/byteswap.h
+/usr/include/bits/dirent.h
+/usr/include/bits/errno.h
+/usr/include/bits/fcntl.h
+/usr/include/bits/in.h
+/usr/include/bits/ioctl-types.h
+/usr/include/bits/ioctls.h
+/usr/include/bits/ipc.h
+/usr/include/bits/msq.h
+/usr/include/bits/netdb.h
+/usr/include/bits/posix1_lim.h
+/usr/include/bits/select.h
+/usr/include/bits/sem.h
+/usr/include/bits/setjmp.h
+/usr/include/bits/shm.h
+/usr/include/bits/sigaction.h
+/usr/include/bits/sigcontext.h
+/usr/include/bits/siginfo.h
+/usr/include/bits/signum.h
+/usr/include/bits/sigset.h
+/usr/include/bits/sigstack.h
+/usr/include/bits/sigthread.h
+/usr/include/bits/socket.h
+/usr/include/bits/stat.h
+/usr/include/bits/stdio.h
+/usr/include/bits/stdio_lim.h
+/usr/include/bits/string.h
+/usr/include/bits/string2.h
+/usr/include/bits/time.h
+/usr/include/bits/types.h
+/usr/include/bits/waitflags.h
+/usr/include/bits/waitstatus.h
+/usr/include/endian.h
+/usr/include/features.h
+/usr/include/getopt.h
+/usr/include/libio.h
+/usr/include/limits.h
+/usr/include/linux/limits.h
+/usr/include/linux/param.h
+/usr/include/rpc/netdb.h
+/usr/include/stdint.h
+/usr/include/sys/sysmacros.h
+/usr/include/sys/ttydefaults.h
+/usr/include/sys/uio.h
+/usr/include/ucontext.h
+/usr/include/xlocale.h
+/usr/include/_G_config.h
+/usr/include/asm/ioctls.h
+/usr/include/asm/param.h
+/usr/include/asm/sigcontext.h
+/usr/include/asm/socket.h
+/usr/include/bits/endian.h
+/usr/include/bits/local_lim.h
+/usr/include/bits/posix2_lim.h
+/usr/include/bits/pthreadtypes.h
+/usr/include/bits/sockaddr.h
+/usr/include/bits/stdio-lock.h
+/usr/include/bits/uio.h
+/usr/include/bits/wchar.h
+/usr/include/bits/wordsize.h
+/usr/include/bits/xopen_lim.h
+/usr/include/gnu/stubs.h
+/usr/include/linux/errno.h
+/usr/include/sys/cdefs.h
+/usr/include/sys/ucontext.h
+/usr/include/asm/errno.h
+/usr/include/asm/ioctl.h
+/usr/include/asm/sockios.h
+/usr/include/bits/libc-lock.h
+/usr/include/bits/sched.h
+/usr/include/gconv.h
+/usr/include/wchar.h
+/usr/include/pthread.h
+/usr/include/wctype.h
+/usr/include/bits/initspin.h
+/usr/include/sched.h
diff --git a/MultiSource/Benchmarks/MallocBench/perl/doarg.c b/MultiSource/Benchmarks/MallocBench/perl/doarg.c
new file mode 100644
index 00000000..2f8e9001
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/doarg.c
@@ -0,0 +1,1578 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/11 17:40:14 lwall
+ * patch1: fixed undefined environ problem
+ * patch1: fixed debugger coredump on subroutines
+ *
+ * Revision 4.0 91/03/20 01:06:42 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
+#include <signal.h>
+#endif
+
+extern unsigned char fold[];
+
+#ifdef BUGGY_MSC
+ #pragma function(memcmp)
+#endif /* BUGGY_MSC */
+
+int
+do_subst(str,arg,sp)
+STR *str;
+ARG *arg;
+int sp;
+{
+ register SPAT *spat;
+ SPAT *rspat;
+ register STR *dstr;
+ register char *s = str_get(str);
+ char *strend = s + str->str_cur;
+ register char *m;
+ char *c;
+ register char *d;
+ int clen;
+ int iters = 0;
+ int maxiters = (strend - s) + 10;
+ register int i;
+ bool once;
+ char *orig;
+ int safebase;
+
+ rspat = spat = arg[2].arg_ptr.arg_spat;
+ if (!spat || !s)
+ fatal("panic: do_subst");
+ else if (spat->spat_runtime) {
+ nointrp = "|)";
+ (void)eval(spat->spat_runtime,G_SCALAR,sp);
+ m = str_get(dstr = stack->ary_array[sp+1]);
+ nointrp = "";
+ if (spat->spat_regexp) {
+ regfree(spat->spat_regexp);
+ spat->spat_regexp = Null(REGEXP*); /* required if regcomp pukes */
+ }
+ spat->spat_regexp = regcomp(m,m+dstr->str_cur,
+ spat->spat_flags & SPAT_FOLD);
+ if (spat->spat_flags & SPAT_KEEP) {
+ arg_free(spat->spat_runtime); /* it won't change, so */
+ spat->spat_runtime = Nullarg; /* no point compiling again */
+ }
+ }
+#ifdef DEBUGGING
+ if (debug & 8) {
+ deb("2.SPAT /%s/\n",spat->spat_regexp->precomp);
+ }
+#endif
+ safebase = ((!spat->spat_regexp || !spat->spat_regexp->nparens) &&
+ !sawampersand);
+ if (!*spat->spat_regexp->precomp && lastspat)
+ spat = lastspat;
+ orig = m = s;
+ if (hint) {
+ if (hint < s || hint > strend)
+ fatal("panic: hint in do_match");
+ s = hint;
+ hint = Nullch;
+ if (spat->spat_regexp->regback >= 0) {
+ s -= spat->spat_regexp->regback;
+ if (s < m)
+ s = m;
+ }
+ else
+ s = m;
+ }
+ else if (spat->spat_short) {
+ if (spat->spat_flags & SPAT_SCANFIRST) {
+ if (str->str_pok & SP_STUDIED) {
+ if (screamfirst[spat->spat_short->str_rare] < 0)
+ goto nope;
+ else if (!(s = screaminstr(str,spat->spat_short)))
+ goto nope;
+ }
+#ifndef lint
+ else if (!(s = fbminstr((unsigned char*)s, (unsigned char*)strend,
+ spat->spat_short)))
+ goto nope;
+#endif
+ if (s && spat->spat_regexp->regback >= 0) {
+ ++spat->spat_short->str_u.str_useful;
+ s -= spat->spat_regexp->regback;
+ if (s < m)
+ s = m;
+ }
+ else
+ s = m;
+ }
+ else if (!multiline && (*spat->spat_short->str_ptr != *s ||
+ bcmp(spat->spat_short->str_ptr, s, spat->spat_slen) ))
+ goto nope;
+ if (--spat->spat_short->str_u.str_useful < 0) {
+ str_free(spat->spat_short);
+ spat->spat_short = Nullstr; /* opt is being useless */
+ }
+ }
+ once = ((rspat->spat_flags & SPAT_ONCE) != 0);
+ if (rspat->spat_flags & SPAT_CONST) { /* known replacement string? */
+ if ((rspat->spat_repl[1].arg_type & A_MASK) == A_SINGLE)
+ dstr = rspat->spat_repl[1].arg_ptr.arg_str;
+ else { /* constant over loop, anyway */
+ (void)eval(rspat->spat_repl,G_SCALAR,sp);
+ dstr = stack->ary_array[sp+1];
+ }
+ c = str_get(dstr);
+ clen = dstr->str_cur;
+ if (clen <= spat->spat_slen + (int)spat->spat_regexp->regback) {
+ /* can do inplace substitution */
+ if (regexec(spat->spat_regexp, s, strend, orig, 0,
+ str->str_pok & SP_STUDIED ? str : Nullstr, safebase)) {
+ if (spat->spat_regexp->subbase) /* oops, no we can't */
+ goto long_way;
+ d = s;
+ lastspat = spat;
+ str->str_pok = SP_VALID; /* disable possible screamer */
+ if (once) {
+ m = spat->spat_regexp->startp[0];
+ d = spat->spat_regexp->endp[0];
+ s = orig;
+ if (m - s > strend - d) { /* faster to shorten from end */
+ if (clen) {
+ (void)bcopy(c, m, clen);
+ m += clen;
+ }
+ i = strend - d;
+ if (i > 0) {
+ (void)bcopy(d, m, i);
+ m += i;
+ }
+ *m = '\0';
+ str->str_cur = m - s;
+ STABSET(str);
+ str_numset(arg->arg_ptr.arg_str, 1.0);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+ }
+ else if (i = m - s) { /* faster from front */
+ d -= clen;
+ m = d;
+ str_chop(str,d-i);
+ s += i;
+ while (i--)
+ *--d = *--s;
+ if (clen)
+ (void)bcopy(c, m, clen);
+ STABSET(str);
+ str_numset(arg->arg_ptr.arg_str, 1.0);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+ }
+ else if (clen) {
+ d -= clen;
+ str_chop(str,d);
+ (void)bcopy(c,d,clen);
+ STABSET(str);
+ str_numset(arg->arg_ptr.arg_str, 1.0);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+ }
+ else {
+ str_chop(str,d);
+ STABSET(str);
+ str_numset(arg->arg_ptr.arg_str, 1.0);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+ }
+ /* NOTREACHED */
+ }
+ do {
+ if (iters++ > maxiters)
+ fatal("Substitution loop");
+ m = spat->spat_regexp->startp[0];
+ if (i = m - s) {
+ if (s != d)
+ (void)bcopy(s,d,i);
+ d += i;
+ }
+ if (clen) {
+ (void)bcopy(c,d,clen);
+ d += clen;
+ }
+ s = spat->spat_regexp->endp[0];
+ } while (regexec(spat->spat_regexp, s, strend, orig, s == m,
+ Nullstr, TRUE)); /* (don't match same null twice) */
+ if (s != d) {
+ i = strend - s;
+ str->str_cur = d - str->str_ptr + i;
+ (void)bcopy(s,d,i+1); /* include the Null */
+ }
+ STABSET(str);
+ str_numset(arg->arg_ptr.arg_str, (double)iters);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+ }
+ str_numset(arg->arg_ptr.arg_str, 0.0);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+ }
+ }
+ else
+ c = Nullch;
+ if (regexec(spat->spat_regexp, s, strend, orig, 0,
+ str->str_pok & SP_STUDIED ? str : Nullstr, safebase)) {
+ long_way:
+ dstr = Str_new(25,str_len(str));
+ str_nset(dstr,m,s-m);
+ if (spat->spat_regexp->subbase)
+ curspat = spat;
+ lastspat = spat;
+ do {
+ if (iters++ > maxiters)
+ fatal("Substitution loop");
+ if (spat->spat_regexp->subbase
+ && spat->spat_regexp->subbase != orig) {
+ m = s;
+ s = orig;
+ orig = spat->spat_regexp->subbase;
+ s = orig + (m - s);
+ strend = s + (strend - m);
+ }
+ m = spat->spat_regexp->startp[0];
+ str_ncat(dstr,s,m-s);
+ s = spat->spat_regexp->endp[0];
+ if (c) {
+ if (clen)
+ str_ncat(dstr,c,clen);
+ }
+ else {
+ char *mysubbase = spat->spat_regexp->subbase;
+
+ spat->spat_regexp->subbase = Nullch; /* so recursion works */
+ (void)eval(rspat->spat_repl,G_SCALAR,sp);
+ str_scat(dstr,stack->ary_array[sp+1]);
+ if (spat->spat_regexp->subbase)
+ Safefree(spat->spat_regexp->subbase);
+ spat->spat_regexp->subbase = mysubbase;
+ }
+ if (once)
+ break;
+ } while (regexec(spat->spat_regexp, s, strend, orig, s == m, Nullstr,
+ safebase));
+ str_ncat(dstr,s,strend - s);
+ str_replace(str,dstr);
+ STABSET(str);
+ str_numset(arg->arg_ptr.arg_str, (double)iters);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+ }
+ str_numset(arg->arg_ptr.arg_str, 0.0);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+
+nope:
+ ++spat->spat_short->str_u.str_useful;
+ str_numset(arg->arg_ptr.arg_str, 0.0);
+ stack->ary_array[++sp] = arg->arg_ptr.arg_str;
+ return sp;
+}
+#ifdef BUGGY_MSC
+ #pragma intrinsic(memcmp)
+#endif /* BUGGY_MSC */
+
+int
+do_trans(str,arg)
+STR *str;
+ARG *arg;
+{
+ register short *tbl;
+ register char *s;
+ register int matches = 0;
+ register int ch;
+ register char *send;
+ register char *d;
+ register int squash = arg[2].arg_len & 1;
+
+ tbl = (short*) arg[2].arg_ptr.arg_cval;
+ s = str_get(str);
+ send = s + str->str_cur;
+ if (!tbl || !s)
+ fatal("panic: do_trans");
+#ifdef DEBUGGING
+ if (debug & 8) {
+ deb("2.TBL\n");
+ }
+#endif
+ if (!arg[2].arg_len) {
+ while (s < send) {
+ if ((ch = tbl[*s & 0377]) >= 0) {
+ matches++;
+ *s = ch;
+ }
+ s++;
+ }
+ }
+ else {
+ d = s;
+ while (s < send) {
+ if ((ch = tbl[*s & 0377]) >= 0) {
+ *d = ch;
+ if (matches++ && squash) {
+ if (d[-1] == *d)
+ matches--;
+ else
+ d++;
+ }
+ else
+ d++;
+ }
+ else if (ch == -1) /* -1 is unmapped character */
+ *d++ = *s; /* -2 is delete character */
+ s++;
+ }
+ matches += send - d; /* account for disappeared chars */
+ *d = '\0';
+ str->str_cur = d - str->str_ptr;
+ }
+ STABSET(str);
+ return matches;
+}
+
+void
+do_join(str,arglast)
+register STR *str;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int items = arglast[2] - sp;
+ register char *delim = str_get(st[sp]);
+ int delimlen = st[sp]->str_cur;
+
+ st += ++sp;
+ if (items-- > 0)
+ str_sset(str, *st++);
+ else
+ str_set(str,"");
+ if (delimlen) {
+ for (; items > 0; items--,st++) {
+ str_ncat(str,delim,delimlen);
+ str_scat(str,*st);
+ }
+ }
+ else {
+ for (; items > 0; items--,st++)
+ str_scat(str,*st);
+ }
+ STABSET(str);
+}
+
+void
+do_pack(str,arglast)
+register STR *str;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int items;
+ register char *pat = str_get(st[sp]);
+ register char *patend = pat + st[sp]->str_cur;
+ register int len;
+ int datumtype;
+ STR *fromstr;
+ static char *null10 = "\0\0\0\0\0\0\0\0\0\0";
+ static char *space10 = " ";
+
+ /* These must not be in registers: */
+ char achar;
+ short ashort;
+ int aint;
+ unsigned int auint;
+ long along;
+ unsigned long aulong;
+ char *aptr;
+ float afloat;
+ double adouble;
+
+ items = arglast[2] - sp;
+ st += ++sp;
+ str_nset(str,"",0);
+ while (pat < patend) {
+#define NEXTFROM (items-- > 0 ? *st++ : &str_no)
+ datumtype = *pat++;
+ if (*pat == '*') {
+ len = index("@Xxu",datumtype) ? 0 : items;
+ pat++;
+ }
+ else if (isdigit(*pat)) {
+ len = *pat++ - '0';
+ while (isdigit(*pat))
+ len = (len * 10) + (*pat++ - '0');
+ }
+ else
+ len = 1;
+ switch(datumtype) {
+ default:
+ break;
+ case '%':
+ fatal("% may only be used in unpack");
+ case '@':
+ len -= str->str_cur;
+ if (len > 0)
+ goto grow;
+ len = -len;
+ if (len > 0)
+ goto shrink;
+ break;
+ case 'X':
+ shrink:
+ if (str->str_cur < len)
+ fatal("X outside of string");
+ str->str_cur -= len;
+ str->str_ptr[str->str_cur] = '\0';
+ break;
+ case 'x':
+ grow:
+ while (len >= 10) {
+ str_ncat(str,null10,10);
+ len -= 10;
+ }
+ str_ncat(str,null10,len);
+ break;
+ case 'A':
+ case 'a':
+ fromstr = NEXTFROM;
+ aptr = str_get(fromstr);
+ if (pat[-1] == '*')
+ len = fromstr->str_cur;
+ if (fromstr->str_cur > len)
+ str_ncat(str,aptr,len);
+ else {
+ str_ncat(str,aptr,fromstr->str_cur);
+ len -= fromstr->str_cur;
+ if (datumtype == 'A') {
+ while (len >= 10) {
+ str_ncat(str,space10,10);
+ len -= 10;
+ }
+ str_ncat(str,space10,len);
+ }
+ else {
+ while (len >= 10) {
+ str_ncat(str,null10,10);
+ len -= 10;
+ }
+ str_ncat(str,null10,len);
+ }
+ }
+ break;
+ case 'B':
+ case 'b':
+ {
+ char *savepat = pat;
+ int saveitems = items;
+
+ fromstr = NEXTFROM;
+ aptr = str_get(fromstr);
+ if (pat[-1] == '*')
+ len = fromstr->str_cur;
+ pat = aptr;
+ aint = str->str_cur;
+ str->str_cur += (len+7)/8;
+ STR_GROW(str, str->str_cur + 1);
+ aptr = str->str_ptr + aint;
+ if (len > fromstr->str_cur)
+ len = fromstr->str_cur;
+ aint = len;
+ items = 0;
+ if (datumtype == 'B') {
+ for (len = 0; len++ < aint;) {
+ items |= *pat++ & 1;
+ if (len & 7)
+ items <<= 1;
+ else {
+ *aptr++ = items & 0xff;
+ items = 0;
+ }
+ }
+ }
+ else {
+ for (len = 0; len++ < aint;) {
+ if (*pat++ & 1)
+ items |= 128;
+ if (len & 7)
+ items >>= 1;
+ else {
+ *aptr++ = items & 0xff;
+ items = 0;
+ }
+ }
+ }
+ if (aint & 7) {
+ if (datumtype == 'B')
+ items <<= 7 - (aint & 7);
+ else
+ items >>= 7 - (aint & 7);
+ *aptr++ = items & 0xff;
+ }
+ pat = str->str_ptr + str->str_cur;
+ while (aptr <= pat)
+ *aptr++ = '\0';
+
+ pat = savepat;
+ items = saveitems;
+ }
+ break;
+ case 'H':
+ case 'h':
+ {
+ char *savepat = pat;
+ int saveitems = items;
+
+ fromstr = NEXTFROM;
+ aptr = str_get(fromstr);
+ if (pat[-1] == '*')
+ len = fromstr->str_cur;
+ pat = aptr;
+ aint = str->str_cur;
+ str->str_cur += (len+1)/2;
+ STR_GROW(str, str->str_cur + 1);
+ aptr = str->str_ptr + aint;
+ if (len > fromstr->str_cur)
+ len = fromstr->str_cur;
+ aint = len;
+ items = 0;
+ if (datumtype == 'H') {
+ for (len = 0; len++ < aint;) {
+ if (isalpha(*pat))
+ items |= ((*pat++ & 15) + 9) & 15;
+ else
+ items |= *pat++ & 15;
+ if (len & 1)
+ items <<= 4;
+ else {
+ *aptr++ = items & 0xff;
+ items = 0;
+ }
+ }
+ }
+ else {
+ for (len = 0; len++ < aint;) {
+ if (isalpha(*pat))
+ items |= (((*pat++ & 15) + 9) & 15) << 4;
+ else
+ items |= (*pat++ & 15) << 4;
+ if (len & 1)
+ items >>= 4;
+ else {
+ *aptr++ = items & 0xff;
+ items = 0;
+ }
+ }
+ }
+ if (aint & 1)
+ *aptr++ = items & 0xff;
+ pat = str->str_ptr + str->str_cur;
+ while (aptr <= pat)
+ *aptr++ = '\0';
+
+ pat = savepat;
+ items = saveitems;
+ }
+ break;
+ case 'C':
+ case 'c':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ aint = (int)str_gnum(fromstr);
+ achar = aint;
+ str_ncat(str,&achar,sizeof(char));
+ }
+ break;
+ /* Float and double added by gnb@melba.bby.oz.au 22/11/89 */
+ case 'f':
+ case 'F':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ afloat = (float)str_gnum(fromstr);
+ str_ncat(str, (char *)&afloat, sizeof (float));
+ }
+ break;
+ case 'd':
+ case 'D':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ adouble = (double)str_gnum(fromstr);
+ str_ncat(str, (char *)&adouble, sizeof (double));
+ }
+ break;
+ case 'n':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ ashort = (short)str_gnum(fromstr);
+#ifdef HAS_HTONS
+ ashort = htons(ashort);
+#endif
+ str_ncat(str,(char*)&ashort,sizeof(short));
+ }
+ break;
+ case 'S':
+ case 's':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ ashort = (short)str_gnum(fromstr);
+ str_ncat(str,(char*)&ashort,sizeof(short));
+ }
+ break;
+ case 'I':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ auint = U_I(str_gnum(fromstr));
+ str_ncat(str,(char*)&auint,sizeof(unsigned int));
+ }
+ break;
+ case 'i':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ aint = (int)str_gnum(fromstr);
+ str_ncat(str,(char*)&aint,sizeof(int));
+ }
+ break;
+ case 'N':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ aulong = U_L(str_gnum(fromstr));
+#ifdef HAS_HTONL
+ aulong = htonl(aulong);
+#endif
+ str_ncat(str,(char*)&aulong,sizeof(unsigned long));
+ }
+ break;
+ case 'L':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ aulong = U_L(str_gnum(fromstr));
+ str_ncat(str,(char*)&aulong,sizeof(unsigned long));
+ }
+ break;
+ case 'l':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ along = (long)str_gnum(fromstr);
+ str_ncat(str,(char*)&along,sizeof(long));
+ }
+ break;
+ case 'p':
+ while (len-- > 0) {
+ fromstr = NEXTFROM;
+ aptr = str_get(fromstr);
+ str_ncat(str,(char*)&aptr,sizeof(char*));
+ }
+ break;
+ case 'u':
+ fromstr = NEXTFROM;
+ aptr = str_get(fromstr);
+ aint = fromstr->str_cur;
+ STR_GROW(str,aint * 4 / 3);
+ if (len <= 1)
+ len = 45;
+ else
+ len = len / 3 * 3;
+ while (aint > 0) {
+ int todo;
+
+ if (aint > len)
+ todo = len;
+ else
+ todo = aint;
+ doencodes(str, aptr, todo);
+ aint -= todo;
+ aptr += todo;
+ }
+ break;
+ }
+ }
+ STABSET(str);
+}
+#undef NEXTFROM
+
+doencodes(str, s, len)
+register STR *str;
+register char *s;
+register int len;
+{
+ char hunk[5];
+
+ *hunk = len + ' ';
+ str_ncat(str, hunk, 1);
+ hunk[4] = '\0';
+ while (len > 0) {
+ hunk[0] = ' ' + (077 & (*s >> 2));
+ hunk[1] = ' ' + (077 & ((*s << 4) & 060 | (s[1] >> 4) & 017));
+ hunk[2] = ' ' + (077 & ((s[1] << 2) & 074 | (s[2] >> 6) & 03));
+ hunk[3] = ' ' + (077 & (s[2] & 077));
+ str_ncat(str, hunk, 4);
+ s += 3;
+ len -= 3;
+ }
+ for (s = str->str_ptr; *s; s++) {
+ if (*s == ' ')
+ *s = '`';
+ }
+ str_ncat(str, "\n", 1);
+}
+
+void
+do_sprintf(str,len,sarg)
+register STR *str;
+register int len;
+register STR **sarg;
+{
+ register char *s;
+ register char *t;
+ register char *f;
+ bool dolong;
+ char ch;
+ static STR *sargnull = &str_no;
+ register char *send;
+ char *xs;
+ int xlen;
+ double value;
+ char *origs;
+
+ str_set(str,"");
+ len--; /* don't count pattern string */
+ origs = t = s = str_get(*sarg);
+ send = s + (*sarg)->str_cur;
+ sarg++;
+ for ( ; ; len--) {
+ if (len <= 0 || !*sarg) {
+ sarg = &sargnull;
+ len = 0;
+ }
+ for ( ; t < send && *t != '%'; t++) ;
+ if (t >= send)
+ break; /* end of format string, ignore extra args */
+ f = t;
+ *buf = '\0';
+ xs = buf;
+ dolong = FALSE;
+ for (t++; t < send; t++) {
+ switch (*t) {
+ default:
+ ch = *(++t);
+ *t = '\0';
+ (void)sprintf(xs,f);
+ len++;
+ xlen = strlen(xs);
+ break;
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case '.': case '#': case '-': case '+': case ' ':
+ continue;
+ case 'l':
+ dolong = TRUE;
+ continue;
+ case 'c':
+ ch = *(++t);
+ *t = '\0';
+ xlen = (int)str_gnum(*(sarg++));
+ if (strEQ(f,"%c")) { /* some printfs fail on null chars */
+ *xs = xlen;
+ xs[1] = '\0';
+ xlen = 1;
+ }
+ else {
+ (void)sprintf(xs,f,xlen);
+ xlen = strlen(xs);
+ }
+ break;
+ case 'D':
+ dolong = TRUE;
+ /* FALL THROUGH */
+ case 'd':
+ ch = *(++t);
+ *t = '\0';
+ if (dolong)
+ (void)sprintf(xs,f,(long)str_gnum(*(sarg++)));
+ else
+ (void)sprintf(xs,f,(int)str_gnum(*(sarg++)));
+ xlen = strlen(xs);
+ break;
+ case 'X': case 'O':
+ dolong = TRUE;
+ /* FALL THROUGH */
+ case 'x': case 'o': case 'u':
+ ch = *(++t);
+ *t = '\0';
+ value = str_gnum(*(sarg++));
+ if (dolong)
+ (void)sprintf(xs,f,U_L(value));
+ else
+ (void)sprintf(xs,f,U_I(value));
+ xlen = strlen(xs);
+ break;
+ case 'E': case 'e': case 'f': case 'G': case 'g':
+ ch = *(++t);
+ *t = '\0';
+ (void)sprintf(xs,f,str_gnum(*(sarg++)));
+ xlen = strlen(xs);
+ break;
+ case 's':
+ ch = *(++t);
+ *t = '\0';
+ xs = str_get(*sarg);
+ xlen = (*sarg)->str_cur;
+ if (*xs == 'S' && xs[1] == 't' && xs[2] == 'B' && xs[3] == '\0'
+ && xlen == sizeof(STBP)) {
+ STR *tmpstr = Str_new(24,0);
+
+ stab_fullname(tmpstr, ((STAB*)(*sarg))); /* a stab value! */
+ sprintf(tokenbuf,"*%s",tmpstr->str_ptr);
+ /* reformat to non-binary */
+ xs = tokenbuf;
+ xlen = strlen(tokenbuf);
+ str_free(tmpstr);
+ }
+ sarg++;
+ if (strEQ(f,"%s")) { /* some printfs fail on >128 chars */
+ break; /* so handle simple case */
+ }
+ strcpy(tokenbuf+64,f); /* sprintf($s,...$s...) */
+ *t = ch;
+ (void)sprintf(buf,tokenbuf+64,xs);
+ xs = buf;
+ xlen = strlen(xs);
+ break;
+ }
+ /* end of switch, copy results */
+ *t = ch;
+ STR_GROW(str, str->str_cur + (f - s) + len + 1);
+ str_ncat(str, s, f - s);
+ str_ncat(str, xs, xlen);
+ s = t;
+ break; /* break from for loop */
+ }
+ }
+ str_ncat(str, s, t - s);
+ STABSET(str);
+}
+
+STR *
+do_push(ary,arglast)
+register ARRAY *ary;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int items = arglast[2] - sp;
+ register STR *str = &str_undef;
+
+ for (st += ++sp; items > 0; items--,st++) {
+ str = Str_new(26,0);
+ if (*st)
+ str_sset(str,*st);
+ (void)apush(ary,str);
+ }
+ return str;
+}
+
+void
+do_unshift(ary,arglast)
+register ARRAY *ary;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int items = arglast[2] - sp;
+ register STR *str;
+ register int i;
+
+ aunshift(ary,items);
+ i = 0;
+ for (st += ++sp; i < items; i++,st++) {
+ str = Str_new(27,0);
+ str_sset(str,*st);
+ (void)astore(ary,i,str);
+ }
+}
+
+int
+do_subr(arg,gimme,arglast)
+register ARG *arg;
+int gimme;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int items = arglast[2] - sp;
+ register SUBR *sub;
+ STR *str;
+ STAB *stab;
+ int oldsave = savestack->ary_fill;
+ int oldtmps_base = tmps_base;
+ int hasargs = ((arg[2].arg_type & A_MASK) != A_NULL);
+ register CSV *csv;
+
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else {
+ STR *tmpstr = stab_val(arg[1].arg_ptr.arg_stab);
+
+ if (tmpstr)
+ stab = stabent(str_get(tmpstr),TRUE);
+ else
+ stab = Nullstab;
+ }
+ if (!stab)
+ fatal("Undefined subroutine called");
+ if (!(sub = stab_sub(stab))) {
+ STR *tmpstr = arg[0].arg_ptr.arg_str;
+
+ stab_fullname(tmpstr, stab);
+ fatal("Undefined subroutine \"%s\" called",tmpstr->str_ptr);
+ }
+ if (arg->arg_type == O_DBSUBR && !sub->usersub) {
+ str = stab_val(DBsub);
+ saveitem(str);
+ stab_fullname(str,stab);
+ sub = stab_sub(DBsub);
+ if (!sub)
+ fatal("No DBsub routine");
+ }
+ str = Str_new(15, sizeof(CSV));
+ str->str_state = SS_SCSV;
+ (void)apush(savestack,str);
+ csv = (CSV*)str->str_ptr;
+ csv->sub = sub;
+ csv->stab = stab;
+ csv->curcsv = curcsv;
+ csv->curcmd = curcmd;
+ csv->depth = sub->depth;
+ csv->wantarray = gimme;
+ csv->hasargs = hasargs;
+ curcsv = csv;
+ if (sub->usersub) {
+ csv->hasargs = 0;
+ csv->savearray = Null(ARRAY*);;
+ csv->argarray = Null(ARRAY*);
+ st[sp] = arg->arg_ptr.arg_str;
+ if (!hasargs)
+ items = 0;
+ return (*sub->usersub)(sub->userindex,sp,items);
+ }
+ if (hasargs) {
+ csv->savearray = stab_xarray(defstab);
+ csv->argarray = afake(defstab, items, &st[sp+1]);
+ stab_xarray(defstab) = csv->argarray;
+ }
+ sub->depth++;
+ if (sub->depth >= 2) { /* save temporaries on recursion? */
+ if (sub->depth == 100 && dowarn)
+ warn("Deep recursion on subroutine \"%s\"",stab_name(stab));
+ savelist(sub->tosave->ary_array,sub->tosave->ary_fill);
+ }
+ tmps_base = tmps_max;
+ sp = cmd_exec(sub->cmd,gimme, --sp); /* so do it already */
+ st = stack->ary_array;
+
+ tmps_base = oldtmps_base;
+ for (items = arglast[0] + 1; items <= sp; items++)
+ st[items] = str_mortal(st[items]);
+ /* in case restore wipes old str */
+ restorelist(oldsave);
+ return sp;
+}
+
+int
+do_assign(arg,gimme,arglast)
+register ARG *arg;
+int gimme;
+int *arglast;
+{
+
+ register STR **st = stack->ary_array;
+ STR **firstrelem = st + arglast[1] + 1;
+ STR **firstlelem = st + arglast[0] + 1;
+ STR **lastrelem = st + arglast[2];
+ STR **lastlelem = st + arglast[1];
+ register STR **relem;
+ register STR **lelem;
+
+ register STR *str;
+ register ARRAY *ary;
+ register int makelocal;
+ HASH *hash;
+ int i;
+
+ makelocal = (arg->arg_flags & AF_LOCAL);
+ localizing = makelocal;
+ delaymagic = DM_DELAY; /* catch simultaneous items */
+
+ /* If there's a common identifier on both sides we have to take
+ * special care that assigning the identifier on the left doesn't
+ * clobber a value on the right that's used later in the list.
+ */
+ if (arg->arg_flags & AF_COMMON) {
+ for (relem = firstrelem; relem <= lastrelem; relem++) {
+ if (str = *relem)
+ *relem = str_mortal(str);
+ }
+ }
+ relem = firstrelem;
+ lelem = firstlelem;
+ ary = Null(ARRAY*);
+ hash = Null(HASH*);
+ while (lelem <= lastlelem) {
+ str = *lelem++;
+ if (str->str_state >= SS_HASH) {
+ if (str->str_state == SS_ARY) {
+ if (makelocal)
+ ary = saveary(str->str_u.str_stab);
+ else {
+ ary = stab_array(str->str_u.str_stab);
+ ary->ary_fill = -1;
+ }
+ i = 0;
+ while (relem <= lastrelem) { /* gobble up all the rest */
+ str = Str_new(28,0);
+ if (*relem)
+ str_sset(str,*relem);
+ *(relem++) = str;
+ (void)astore(ary,i++,str);
+ }
+ }
+ else if (str->str_state == SS_HASH) {
+ char *tmps;
+ STR *tmpstr;
+ int magic = 0;
+ STAB *tmpstab = str->str_u.str_stab;
+
+ if (makelocal)
+ hash = savehash(str->str_u.str_stab);
+ else {
+ hash = stab_hash(str->str_u.str_stab);
+ if (tmpstab == envstab) {
+ magic = 'E';
+ environ[0] = Nullch;
+ }
+ else if (tmpstab == sigstab) {
+ magic = 'S';
+#ifndef NSIG
+#define NSIG 32
+#endif
+ for (i = 1; i < NSIG; i++)
+ signal(i, SIG_DFL); /* crunch, crunch, crunch */
+ }
+#ifdef SOME_DBM
+ else if (hash->tbl_dbm)
+ magic = 'D';
+#endif
+ hclear(hash, magic == 'D'); /* wipe any dbm file too */
+
+ }
+ while (relem < lastrelem) { /* gobble up all the rest */
+ if (*relem)
+ str = *(relem++);
+ else
+ str = &str_no, relem++;
+ tmps = str_get(str);
+ tmpstr = Str_new(29,0);
+ if (*relem)
+ str_sset(tmpstr,*relem); /* value */
+ *(relem++) = tmpstr;
+ (void)hstore(hash,tmps,str->str_cur,tmpstr,0);
+ if (magic) {
+ str_magic(tmpstr, tmpstab, magic, tmps, str->str_cur);
+ stabset(tmpstr->str_magic, tmpstr);
+ }
+ }
+ }
+ else
+ fatal("panic: do_assign");
+ }
+ else {
+ if (makelocal)
+ saveitem(str);
+ if (relem <= lastrelem) {
+ str_sset(str, *relem);
+ *(relem++) = str;
+ }
+ else {
+ str_sset(str, &str_undef);
+ if (gimme == G_ARRAY) {
+ i = ++lastrelem - firstrelem;
+ relem++; /* tacky, I suppose */
+ astore(stack,i,str);
+ if (st != stack->ary_array) {
+ st = stack->ary_array;
+ firstrelem = st + arglast[1] + 1;
+ firstlelem = st + arglast[0] + 1;
+ lastlelem = st + arglast[1];
+ lastrelem = st + i;
+ relem = lastrelem + 1;
+ }
+ }
+ }
+ STABSET(str);
+ }
+ }
+ if (delaymagic > 1) {
+ if (delaymagic & DM_REUID) {
+#ifdef HAS_SETREUID
+ setreuid(uid,euid);
+#else
+ if (uid != euid || setuid(uid) < 0)
+ fatal("No setreuid available");
+#endif
+ }
+ if (delaymagic & DM_REGID) {
+#ifdef HAS_SETREGID
+ setregid(gid,egid);
+#else
+ if (gid != egid || setgid(gid) < 0)
+ fatal("No setregid available");
+#endif
+ }
+ }
+ delaymagic = 0;
+ localizing = FALSE;
+ if (gimme == G_ARRAY) {
+ i = lastrelem - firstrelem + 1;
+ if (ary || hash)
+ Copy(firstrelem, firstlelem, i, STR*);
+ return arglast[0] + i;
+ }
+ else {
+ str_numset(arg->arg_ptr.arg_str,(double)(arglast[2] - arglast[1]));
+ *firstlelem = arg->arg_ptr.arg_str;
+ return arglast[0] + 1;
+ }
+}
+
+int
+do_study(str,arg,gimme,arglast)
+STR *str;
+ARG *arg;
+int gimme;
+int *arglast;
+{
+ register unsigned char *s;
+ register int pos = str->str_cur;
+ register int ch;
+ register int *sfirst;
+ register int *snext;
+ static int maxscream = -1;
+ static STR *lastscream = Nullstr;
+ int retval;
+ int retarg = arglast[0] + 1;
+
+#ifndef lint
+ s = (unsigned char*)(str_get(str));
+#else
+ s = Null(unsigned char*);
+#endif
+ if (lastscream)
+ lastscream->str_pok &= ~SP_STUDIED;
+ lastscream = str;
+ if (pos <= 0) {
+ retval = 0;
+ goto ret;
+ }
+ if (pos > maxscream) {
+ if (maxscream < 0) {
+ maxscream = pos + 80;
+ New(301,screamfirst, 256, int);
+ New(302,screamnext, maxscream, int);
+ }
+ else {
+ maxscream = pos + pos / 4;
+ Renew(screamnext, maxscream, int);
+ }
+ }
+
+ sfirst = screamfirst;
+ snext = screamnext;
+
+ if (!sfirst || !snext)
+ fatal("do_study: out of memory");
+
+ for (ch = 256; ch; --ch)
+ *sfirst++ = -1;
+ sfirst -= 256;
+
+ while (--pos >= 0) {
+ ch = s[pos];
+ if (sfirst[ch] >= 0)
+ snext[pos] = sfirst[ch] - pos;
+ else
+ snext[pos] = -pos;
+ sfirst[ch] = pos;
+
+ /* If there were any case insensitive searches, we must assume they
+ * all are. This speeds up insensitive searches much more than
+ * it slows down sensitive ones.
+ */
+ if (sawi)
+ sfirst[fold[ch]] = pos;
+ }
+
+ str->str_pok |= SP_STUDIED;
+ retval = 1;
+ ret:
+ str_numset(arg->arg_ptr.arg_str,(double)retval);
+ stack->ary_array[retarg] = arg->arg_ptr.arg_str;
+ return retarg;
+}
+
+int
+do_defined(str,arg,gimme,arglast)
+STR *str;
+register ARG *arg;
+int gimme;
+int *arglast;
+{
+ register int type;
+ register int retarg = arglast[0] + 1;
+ int retval;
+ ARRAY *ary;
+ HASH *hash;
+
+ if ((arg[1].arg_type & A_MASK) != A_LEXPR)
+ fatal("Illegal argument to defined()");
+ arg = arg[1].arg_ptr.arg_arg;
+ type = arg->arg_type;
+
+ if (type == O_SUBR || type == O_DBSUBR)
+ retval = stab_sub(arg[1].arg_ptr.arg_stab) != 0;
+ else if (type == O_ARRAY || type == O_LARRAY ||
+ type == O_ASLICE || type == O_LASLICE )
+ retval = ((ary = stab_xarray(arg[1].arg_ptr.arg_stab)) != 0
+ && ary->ary_max >= 0 );
+ else if (type == O_HASH || type == O_LHASH ||
+ type == O_HSLICE || type == O_LHSLICE )
+ retval = ((hash = stab_xhash(arg[1].arg_ptr.arg_stab)) != 0
+ && hash->tbl_array);
+ else
+ retval = FALSE;
+ str_numset(str,(double)retval);
+ stack->ary_array[retarg] = str;
+ return retarg;
+}
+
+int
+do_undef(str,arg,gimme,arglast)
+STR *str;
+register ARG *arg;
+int gimme;
+int *arglast;
+{
+ register int type;
+ register STAB *stab;
+ int retarg = arglast[0] + 1;
+
+ if ((arg[1].arg_type & A_MASK) != A_LEXPR)
+ fatal("Illegal argument to undef()");
+ arg = arg[1].arg_ptr.arg_arg;
+ type = arg->arg_type;
+
+ if (type == O_ARRAY || type == O_LARRAY) {
+ stab = arg[1].arg_ptr.arg_stab;
+ afree(stab_xarray(stab));
+ stab_xarray(stab) = Null(ARRAY*);
+ }
+ else if (type == O_HASH || type == O_LHASH) {
+ stab = arg[1].arg_ptr.arg_stab;
+ if (stab == envstab)
+ environ[0] = Nullch;
+ else if (stab == sigstab) {
+ int i;
+
+ for (i = 1; i < NSIG; i++)
+ signal(i, SIG_DFL); /* munch, munch, munch */
+ }
+ (void)hfree(stab_xhash(stab), TRUE);
+ stab_xhash(stab) = Null(HASH*);
+ }
+ else if (type == O_SUBR || type == O_DBSUBR) {
+ stab = arg[1].arg_ptr.arg_stab;
+ if (stab_sub(stab)) {
+ cmd_free(stab_sub(stab)->cmd);
+ stab_sub(stab)->cmd = Nullcmd;
+ afree(stab_sub(stab)->tosave);
+ Safefree(stab_sub(stab));
+ stab_sub(stab) = Null(SUBR*);
+ }
+ }
+ else
+ fatal("Can't undefine that kind of object");
+ str_numset(str,0.0);
+ stack->ary_array[retarg] = str;
+ return retarg;
+}
+
+int
+do_vec(lvalue,astr,arglast)
+int lvalue;
+STR *astr;
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ int sp = arglast[0];
+ register STR *str = st[++sp];
+ register int offset = (int)str_gnum(st[++sp]);
+ register int size = (int)str_gnum(st[++sp]);
+ unsigned char *s = (unsigned char*)str_get(str);
+ unsigned long retnum;
+ int len;
+
+ sp = arglast[1];
+ offset *= size; /* turn into bit offset */
+ len = (offset + size + 7) / 8;
+ if (offset < 0 || size < 1)
+ retnum = 0;
+ else if (!lvalue && len > str->str_cur)
+ retnum = 0;
+ else {
+ if (len > str->str_cur) {
+ STR_GROW(str,len);
+ (void)bzero(str->str_ptr + str->str_cur, len - str->str_cur);
+ str->str_cur = len;
+ }
+ s = (unsigned char*)str_get(str);
+ if (size < 8)
+ retnum = (s[offset >> 3] >> (offset & 7)) & ((1 << size) - 1);
+ else {
+ offset >>= 3;
+ if (size == 8)
+ retnum = s[offset];
+ else if (size == 16)
+ retnum = (s[offset] << 8) + s[offset+1];
+ else if (size == 32)
+ retnum = (s[offset] << 24) + (s[offset + 1] << 16) +
+ (s[offset + 2] << 8) + s[offset+3];
+ }
+
+ if (lvalue) { /* it's an lvalue! */
+ struct lstring *lstr = (struct lstring*)astr;
+
+ astr->str_magic = str;
+ st[sp]->str_rare = 'v';
+ lstr->lstr_offset = offset;
+ lstr->lstr_len = size;
+ }
+ }
+
+ str_numset(astr,(double)retnum);
+ st[sp] = astr;
+ return sp;
+}
+
+void
+do_vecset(mstr,str)
+STR *mstr;
+STR *str;
+{
+ struct lstring *lstr = (struct lstring*)str;
+ register int offset;
+ register int size;
+ register unsigned char *s = (unsigned char*)mstr->str_ptr;
+ register unsigned long lval = U_L(str_gnum(str));
+ int mask;
+
+ mstr->str_rare = 0;
+ str->str_magic = Nullstr;
+ offset = lstr->lstr_offset;
+ size = lstr->lstr_len;
+ if (size < 8) {
+ mask = (1 << size) - 1;
+ size = offset & 7;
+ lval &= mask;
+ offset >>= 3;
+ s[offset] &= ~(mask << size);
+ s[offset] |= lval << size;
+ }
+ else {
+ if (size == 8)
+ s[offset] = lval & 255;
+ else if (size == 16) {
+ s[offset] = (lval >> 8) & 255;
+ s[offset+1] = lval & 255;
+ }
+ else if (size == 32) {
+ s[offset] = (lval >> 24) & 255;
+ s[offset+1] = (lval >> 16) & 255;
+ s[offset+2] = (lval >> 8) & 255;
+ s[offset+3] = lval & 255;
+ }
+ }
+}
+
+do_chop(astr,str)
+register STR *astr;
+register STR *str;
+{
+ register char *tmps;
+ register int i;
+ ARRAY *ary;
+ HASH *hash;
+ HENT *entry;
+
+ if (!str)
+ return;
+ if (str->str_state == SS_ARY) {
+ ary = stab_array(str->str_u.str_stab);
+ for (i = 0; i <= ary->ary_fill; i++)
+ do_chop(astr,ary->ary_array[i]);
+ return;
+ }
+ if (str->str_state == SS_HASH) {
+ hash = stab_hash(str->str_u.str_stab);
+ (void)hiterinit(hash);
+ while (entry = hiternext(hash))
+ do_chop(astr,hiterval(hash,entry));
+ return;
+ }
+ tmps = str_get(str);
+ if (!tmps)
+ return;
+ tmps += str->str_cur - (str->str_cur != 0);
+ str_nset(astr,tmps,1); /* remember last char */
+ *tmps = '\0'; /* wipe it out */
+ str->str_cur = tmps - str->str_ptr;
+ str->str_nok = 0;
+ STABSET(str);
+}
+
+do_vop(optype,str,left,right)
+STR *str;
+STR *left;
+STR *right;
+{
+ register char *s;
+ register char *l = str_get(left);
+ register char *r = str_get(right);
+ register int len;
+
+ len = left->str_cur;
+ if (len > right->str_cur)
+ len = right->str_cur;
+ if (str->str_cur > len)
+ str->str_cur = len;
+ else if (str->str_cur < len) {
+ STR_GROW(str,len);
+ (void)bzero(str->str_ptr + str->str_cur, len - str->str_cur);
+ str->str_cur = len;
+ }
+ s = str->str_ptr;
+ if (!s) {
+ str_nset(str,"",0);
+ s = str->str_ptr;
+ }
+ switch (optype) {
+ case O_BIT_AND:
+ while (len--)
+ *s++ = *l++ & *r++;
+ break;
+ case O_XOR:
+ while (len--)
+ *s++ = *l++ ^ *r++;
+ goto mop_up;
+ case O_BIT_OR:
+ while (len--)
+ *s++ = *l++ | *r++;
+ mop_up:
+ len = str->str_cur;
+ if (right->str_cur > len)
+ str_ncat(str,right->str_ptr+len,right->str_cur - len);
+ else if (left->str_cur > len)
+ str_ncat(str,left->str_ptr+len,left->str_cur - len);
+ break;
+ }
+}
+
+int
+do_syscall(arglast)
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int items = arglast[2] - sp;
+ long arg[8];
+ register int i = 0;
+ int retval = -1;
+
+#ifdef HAS_SYSCALL
+#ifdef TAINT
+ for (st += ++sp; items--; st++)
+ tainted |= (*st)->str_tainted;
+ st = stack->ary_array;
+ sp = arglast[1];
+ items = arglast[2] - sp;
+#endif
+#ifdef TAINT
+ taintproper("Insecure dependency in syscall");
+#endif
+ /* This probably won't work on machines where sizeof(long) != sizeof(int)
+ * or where sizeof(long) != sizeof(char*). But such machines will
+ * not likely have syscall implemented either, so who cares?
+ */
+ while (items--) {
+ if (st[++sp]->str_nok || !i)
+ arg[i++] = (long)str_gnum(st[sp]);
+#ifndef lint
+ else
+ arg[i++] = (long)st[sp]->str_ptr;
+#endif /* lint */
+ }
+ sp = arglast[1];
+ items = arglast[2] - sp;
+ switch (items) {
+ case 0:
+ fatal("Too few args to syscall");
+ case 1:
+ retval = syscall(arg[0]);
+ break;
+ case 2:
+ retval = syscall(arg[0],arg[1]);
+ break;
+ case 3:
+ retval = syscall(arg[0],arg[1],arg[2]);
+ break;
+ case 4:
+ retval = syscall(arg[0],arg[1],arg[2],arg[3]);
+ break;
+ case 5:
+ retval = syscall(arg[0],arg[1],arg[2],arg[3],arg[4]);
+ break;
+ case 6:
+ retval = syscall(arg[0],arg[1],arg[2],arg[3],arg[4],arg[5]);
+ break;
+ case 7:
+ retval = syscall(arg[0],arg[1],arg[2],arg[3],arg[4],arg[5],arg[6]);
+ break;
+ case 8:
+ retval = syscall(arg[0],arg[1],arg[2],arg[3],arg[4],arg[5],arg[6],
+ arg[7]);
+ break;
+ }
+ return retval;
+#else
+ fatal("syscall() unimplemented");
+#endif
+}
+
+
diff --git a/MultiSource/Benchmarks/MallocBench/perl/doio.c b/MultiSource/Benchmarks/MallocBench/perl/doio.c
new file mode 100644
index 00000000..61a1ef76
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/doio.c
@@ -0,0 +1,2733 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/11 17:41:06 lwall
+ * patch1: hopefully straightened out some of the Xenix mess
+ *
+ * Revision 4.0 91/03/20 01:07:06 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+#ifdef HAS_SOCKET
+#include <sys/socket.h>
+#include <netdb.h>
+#endif
+
+#ifdef HAS_SELECT
+#ifdef I_SYS_SELECT
+#ifndef I_SYS_TIME
+#include <sys/select.h>
+#endif
+#endif
+#endif
+
+#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
+#include <sys/ipc.h>
+#ifdef HAS_MSG
+#include <sys/msg.h>
+#endif
+#ifdef HAS_SEM
+#include <sys/sem.h>
+#endif
+#ifdef HAS_SHM
+#include <sys/shm.h>
+#endif
+#endif
+
+#ifdef I_PWD
+#include <pwd.h>
+#endif
+#ifdef I_GRP
+#include <grp.h>
+#endif
+#ifdef I_UTIME
+#include <utime.h>
+#endif
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+
+int laststatval = -1;
+int laststype = O_STAT;
+
+bool
+do_open(stab,name,len)
+STAB *stab;
+register char *name;
+int len;
+{
+ FILE *fp;
+ register STIO *stio = stab_io(stab);
+ char *myname = savestr(name);
+ int result;
+ int fd;
+ int writing = 0;
+ char mode[3]; /* stdio file mode ("r\0" or "r+\0") */
+
+ name = myname;
+ forkprocess = 1; /* assume true if no fork */
+ while (len && isspace(name[len-1]))
+ name[--len] = '\0';
+ if (!stio)
+ stio = stab_io(stab) = stio_new();
+ else if (stio->ifp) {
+ fd = fileno(stio->ifp);
+ if (stio->type == '|')
+ result = mypclose(stio->ifp);
+ else if (stio->type == '-')
+ result = 0;
+ else if (stio->ifp != stio->ofp) {
+ if (stio->ofp) {
+ result = fclose(stio->ofp);
+ fclose(stio->ifp); /* clear stdio, fd already closed */
+ }
+ else
+ result = fclose(stio->ifp);
+ }
+ else
+ result = fclose(stio->ifp);
+ if (result == EOF && fd > 2)
+ fprintf(stderr,"Warning: unable to close filehandle %s properly.\n",
+ stab_name(stab));
+ stio->ofp = stio->ifp = Nullfp;
+ }
+ if (*name == '+' && len > 1 && name[len-1] != '|') { /* scary */
+ mode[1] = *name++;
+ mode[2] = '\0';
+ --len;
+ writing = 1;
+ }
+ else {
+ mode[1] = '\0';
+ }
+ stio->type = *name;
+ if (*name == '|') {
+ for (name++; isspace(*name); name++) ;
+#ifdef TAINT
+ taintenv();
+ taintproper("Insecure dependency in piped open");
+#endif
+ fp = mypopen(name,"w");
+ writing = 1;
+ }
+ else if (*name == '>') {
+#ifdef TAINT
+ taintproper("Insecure dependency in open");
+#endif
+ name++;
+ if (*name == '>') {
+ mode[0] = stio->type = 'a';
+ name++;
+ }
+ else
+ mode[0] = 'w';
+ writing = 1;
+ if (*name == '&') {
+ duplicity:
+ name++;
+ while (isspace(*name))
+ name++;
+ if (isdigit(*name))
+ fd = atoi(name);
+ else {
+ stab = stabent(name,FALSE);
+ if (!stab || !stab_io(stab))
+ return FALSE;
+ if (stab_io(stab) && stab_io(stab)->ifp) {
+ fd = fileno(stab_io(stab)->ifp);
+ if (stab_io(stab)->type == 's')
+ stio->type = 's';
+ }
+ else
+ fd = -1;
+ }
+ if (!(fp = fdopen(fd = dup(fd),mode))) {
+ close(fd);
+ }
+ }
+ else {
+ while (isspace(*name))
+ name++;
+ if (strEQ(name,"-")) {
+ fp = stdout;
+ stio->type = '-';
+ }
+ else {
+ fp = fopen(name,mode);
+ }
+ }
+ }
+ else {
+ if (*name == '<') {
+ mode[0] = 'r';
+ name++;
+ while (isspace(*name))
+ name++;
+ if (*name == '&')
+ goto duplicity;
+ if (strEQ(name,"-")) {
+ fp = stdin;
+ stio->type = '-';
+ }
+ else
+ fp = fopen(name,mode);
+ }
+ else if (name[len-1] == '|') {
+#ifdef TAINT
+ taintenv();
+ taintproper("Insecure dependency in piped open");
+#endif
+ name[--len] = '\0';
+ while (len && isspace(name[len-1]))
+ name[--len] = '\0';
+ for (; isspace(*name); name++) ;
+ fp = mypopen(name,"r");
+ stio->type = '|';
+ }
+ else {
+ stio->type = '<';
+ for (; isspace(*name); name++) ;
+ if (strEQ(name,"-")) {
+ fp = stdin;
+ stio->type = '-';
+ }
+ else
+ fp = fopen(name,"r");
+ }
+ }
+ Safefree(myname);
+ if (!fp)
+ return FALSE;
+ if (stio->type &&
+ stio->type != '|' && stio->type != '-') {
+ if (fstat(fileno(fp),&statbuf) < 0) {
+ (void)fclose(fp);
+ return FALSE;
+ }
+ if (S_ISSOCK(statbuf.st_mode))
+ stio->type = 's'; /* in case a socket was passed in to us */
+#ifdef S_IFMT
+ else if (!(statbuf.st_mode & S_IFMT))
+ stio->type = 's'; /* some OS's return 0 on fstat()ed socket */
+#endif
+ }
+#if defined(HAS_FCNTL) && defined(F_SETFD)
+ fd = fileno(fp);
+ fcntl(fd,F_SETFD,fd >= 3);
+#endif
+ stio->ifp = fp;
+ if (writing) {
+ if (stio->type != 's')
+ stio->ofp = fp;
+ else
+ if (!(stio->ofp = fdopen(fileno(fp),"w"))) {
+ fclose(fp);
+ stio->ifp = Nullfp;
+ }
+ }
+ return TRUE;
+}
+
+FILE *
+nextargv(stab)
+register STAB *stab;
+{
+ register STR *str;
+ int filedev;
+ int fileino;
+ int fileuid;
+ int filegid;
+ static int filemode = 0;
+ static int lastfd;
+ static char *oldname;
+
+ if (!argvoutstab)
+ argvoutstab = stabent("ARGVOUT",TRUE);
+ if (filemode & (S_ISUID|S_ISGID)) {
+ fflush(stab_io(argvoutstab)->ifp); /* chmod must follow last write */
+#ifdef HAS_FCHMOD
+ (void)fchmod(lastfd,filemode);
+#else
+ (void)chmod(oldname,filemode);
+#endif
+ }
+ filemode = 0;
+ while (alen(stab_xarray(stab)) >= 0) {
+ str = ashift(stab_xarray(stab));
+ str_sset(stab_val(stab),str);
+ STABSET(stab_val(stab));
+ oldname = str_get(stab_val(stab));
+ if (do_open(stab,oldname,stab_val(stab)->str_cur)) {
+ if (inplace) {
+#ifdef TAINT
+ taintproper("Insecure dependency in inplace open");
+#endif
+ if (strEQ(oldname,"-")) {
+ str_free(str);
+ defoutstab = stabent("STDOUT",TRUE);
+ return stab_io(stab)->ifp;
+ }
+ filedev = statbuf.st_dev;
+ fileino = statbuf.st_ino;
+ filemode = statbuf.st_mode;
+ fileuid = statbuf.st_uid;
+ filegid = statbuf.st_gid;
+ if (!S_ISREG(filemode)) {
+ warn("Can't do inplace edit: %s is not a regular file",
+ oldname );
+ do_close(stab,FALSE);
+ str_free(str);
+ continue;
+ }
+ if (*inplace) {
+#ifdef SUFFIX
+ add_suffix(str,inplace);
+#else
+ str_cat(str,inplace);
+#endif
+#ifndef FLEXFILENAMES
+ if (stat(str->str_ptr,&statbuf) >= 0
+ && statbuf.st_dev == filedev
+ && statbuf.st_ino == fileino ) {
+ warn("Can't do inplace edit: %s > 14 characters",
+ str->str_ptr );
+ do_close(stab,FALSE);
+ str_free(str);
+ continue;
+ }
+#endif
+#ifdef HAS_RENAME
+#ifndef MSDOS
+ if (rename(oldname,str->str_ptr) < 0) {
+ warn("Can't rename %s to %s: %s, skipping file",
+ oldname, str->str_ptr, strerror(errno) );
+ do_close(stab,FALSE);
+ str_free(str);
+ continue;
+ }
+#else
+ do_close(stab,FALSE);
+ (void)unlink(str->str_ptr);
+ (void)rename(oldname,str->str_ptr);
+ do_open(stab,str->str_ptr,stab_val(stab)->str_cur);
+#endif /* MSDOS */
+#else
+ (void)UNLINK(str->str_ptr);
+ if (link(oldname,str->str_ptr) < 0) {
+ warn("Can't rename %s to %s: %s, skipping file",
+ oldname, str->str_ptr, strerror(errno) );
+ do_close(stab,FALSE);
+ str_free(str);
+ continue;
+ }
+ (void)UNLINK(oldname);
+#endif
+ }
+ else {
+#ifndef MSDOS
+ if (UNLINK(oldname) < 0) {
+ warn("Can't rename %s to %s: %s, skipping file",
+ oldname, str->str_ptr, strerror(errno) );
+ do_close(stab,FALSE);
+ str_free(str);
+ continue;
+ }
+#else
+ fatal("Can't do inplace edit without backup");
+#endif
+ }
+
+ str_nset(str,">",1);
+ str_cat(str,oldname);
+ errno = 0; /* in case sprintf set errno */
+ if (!do_open(argvoutstab,str->str_ptr,str->str_cur)) {
+ warn("Can't do inplace edit on %s: %s",
+ oldname, strerror(errno) );
+ do_close(stab,FALSE);
+ str_free(str);
+ continue;
+ }
+ defoutstab = argvoutstab;
+ lastfd = fileno(stab_io(argvoutstab)->ifp);
+ (void)fstat(lastfd,&statbuf);
+#ifdef HAS_FCHMOD
+ (void)fchmod(lastfd,filemode);
+#else
+ (void)chmod(oldname,filemode);
+#endif
+ if (fileuid != statbuf.st_uid || filegid != statbuf.st_gid) {
+#ifdef HAS_FCHOWN
+ (void)fchown(lastfd,fileuid,filegid);
+#else
+#ifdef HAS_CHOWN
+ (void)chown(oldname,fileuid,filegid);
+#endif
+#endif
+ }
+ }
+ str_free(str);
+ return stab_io(stab)->ifp;
+ }
+ else
+ fprintf(stderr,"Can't open %s: %s\n",str_get(str), strerror(errno));
+ str_free(str);
+ }
+ if (inplace) {
+ (void)do_close(argvoutstab,FALSE);
+ defoutstab = stabent("STDOUT",TRUE);
+ }
+ return Nullfp;
+}
+
+#ifdef HAS_PIPE
+void
+do_pipe(str, rstab, wstab)
+STR *str;
+STAB *rstab;
+STAB *wstab;
+{
+ register STIO *rstio;
+ register STIO *wstio;
+ int fd[2];
+
+ if (!rstab)
+ goto badexit;
+ if (!wstab)
+ goto badexit;
+
+ rstio = stab_io(rstab);
+ wstio = stab_io(wstab);
+
+ if (!rstio)
+ rstio = stab_io(rstab) = stio_new();
+ else if (rstio->ifp)
+ do_close(rstab,FALSE);
+ if (!wstio)
+ wstio = stab_io(wstab) = stio_new();
+ else if (wstio->ifp)
+ do_close(wstab,FALSE);
+
+ if (pipe(fd) < 0)
+ goto badexit;
+ rstio->ifp = fdopen(fd[0], "r");
+ wstio->ofp = fdopen(fd[1], "w");
+ wstio->ifp = wstio->ofp;
+ rstio->type = '<';
+ wstio->type = '>';
+ if (!rstio->ifp || !wstio->ofp) {
+ if (rstio->ifp) fclose(rstio->ifp);
+ else close(fd[0]);
+ if (wstio->ofp) fclose(wstio->ofp);
+ else close(fd[1]);
+ goto badexit;
+ }
+
+ str_sset(str,&str_yes);
+ return;
+
+badexit:
+ str_sset(str,&str_undef);
+ return;
+}
+#endif
+
+bool
+do_close(stab,explicit)
+STAB *stab;
+bool explicit;
+{
+ bool retval = FALSE;
+ register STIO *stio;
+ int status;
+
+ if (!stab)
+ stab = argvstab;
+ if (!stab)
+ return FALSE;
+ stio = stab_io(stab);
+ if (!stio) { /* never opened */
+ if (dowarn && explicit)
+ warn("Close on unopened file <%s>",stab_name(stab));
+ return FALSE;
+ }
+ if (stio->ifp) {
+ if (stio->type == '|') {
+ status = mypclose(stio->ifp);
+ retval = (status == 0);
+ statusvalue = (unsigned short)status & 0xffff;
+ }
+ else if (stio->type == '-')
+ retval = TRUE;
+ else {
+ if (stio->ofp && stio->ofp != stio->ifp) { /* a socket */
+ retval = (fclose(stio->ofp) != EOF);
+ fclose(stio->ifp); /* clear stdio, fd already closed */
+ }
+ else
+ retval = (fclose(stio->ifp) != EOF);
+ }
+ stio->ofp = stio->ifp = Nullfp;
+ }
+ if (explicit)
+ stio->lines = 0;
+ stio->type = ' ';
+ return retval;
+}
+
+bool
+do_eof(stab)
+STAB *stab;
+{
+ register STIO *stio;
+ int ch;
+
+ if (!stab) { /* eof() */
+ if (argvstab)
+ stio = stab_io(argvstab);
+ else
+ return TRUE;
+ }
+ else
+ stio = stab_io(stab);
+
+ if (!stio)
+ return TRUE;
+
+ while (stio->ifp) {
+
+#ifdef STDSTDIO /* (the code works without this) */
+ if (stio->ifp->_cnt > 0) /* cheat a little, since */
+ return FALSE; /* this is the most usual case */
+#endif
+
+ ch = getc(stio->ifp);
+ if (ch != EOF) {
+ (void)ungetc(ch, stio->ifp);
+ return FALSE;
+ }
+#ifdef STDSTDIO
+ if (stio->ifp->_cnt < -1)
+ stio->ifp->_cnt = -1;
+#endif
+ if (!stab) { /* not necessarily a real EOF yet? */
+ if (!nextargv(argvstab)) /* get another fp handy */
+ return TRUE;
+ }
+ else
+ return TRUE; /* normal fp, definitely end of file */
+ }
+ return TRUE;
+}
+
+long
+do_tell(stab)
+STAB *stab;
+{
+ register STIO *stio;
+
+ if (!stab)
+ goto phooey;
+
+ stio = stab_io(stab);
+ if (!stio || !stio->ifp)
+ goto phooey;
+
+ if (feof(stio->ifp))
+ (void)fseek (stio->ifp, 0L, 2); /* ultrix 1.2 workaround */
+
+ return ftell(stio->ifp);
+
+phooey:
+ if (dowarn)
+ warn("tell() on unopened file");
+ return -1L;
+}
+
+bool
+do_seek(stab, pos, whence)
+STAB *stab;
+long pos;
+int whence;
+{
+ register STIO *stio;
+
+ if (!stab)
+ goto nuts;
+
+ stio = stab_io(stab);
+ if (!stio || !stio->ifp)
+ goto nuts;
+
+ if (feof(stio->ifp))
+ (void)fseek (stio->ifp, 0L, 2); /* ultrix 1.2 workaround */
+
+ return fseek(stio->ifp, pos, whence) >= 0;
+
+nuts:
+ if (dowarn)
+ warn("seek() on unopened file");
+ return FALSE;
+}
+
+int
+do_ctl(optype,stab,func,argstr)
+int optype;
+STAB *stab;
+int func;
+STR *argstr;
+{
+ register STIO *stio;
+ register char *s;
+ int retval;
+
+ if (!stab || !argstr)
+ return -1;
+ stio = stab_io(stab);
+ if (!stio)
+ return -1;
+
+ if (argstr->str_pok || !argstr->str_nok) {
+ if (!argstr->str_pok)
+ s = str_get(argstr);
+
+#ifdef IOCPARM_MASK
+#ifndef IOCPARM_LEN
+#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
+#endif
+#endif
+#ifdef IOCPARM_LEN
+ retval = IOCPARM_LEN(func); /* on BSDish systes we're safe */
+#else
+ retval = 256; /* otherwise guess at what's safe */
+#endif
+ if (argstr->str_cur < retval) {
+ Str_Grow(argstr,retval+1);
+ argstr->str_cur = retval;
+ }
+
+ s = argstr->str_ptr;
+ s[argstr->str_cur] = 17; /* a little sanity check here */
+ }
+ else {
+ retval = (int)str_gnum(argstr);
+#ifdef MSDOS
+ s = (char*)(long)retval; /* ouch */
+#else
+ s = (char*)retval; /* ouch */
+#endif
+ }
+
+#ifndef lint
+ if (optype == O_IOCTL)
+ retval = ioctl(fileno(stio->ifp), func, s);
+ else
+#ifdef MSDOS
+ fatal("fcntl is not implemented");
+#else
+#ifdef HAS_FCNTL
+ retval = fcntl(fileno(stio->ifp), func, s);
+#else
+ fatal("fcntl is not implemented");
+#endif
+#endif
+#else /* lint */
+ retval = 0;
+#endif /* lint */
+
+ if (argstr->str_pok) {
+ if (s[argstr->str_cur] != 17)
+ fatal("Return value overflowed string");
+ s[argstr->str_cur] = 0; /* put our null back */
+ }
+ return retval;
+}
+
+int
+do_stat(str,arg,gimme,arglast)
+STR *str;
+register ARG *arg;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ register int sp = arglast[0] + 1;
+ int max = 13;
+
+ if ((arg[1].arg_type & A_MASK) == A_WORD) {
+ tmpstab = arg[1].arg_ptr.arg_stab;
+ if (tmpstab != defstab) {
+ laststype = O_STAT;
+ statstab = tmpstab;
+ str_set(statname,"");
+ if (!stab_io(tmpstab) || !stab_io(tmpstab)->ifp ||
+ fstat(fileno(stab_io(tmpstab)->ifp),&statcache) < 0) {
+ max = 0;
+ laststatval = -1;
+ }
+ }
+ else if (laststatval < 0)
+ max = 0;
+ }
+ else {
+ str_set(statname,str_get(ary->ary_array[sp]));
+ statstab = Nullstab;
+#ifdef HAS_LSTAT
+ laststype = arg->arg_type;
+ if (arg->arg_type == O_LSTAT)
+ laststatval = lstat(str_get(statname),&statcache);
+ else
+#endif
+ laststatval = stat(str_get(statname),&statcache);
+ if (laststatval < 0)
+ max = 0;
+ }
+
+ if (gimme != G_ARRAY) {
+ if (max)
+ str_sset(str,&str_yes);
+ else
+ str_sset(str,&str_undef);
+ STABSET(str);
+ ary->ary_array[sp] = str;
+ return sp;
+ }
+ sp--;
+ if (max) {
+#ifndef lint
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_dev)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_ino)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_mode)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_nlink)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_uid)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_gid)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_rdev)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_size)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_atime)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_mtime)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_ctime)));
+#ifdef STATBLOCKS
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_blksize)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_nmake((double)statcache.st_blocks)));
+#else
+ (void)astore(ary,++sp,
+ str_2mortal(str_make("",0)));
+ (void)astore(ary,++sp,
+ str_2mortal(str_make("",0)));
+#endif
+#else /* lint */
+ (void)astore(ary,++sp,str_nmake(0.0));
+#endif /* lint */
+ }
+ return sp;
+}
+
+#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
+ /* code courtesy of William Kucharski */
+#define HAS_CHSIZE
+
+int chsize(fd, length)
+int fd; /* file descriptor */
+off_t length; /* length to set file to */
+{
+ extern long lseek();
+ struct flock fl;
+ struct stat filebuf;
+
+ if (fstat(fd, &filebuf) < 0)
+ return -1;
+
+ if (filebuf.st_size < length) {
+
+ /* extend file length */
+
+ if ((lseek(fd, (length - 1), 0)) < 0)
+ return -1;
+
+ /* write a "0" byte */
+
+ if ((write(fd, "", 1)) != 1)
+ return -1;
+ }
+ else {
+ /* truncate length */
+
+ fl.l_whence = 0;
+ fl.l_len = 0;
+ fl.l_start = length;
+ fl.l_type = F_WRLCK; /* write lock on file space */
+
+ /*
+ * This relies on the UNDOCUMENTED F_FREESP argument to
+ * fcntl(2), which truncates the file so that it ends at the
+ * position indicated by fl.l_start.
+ *
+ * Will minor miracles never cease?
+ */
+
+ if (fcntl(fd, F_FREESP, &fl) < 0)
+ return -1;
+
+ }
+
+ return 0;
+}
+#endif /* F_FREESP */
+
+int
+do_truncate(str,arg,gimme,arglast)
+STR *str;
+register ARG *arg;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ register int sp = arglast[0] + 1;
+ off_t len = (off_t)str_gnum(ary->ary_array[sp+1]);
+ int result = 1;
+ STAB *tmpstab;
+
+#if defined(HAS_TRUNCATE) || defined(HAS_CHSIZE)
+#ifdef HAS_TRUNCATE
+ if ((arg[1].arg_type & A_MASK) == A_WORD) {
+ tmpstab = arg[1].arg_ptr.arg_stab;
+ if (!stab_io(tmpstab) ||
+ ftruncate(fileno(stab_io(tmpstab)->ifp), len) < 0)
+ result = 0;
+ }
+ else if (truncate(str_get(ary->ary_array[sp]), len) < 0)
+ result = 0;
+#else
+ if ((arg[1].arg_type & A_MASK) == A_WORD) {
+ tmpstab = arg[1].arg_ptr.arg_stab;
+ if (!stab_io(tmpstab) ||
+ chsize(fileno(stab_io(tmpstab)->ifp), len) < 0)
+ result = 0;
+ }
+ else {
+ int tmpfd;
+
+ if ((tmpfd = open(str_get(ary->ary_array[sp]), 0)) < 0)
+ result = 0;
+ else {
+ if (chsize(tmpfd, len) < 0)
+ result = 0;
+ close(tmpfd);
+ }
+ }
+#endif
+
+ if (result)
+ str_sset(str,&str_yes);
+ else
+ str_sset(str,&str_undef);
+ STABSET(str);
+ ary->ary_array[sp] = str;
+ return sp;
+#else
+ fatal("truncate not implemented");
+#endif
+}
+
+int
+looks_like_number(str)
+STR *str;
+{
+ register char *s;
+ register char *send;
+
+ if (!str->str_pok)
+ return TRUE;
+ s = str->str_ptr;
+ send = s + str->str_cur;
+ while (isspace(*s))
+ s++;
+ if (s >= send)
+ return FALSE;
+ if (*s == '+' || *s == '-')
+ s++;
+ while (isdigit(*s))
+ s++;
+ if (s == send)
+ return TRUE;
+ if (*s == '.')
+ s++;
+ else if (s == str->str_ptr)
+ return FALSE;
+ while (isdigit(*s))
+ s++;
+ if (s == send)
+ return TRUE;
+ if (*s == 'e' || *s == 'E') {
+ s++;
+ if (*s == '+' || *s == '-')
+ s++;
+ while (isdigit(*s))
+ s++;
+ }
+ while (isspace(*s))
+ s++;
+ if (s >= send)
+ return TRUE;
+ return FALSE;
+}
+
+bool
+do_print(str,fp)
+register STR *str;
+FILE *fp;
+{
+ register char *tmps;
+
+ if (!fp) {
+ if (dowarn)
+ warn("print to unopened file");
+ return FALSE;
+ }
+ if (!str)
+ return TRUE;
+ if (ofmt &&
+ ((str->str_nok && str->str_u.str_nval != 0.0)
+ || (looks_like_number(str) && str_gnum(str) != 0.0) ) ) {
+ fprintf(fp, ofmt, str->str_u.str_nval);
+ return !ferror(fp);
+ }
+ else {
+ tmps = str_get(str);
+ if (*tmps == 'S' && tmps[1] == 't' && tmps[2] == 'B' && tmps[3] == '\0'
+ && str->str_cur == sizeof(STBP) && strlen(tmps) < str->str_cur) {
+ STR *tmpstr = str_mortal(&str_undef);
+ stab_fullname(tmpstr,((STAB*)str));/* a stab value, be nice */
+ str = tmpstr;
+ tmps = str->str_ptr;
+ putc('*',fp);
+ }
+ if (str->str_cur && (fwrite(tmps,1,str->str_cur,fp) == 0 || ferror(fp)))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool
+do_aprint(arg,fp,arglast)
+register ARG *arg;
+register FILE *fp;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int retval;
+ register int items = arglast[2] - sp;
+
+ if (!fp) {
+ if (dowarn)
+ warn("print to unopened file");
+ return FALSE;
+ }
+ st += ++sp;
+ if (arg->arg_type == O_PRTF) {
+ do_sprintf(arg->arg_ptr.arg_str,items,st);
+ retval = do_print(arg->arg_ptr.arg_str,fp);
+ }
+ else {
+ retval = (items <= 0);
+ for (; items > 0; items--,st++) {
+ if (retval && ofslen) {
+ if (fwrite(ofs, 1, ofslen, fp) == 0 || ferror(fp)) {
+ retval = FALSE;
+ break;
+ }
+ }
+ if (!(retval = do_print(*st, fp)))
+ break;
+ }
+ if (retval && orslen)
+ if (fwrite(ors, 1, orslen, fp) == 0 || ferror(fp))
+ retval = FALSE;
+ }
+ return retval;
+}
+
+int
+mystat(arg,str)
+ARG *arg;
+STR *str;
+{
+ STIO *stio;
+
+ laststype = O_STAT;
+ if (arg[1].arg_type & A_DONT) {
+ stio = stab_io(arg[1].arg_ptr.arg_stab);
+ if (stio && stio->ifp) {
+ statstab = arg[1].arg_ptr.arg_stab;
+ str_set(statname,"");
+ return (laststatval = fstat(fileno(stio->ifp), &statcache));
+ }
+ else {
+ if (arg[1].arg_ptr.arg_stab == defstab)
+ return laststatval;
+ if (dowarn)
+ warn("Stat on unopened file <%s>",
+ stab_name(arg[1].arg_ptr.arg_stab));
+ statstab = Nullstab;
+ str_set(statname,"");
+ return (laststatval = -1);
+ }
+ }
+ else {
+ statstab = Nullstab;
+ str_set(statname,str_get(str));
+ return (laststatval = stat(str_get(str),&statcache));
+ }
+}
+
+int
+mylstat(arg,str)
+ARG *arg;
+STR *str;
+{
+ if (arg[1].arg_type & A_DONT) {
+ if (arg[1].arg_ptr.arg_stab == defstab) {
+ if (laststype != O_LSTAT)
+ fatal("The stat preceding -l _ wasn't an lstat");
+ return laststatval;
+ }
+ fatal("You can't use -l on a filehandle");
+ }
+
+ laststype = O_LSTAT;
+ statstab = Nullstab;
+ str_set(statname,str_get(str));
+#ifdef HAS_LSTAT
+ return (laststatval = lstat(str_get(str),&statcache));
+#else
+ return (laststatval = stat(str_get(str),&statcache));
+#endif
+}
+
+STR *
+do_fttext(arg,str)
+register ARG *arg;
+STR *str;
+{
+ int i;
+ int len;
+ int odd = 0;
+ STDCHAR tbuf[512];
+ register STDCHAR *s;
+ register STIO *stio;
+
+ if (arg[1].arg_type & A_DONT) {
+ if (arg[1].arg_ptr.arg_stab == defstab) {
+ if (statstab)
+ stio = stab_io(statstab);
+ else {
+ str = statname;
+ goto really_filename;
+ }
+ }
+ else {
+ statstab = arg[1].arg_ptr.arg_stab;
+ str_set(statname,"");
+ stio = stab_io(statstab);
+ }
+ if (stio && stio->ifp) {
+#ifdef STDSTDIO
+ fstat(fileno(stio->ifp),&statcache);
+ if (stio->ifp->_cnt <= 0) {
+ i = getc(stio->ifp);
+ if (i != EOF)
+ (void)ungetc(i,stio->ifp);
+ }
+ if (stio->ifp->_cnt <= 0) /* null file is anything */
+ return &str_yes;
+ len = stio->ifp->_cnt + (stio->ifp->_ptr - stio->ifp->_base);
+ s = stio->ifp->_base;
+#else
+ fatal("-T and -B not implemented on filehandles\n");
+#endif
+ }
+ else {
+ if (dowarn)
+ warn("Test on unopened file <%s>",
+ stab_name(arg[1].arg_ptr.arg_stab));
+ return &str_undef;
+ }
+ }
+ else {
+ statstab = Nullstab;
+ str_set(statname,str_get(str));
+ really_filename:
+ i = open(str_get(str),0);
+ if (i < 0)
+ return &str_undef;
+ fstat(i,&statcache);
+ len = read(i,tbuf,512);
+ (void)close(i);
+ if (len <= 0) /* null file is anything */
+ return &str_yes;
+ s = tbuf;
+ }
+
+ /* now scan s to look for textiness */
+
+ for (i = 0; i < len; i++,s++) {
+ if (!*s) { /* null never allowed in text */
+ odd += len;
+ break;
+ }
+ else if (*s & 128)
+ odd++;
+ else if (*s < 32 &&
+ *s != '\n' && *s != '\r' && *s != '\b' &&
+ *s != '\t' && *s != '\f' && *s != 27)
+ odd++;
+ }
+
+ if ((odd * 10 > len) == (arg->arg_type == O_FTTEXT)) /* allow 10% odd */
+ return &str_no;
+ else
+ return &str_yes;
+}
+
+bool
+do_aexec(really,arglast)
+STR *really;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int items = arglast[2] - sp;
+ register char **a;
+ char **argv;
+ char *tmps;
+
+ if (items) {
+ New(401,argv, items+1, char*);
+ a = argv;
+ for (st += ++sp; items > 0; items--,st++) {
+ if (*st)
+ *a++ = str_get(*st);
+ else
+ *a++ = "";
+ }
+ *a = Nullch;
+#ifdef TAINT
+ if (*argv[0] != '/') /* will execvp use PATH? */
+ taintenv(); /* testing IFS here is overkill, probably */
+#endif
+ if (really && *(tmps = str_get(really)))
+ execvp(tmps,argv);
+ else
+ execvp(argv[0],argv);
+ Safefree(argv);
+ }
+ return FALSE;
+}
+
+static char **Argv = Null(char **);
+static char *Cmd = Nullch;
+
+void
+do_execfree()
+{
+ if (Argv) {
+ Safefree(Argv);
+ Argv = Null(char **);
+ }
+ if (Cmd) {
+ Safefree(Cmd);
+ Cmd = Nullch;
+ }
+}
+
+bool
+do_exec(cmd)
+char *cmd;
+{
+ register char **a;
+ register char *s;
+ char flags[10];
+
+#ifdef TAINT
+ taintenv();
+ taintproper("Insecure dependency in exec");
+#endif
+
+ /* save an extra exec if possible */
+
+#ifdef CSH
+ if (strnEQ(cmd,cshname,cshlen) && strnEQ(cmd+cshlen," -c",3)) {
+ strcpy(flags,"-c");
+ s = cmd+cshlen+3;
+ if (*s == 'f') {
+ s++;
+ strcat(flags,"f");
+ }
+ if (*s == ' ')
+ s++;
+ if (*s++ == '\'') {
+ char *ncmd = s;
+
+ while (*s)
+ s++;
+ if (s[-1] == '\n')
+ *--s = '\0';
+ if (s[-1] == '\'') {
+ *--s = '\0';
+ execl(cshname,"csh", flags,ncmd,(char*)0);
+ *s = '\'';
+ return FALSE;
+ }
+ }
+ }
+#endif /* CSH */
+
+ /* see if there are shell metacharacters in it */
+
+ for (s = cmd; *s && isalpha(*s); s++) ; /* catch VAR=val gizmo */
+ if (*s == '=')
+ goto doshell;
+ for (s = cmd; *s; s++) {
+ if (*s != ' ' && !isalpha(*s) && index("$&*(){}[]'\";\\|?<>~`\n",*s)) {
+ if (*s == '\n' && !s[1]) {
+ *s = '\0';
+ break;
+ }
+ doshell:
+ execl("/bin/sh","sh","-c",cmd,(char*)0);
+ return FALSE;
+ }
+ }
+ New(402,Argv, (s - cmd) / 2 + 2, char*);
+ Cmd = nsavestr(cmd, s-cmd);
+ a = Argv;
+ for (s = Cmd; *s;) {
+ while (*s && isspace(*s)) s++;
+ if (*s)
+ *(a++) = s;
+ while (*s && !isspace(*s)) s++;
+ if (*s)
+ *s++ = '\0';
+ }
+ *a = Nullch;
+ if (Argv[0]) {
+ execvp(Argv[0],Argv);
+ if (errno == ENOEXEC) { /* for system V NIH syndrome */
+ do_execfree();
+ goto doshell;
+ }
+ }
+ do_execfree();
+ return FALSE;
+}
+
+#ifdef HAS_SOCKET
+int
+do_socket(stab, arglast)
+STAB *stab;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register STIO *stio;
+ int domain, type, protocol, fd;
+
+ if (!stab)
+ return FALSE;
+
+ stio = stab_io(stab);
+ if (!stio)
+ stio = stab_io(stab) = stio_new();
+ else if (stio->ifp)
+ do_close(stab,FALSE);
+
+ domain = (int)str_gnum(st[++sp]);
+ type = (int)str_gnum(st[++sp]);
+ protocol = (int)str_gnum(st[++sp]);
+#ifdef TAINT
+ taintproper("Insecure dependency in socket");
+#endif
+ fd = socket(domain,type,protocol);
+ if (fd < 0)
+ return FALSE;
+ stio->ifp = fdopen(fd, "r"); /* stdio gets confused about sockets */
+ stio->ofp = fdopen(fd, "w");
+ stio->type = 's';
+ if (!stio->ifp || !stio->ofp) {
+ if (stio->ifp) fclose(stio->ifp);
+ if (stio->ofp) fclose(stio->ofp);
+ if (!stio->ifp && !stio->ofp) close(fd);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+int
+do_bind(stab, arglast)
+STAB *stab;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register STIO *stio;
+ char *addr;
+
+ if (!stab)
+ goto nuts;
+
+ stio = stab_io(stab);
+ if (!stio || !stio->ifp)
+ goto nuts;
+
+ addr = str_get(st[++sp]);
+#ifdef TAINT
+ taintproper("Insecure dependency in bind");
+#endif
+ return bind(fileno(stio->ifp), (void *) addr, st[sp]->str_cur) >= 0;
+
+nuts:
+ if (dowarn)
+ warn("bind() on closed fd");
+ return FALSE;
+
+}
+
+int
+do_connect(stab, arglast)
+STAB *stab;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register STIO *stio;
+ char *addr;
+
+ if (!stab)
+ goto nuts;
+
+ stio = stab_io(stab);
+ if (!stio || !stio->ifp)
+ goto nuts;
+
+ addr = str_get(st[++sp]);
+#ifdef TAINT
+ taintproper("Insecure dependency in connect");
+#endif
+ return connect(fileno(stio->ifp), (void *) addr, st[sp]->str_cur) >= 0;
+
+nuts:
+ if (dowarn)
+ warn("connect() on closed fd");
+ return FALSE;
+
+}
+
+int
+do_listen(stab, arglast)
+STAB *stab;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register STIO *stio;
+ int backlog;
+
+ if (!stab)
+ goto nuts;
+
+ stio = stab_io(stab);
+ if (!stio || !stio->ifp)
+ goto nuts;
+
+ backlog = (int)str_gnum(st[++sp]);
+ return listen(fileno(stio->ifp), backlog) >= 0;
+
+nuts:
+ if (dowarn)
+ warn("listen() on closed fd");
+ return FALSE;
+}
+
+void
+do_accept(str, nstab, gstab)
+STR *str;
+STAB *nstab;
+STAB *gstab;
+{
+ register STIO *nstio;
+ register STIO *gstio;
+ int len = sizeof buf;
+ int fd;
+
+ if (!nstab)
+ goto badexit;
+ if (!gstab)
+ goto nuts;
+
+ gstio = stab_io(gstab);
+ nstio = stab_io(nstab);
+
+ if (!gstio || !gstio->ifp)
+ goto nuts;
+ if (!nstio)
+ nstio = stab_io(nstab) = stio_new();
+ else if (nstio->ifp)
+ do_close(nstab,FALSE);
+
+ fd = accept(fileno(gstio->ifp),(void *)buf,&len);
+ if (fd < 0)
+ goto badexit;
+ nstio->ifp = fdopen(fd, "r");
+ nstio->ofp = fdopen(fd, "w");
+ nstio->type = 's';
+ if (!nstio->ifp || !nstio->ofp) {
+ if (nstio->ifp) fclose(nstio->ifp);
+ if (nstio->ofp) fclose(nstio->ofp);
+ if (!nstio->ifp && !nstio->ofp) close(fd);
+ goto badexit;
+ }
+
+ str_nset(str, buf, len);
+ return;
+
+nuts:
+ if (dowarn)
+ warn("accept() on closed fd");
+badexit:
+ str_sset(str,&str_undef);
+ return;
+}
+
+int
+do_shutdown(stab, arglast)
+STAB *stab;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register STIO *stio;
+ int how;
+
+ if (!stab)
+ goto nuts;
+
+ stio = stab_io(stab);
+ if (!stio || !stio->ifp)
+ goto nuts;
+
+ how = (int)str_gnum(st[++sp]);
+ return shutdown(fileno(stio->ifp), how) >= 0;
+
+nuts:
+ if (dowarn)
+ warn("shutdown() on closed fd");
+ return FALSE;
+
+}
+
+int
+do_sopt(optype, stab, arglast)
+int optype;
+STAB *stab;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register STIO *stio;
+ int fd;
+ int lvl;
+ int optname;
+
+ if (!stab)
+ goto nuts;
+
+ stio = stab_io(stab);
+ if (!stio || !stio->ifp)
+ goto nuts;
+
+ fd = fileno(stio->ifp);
+ lvl = (int)str_gnum(st[sp+1]);
+ optname = (int)str_gnum(st[sp+2]);
+ switch (optype) {
+ case O_GSOCKOPT:
+ st[sp] = str_2mortal(str_new(257));
+ st[sp]->str_cur = 256;
+ st[sp]->str_pok = 1;
+ if (getsockopt(fd, lvl, optname, st[sp]->str_ptr, &st[sp]->str_cur) < 0)
+ goto nuts;
+ break;
+ case O_SSOCKOPT:
+ st[sp] = st[sp+3];
+ if (setsockopt(fd, lvl, optname, st[sp]->str_ptr, st[sp]->str_cur) < 0)
+ goto nuts;
+ st[sp] = &str_yes;
+ break;
+ }
+
+ return sp;
+
+nuts:
+ if (dowarn)
+ warn("[gs]etsockopt() on closed fd");
+ st[sp] = &str_undef;
+ return sp;
+
+}
+
+int
+do_getsockname(optype, stab, arglast)
+int optype;
+STAB *stab;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register STIO *stio;
+ int fd;
+
+ if (!stab)
+ goto nuts;
+
+ stio = stab_io(stab);
+ if (!stio || !stio->ifp)
+ goto nuts;
+
+ st[sp] = str_2mortal(str_new(257));
+ st[sp]->str_cur = 256;
+ st[sp]->str_pok = 1;
+ fd = fileno(stio->ifp);
+ switch (optype) {
+ case O_GETSOCKNAME:
+ if (getsockname(fd, (void *) st[sp]->str_ptr, &st[sp]->str_cur) < 0)
+ goto nuts2;
+ break;
+ case O_GETPEERNAME:
+ if (getpeername(fd, (void *) st[sp]->str_ptr, &st[sp]->str_cur) < 0)
+ goto nuts2;
+ break;
+ }
+
+ return sp;
+
+nuts:
+ if (dowarn)
+ warn("get{sock,peer}name() on closed fd");
+nuts2:
+ st[sp] = &str_undef;
+ return sp;
+
+}
+
+int
+do_ghent(which,gimme,arglast)
+int which;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ register int sp = arglast[0];
+ register char **elem;
+ register STR *str;
+ struct hostent *gethostbyname();
+ struct hostent *gethostbyaddr();
+#ifdef HAS_GETHOSTENT
+ struct hostent *gethostent();
+#endif
+ struct hostent *hent;
+ unsigned long len;
+
+ if (gimme != G_ARRAY) {
+ astore(ary, ++sp, str_mortal(&str_undef));
+ return sp;
+ }
+
+ if (which == O_GHBYNAME) {
+ char *name = str_get(ary->ary_array[sp+1]);
+
+ hent = gethostbyname(name);
+ }
+ else if (which == O_GHBYADDR) {
+ STR *addrstr = ary->ary_array[sp+1];
+ int addrtype = (int)str_gnum(ary->ary_array[sp+2]);
+ char *addr = str_get(addrstr);
+
+ hent = gethostbyaddr(addr,addrstr->str_cur,addrtype);
+ }
+ else
+#ifdef HAS_GETHOSTENT
+ hent = gethostent();
+#else
+ fatal("gethostent not implemented");
+#endif
+ if (hent) {
+#ifndef lint
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, hent->h_name);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ for (elem = hent->h_aliases; *elem; elem++) {
+ str_cat(str, *elem);
+ if (elem[1])
+ str_ncat(str," ",1);
+ }
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str, (double)hent->h_addrtype);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ len = hent->h_length;
+ str_numset(str, (double)len);
+#ifdef h_addr
+ for (elem = hent->h_addr_list; *elem; elem++) {
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_nset(str, *elem, len);
+ }
+#else
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_nset(str, hent->h_addr, len);
+#endif /* h_addr */
+#else /* lint */
+ elem = Nullch;
+ elem = elem;
+ (void)astore(ary, ++sp, str_mortal(&str_no));
+#endif /* lint */
+ }
+
+ return sp;
+}
+
+int
+do_gnent(which,gimme,arglast)
+int which;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ register int sp = arglast[0];
+ register char **elem;
+ register STR *str;
+ struct netent *getnetbyname();
+ struct netent *getnetbyaddr();
+ struct netent *getnetent();
+ struct netent *nent;
+
+ if (gimme != G_ARRAY) {
+ astore(ary, ++sp, str_mortal(&str_undef));
+ return sp;
+ }
+
+ if (which == O_GNBYNAME) {
+ char *name = str_get(ary->ary_array[sp+1]);
+
+ nent = getnetbyname(name);
+ }
+ else if (which == O_GNBYADDR) {
+ unsigned long addr = U_L(str_gnum(ary->ary_array[sp+1]));
+ int addrtype = (int)str_gnum(ary->ary_array[sp+2]);
+
+ nent = getnetbyaddr((long)addr,addrtype);
+ }
+ else
+ nent = getnetent();
+
+ if (nent) {
+#ifndef lint
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, nent->n_name);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ for (elem = nent->n_aliases; *elem; elem++) {
+ str_cat(str, *elem);
+ if (elem[1])
+ str_ncat(str," ",1);
+ }
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str, (double)nent->n_addrtype);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str, (double)nent->n_net);
+#else /* lint */
+ elem = Nullch;
+ elem = elem;
+ (void)astore(ary, ++sp, str_mortal(&str_no));
+#endif /* lint */
+ }
+
+ return sp;
+}
+
+int
+do_gpent(which,gimme,arglast)
+int which;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ register int sp = arglast[0];
+ register char **elem;
+ register STR *str;
+ struct protoent *getprotobyname();
+ struct protoent *getprotobynumber();
+ struct protoent *getprotoent();
+ struct protoent *pent;
+
+ if (gimme != G_ARRAY) {
+ astore(ary, ++sp, str_mortal(&str_undef));
+ return sp;
+ }
+
+ if (which == O_GPBYNAME) {
+ char *name = str_get(ary->ary_array[sp+1]);
+
+ pent = getprotobyname(name);
+ }
+ else if (which == O_GPBYNUMBER) {
+ int proto = (int)str_gnum(ary->ary_array[sp+1]);
+
+ pent = getprotobynumber(proto);
+ }
+ else
+ pent = getprotoent();
+
+ if (pent) {
+#ifndef lint
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, pent->p_name);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ for (elem = pent->p_aliases; *elem; elem++) {
+ str_cat(str, *elem);
+ if (elem[1])
+ str_ncat(str," ",1);
+ }
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str, (double)pent->p_proto);
+#else /* lint */
+ elem = Nullch;
+ elem = elem;
+ (void)astore(ary, ++sp, str_mortal(&str_no));
+#endif /* lint */
+ }
+
+ return sp;
+}
+
+int
+do_gsent(which,gimme,arglast)
+int which;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ register int sp = arglast[0];
+ register char **elem;
+ register STR *str;
+ struct servent *getservbyname();
+ struct servent *getservbynumber();
+ struct servent *getservent();
+ struct servent *sent;
+
+ if (gimme != G_ARRAY) {
+ astore(ary, ++sp, str_mortal(&str_undef));
+ return sp;
+ }
+
+ if (which == O_GSBYNAME) {
+ char *name = str_get(ary->ary_array[sp+1]);
+ char *proto = str_get(ary->ary_array[sp+2]);
+
+ if (proto && !*proto)
+ proto = Nullch;
+
+ sent = getservbyname(name,proto);
+ }
+ else if (which == O_GSBYPORT) {
+ int port = (int)str_gnum(ary->ary_array[sp+1]);
+ char *proto = str_get(ary->ary_array[sp+2]);
+
+ sent = getservbyport(port,proto);
+ }
+ else
+ sent = getservent();
+ if (sent) {
+#ifndef lint
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, sent->s_name);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ for (elem = sent->s_aliases; *elem; elem++) {
+ str_cat(str, *elem);
+ if (elem[1])
+ str_ncat(str," ",1);
+ }
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+#ifdef HAS_NTOHS
+ str_numset(str, (double)ntohs(sent->s_port));
+#else
+ str_numset(str, (double)(sent->s_port));
+#endif
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, sent->s_proto);
+#else /* lint */
+ elem = Nullch;
+ elem = elem;
+ (void)astore(ary, ++sp, str_mortal(&str_no));
+#endif /* lint */
+ }
+
+ return sp;
+}
+
+#endif /* HAS_SOCKET */
+
+#ifdef HAS_SELECT
+int
+do_select(gimme,arglast)
+int gimme;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ register int i;
+ register int j;
+ register char *s;
+ register STR *str;
+ double value;
+ int maxlen = 0;
+ int nfound;
+ struct timeval timebuf;
+ struct timeval *tbuf = &timebuf;
+ int growsize;
+#if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
+ int masksize;
+ int offset;
+ char *fd_sets[4];
+ int k;
+
+#if BYTEORDER & 0xf0000
+#define ORDERBYTE (0x88888888 - BYTEORDER)
+#else
+#define ORDERBYTE (0x4444 - BYTEORDER)
+#endif
+
+#endif
+
+ for (i = 1; i <= 3; i++) {
+ j = st[sp+i]->str_cur;
+ if (maxlen < j)
+ maxlen = j;
+ }
+
+#if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
+ growsize = maxlen; /* little endians can use vecs directly */
+#else
+#ifdef NFDBITS
+
+#ifndef NBBY
+#define NBBY 8
+#endif
+
+ masksize = NFDBITS / NBBY;
+#else
+ masksize = sizeof(long); /* documented int, everyone seems to use long */
+#endif
+ growsize = maxlen + (masksize - (maxlen % masksize));
+ Zero(&fd_sets[0], 4, char*);
+#endif
+
+ for (i = 1; i <= 3; i++) {
+ str = st[sp+i];
+ j = str->str_len;
+ if (j < growsize) {
+ if (str->str_pok) {
+ Str_Grow(str,growsize);
+ s = str_get(str) + j;
+ while (++j <= growsize) {
+ *s++ = '\0';
+ }
+ }
+ else if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_ptr = Nullch;
+ }
+ }
+#if BYTEORDER != 0x1234 && BYTEORDER != 0x12345678
+ s = str->str_ptr;
+ if (s) {
+ New(403, fd_sets[i], growsize, char);
+ for (offset = 0; offset < growsize; offset += masksize) {
+ for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
+ fd_sets[i][j+offset] = s[(k % masksize) + offset];
+ }
+ }
+#endif
+ }
+ str = st[sp+4];
+ if (str->str_nok || str->str_pok) {
+ value = str_gnum(str);
+ if (value < 0.0)
+ value = 0.0;
+ timebuf.tv_sec = (long)value;
+ value -= (double)timebuf.tv_sec;
+ timebuf.tv_usec = (long)(value * 1000000.0);
+ }
+ else
+ tbuf = Null(struct timeval*);
+
+#if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
+ nfound = select(
+ maxlen * 8,
+ st[sp+1]->str_ptr,
+ st[sp+2]->str_ptr,
+ st[sp+3]->str_ptr,
+ tbuf);
+#else
+ nfound = select(
+ maxlen * 8,
+ (void *)fd_sets[1],
+ (void *)fd_sets[2],
+ (void *)fd_sets[3],
+ tbuf);
+ for (i = 1; i <= 3; i++) {
+ if (fd_sets[i]) {
+ str = st[sp+i];
+ s = str->str_ptr;
+ for (offset = 0; offset < growsize; offset += masksize) {
+ for (j = 0, k=ORDERBYTE; j < masksize; j++, (k >>= 4))
+ s[(k % masksize) + offset] = fd_sets[i][j+offset];
+ }
+ }
+ }
+#endif
+
+ st[++sp] = str_mortal(&str_no);
+ str_numset(st[sp], (double)nfound);
+ if (gimme == G_ARRAY && tbuf) {
+ value = (double)(timebuf.tv_sec) +
+ (double)(timebuf.tv_usec) / 1000000.0;
+ st[++sp] = str_mortal(&str_no);
+ str_numset(st[sp], value);
+ }
+ return sp;
+}
+#endif /* SELECT */
+
+#ifdef HAS_SOCKET
+int
+do_spair(stab1, stab2, arglast)
+STAB *stab1;
+STAB *stab2;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[2];
+ register STIO *stio1;
+ register STIO *stio2;
+ int domain, type, protocol, fd[2];
+
+ if (!stab1 || !stab2)
+ return FALSE;
+
+ stio1 = stab_io(stab1);
+ stio2 = stab_io(stab2);
+ if (!stio1)
+ stio1 = stab_io(stab1) = stio_new();
+ else if (stio1->ifp)
+ do_close(stab1,FALSE);
+ if (!stio2)
+ stio2 = stab_io(stab2) = stio_new();
+ else if (stio2->ifp)
+ do_close(stab2,FALSE);
+
+ domain = (int)str_gnum(st[++sp]);
+ type = (int)str_gnum(st[++sp]);
+ protocol = (int)str_gnum(st[++sp]);
+#ifdef TAINT
+ taintproper("Insecure dependency in socketpair");
+#endif
+#ifdef HAS_SOCKETPAIR
+ if (socketpair(domain,type,protocol,fd) < 0)
+ return FALSE;
+#else
+ fatal("Socketpair unimplemented");
+#endif
+ stio1->ifp = fdopen(fd[0], "r");
+ stio1->ofp = fdopen(fd[0], "w");
+ stio1->type = 's';
+ stio2->ifp = fdopen(fd[1], "r");
+ stio2->ofp = fdopen(fd[1], "w");
+ stio2->type = 's';
+ if (!stio1->ifp || !stio1->ofp || !stio2->ifp || !stio2->ofp) {
+ if (stio1->ifp) fclose(stio1->ifp);
+ if (stio1->ofp) fclose(stio1->ofp);
+ if (!stio1->ifp && !stio1->ofp) close(fd[0]);
+ if (stio2->ifp) fclose(stio2->ifp);
+ if (stio2->ofp) fclose(stio2->ofp);
+ if (!stio2->ifp && !stio2->ofp) close(fd[1]);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+#endif /* HAS_SOCKET */
+
+int
+do_gpwent(which,gimme,arglast)
+int which;
+int gimme;
+int *arglast;
+{
+#ifdef I_PWD
+ register ARRAY *ary = stack;
+ register int sp = arglast[0];
+ register STR *str;
+ struct passwd *getpwnam();
+ struct passwd *getpwuid();
+ struct passwd *getpwent();
+ struct passwd *pwent;
+
+ if (gimme != G_ARRAY) {
+ astore(ary, ++sp, str_mortal(&str_undef));
+ return sp;
+ }
+
+ if (which == O_GPWNAM) {
+ char *name = str_get(ary->ary_array[sp+1]);
+
+ pwent = getpwnam(name);
+ }
+ else if (which == O_GPWUID) {
+ int uid = (int)str_gnum(ary->ary_array[sp+1]);
+
+ pwent = getpwuid(uid);
+ }
+ else
+ pwent = getpwent();
+
+ if (pwent) {
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, pwent->pw_name);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, pwent->pw_passwd);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str, (double)pwent->pw_uid);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str, (double)pwent->pw_gid);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+#ifdef PWCHANGE
+ str_numset(str, (double)pwent->pw_change);
+#else
+#ifdef PWQUOTA
+ str_numset(str, (double)pwent->pw_quota);
+#else
+#ifdef PWAGE
+ str_set(str, pwent->pw_age);
+#endif
+#endif
+#endif
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+#ifdef PWCLASS
+ str_set(str,pwent->pw_class);
+#else
+#ifdef PWCOMMENT
+ str_set(str, pwent->pw_comment);
+#endif
+#endif
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, pwent->pw_gecos);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, pwent->pw_dir);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, pwent->pw_shell);
+#ifdef PWEXPIRE
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str, (double)pwent->pw_expire);
+#endif
+ }
+
+ return sp;
+#else
+ fatal("password routines not implemented");
+#endif
+}
+
+int
+do_ggrent(which,gimme,arglast)
+int which;
+int gimme;
+int *arglast;
+{
+#ifdef I_GRP
+ register ARRAY *ary = stack;
+ register int sp = arglast[0];
+ register char **elem;
+ register STR *str;
+ struct group *getgrnam();
+ struct group *getgrgid();
+ struct group *getgrent();
+ struct group *grent;
+
+ if (gimme != G_ARRAY) {
+ astore(ary, ++sp, str_mortal(&str_undef));
+ return sp;
+ }
+
+ if (which == O_GGRNAM) {
+ char *name = str_get(ary->ary_array[sp+1]);
+
+ grent = getgrnam(name);
+ }
+ else if (which == O_GGRGID) {
+ int gid = (int)str_gnum(ary->ary_array[sp+1]);
+
+ grent = getgrgid(gid);
+ }
+ else
+ grent = getgrent();
+
+ if (grent) {
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, grent->gr_name);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_set(str, grent->gr_passwd);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str, (double)grent->gr_gid);
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ for (elem = grent->gr_mem; *elem; elem++) {
+ str_cat(str, *elem);
+ if (elem[1])
+ str_ncat(str," ",1);
+ }
+ }
+
+ return sp;
+#else
+ fatal("group routines not implemented");
+#endif
+}
+
+int
+do_dirop(optype,stab,gimme,arglast)
+int optype;
+STAB *stab;
+int gimme;
+int *arglast;
+{
+#if defined(DIRENT) && defined(HAS_READDIR)
+ register ARRAY *ary = stack;
+ register STR **st = ary->ary_array;
+ register int sp = arglast[1];
+ register STIO *stio;
+ long along;
+#ifndef telldir
+ long telldir();
+#endif
+ struct DIRENT *readdir();
+ register struct DIRENT *dp;
+
+ if (!stab)
+ goto nope;
+ if (!(stio = stab_io(stab)))
+ stio = stab_io(stab) = stio_new();
+ if (!stio->dirp && optype != O_OPENDIR)
+ goto nope;
+ st[sp] = &str_yes;
+ switch (optype) {
+ case O_OPENDIR:
+ if (stio->dirp)
+ closedir(stio->dirp);
+ if (!(stio->dirp = opendir(str_get(st[sp+1]))))
+ goto nope;
+ break;
+ case O_READDIR:
+ if (gimme == G_ARRAY) {
+ --sp;
+ while (dp = readdir(stio->dirp)) {
+#ifdef DIRNAMLEN
+ (void)astore(ary,++sp,
+ str_2mortal(str_make(dp->d_name,dp->d_namlen)));
+#else
+ (void)astore(ary,++sp,
+ str_2mortal(str_make(dp->d_name,0)));
+#endif
+ }
+ }
+ else {
+ if (!(dp = readdir(stio->dirp)))
+ goto nope;
+ st[sp] = str_mortal(&str_undef);
+#ifdef DIRNAMLEN
+ str_nset(st[sp], dp->d_name, dp->d_namlen);
+#else
+ str_set(st[sp], dp->d_name);
+#endif
+ }
+ break;
+#if MACH
+ case O_TELLDIR:
+ case O_SEEKDIR:
+ goto nope;
+#else
+ case O_TELLDIR:
+ st[sp] = str_mortal(&str_undef);
+ str_numset(st[sp], (double)telldir(stio->dirp));
+ break;
+ case O_SEEKDIR:
+ st[sp] = str_mortal(&str_undef);
+ along = (long)str_gnum(st[sp+1]);
+ (void)seekdir(stio->dirp,along);
+ break;
+#endif
+ case O_REWINDDIR:
+ st[sp] = str_mortal(&str_undef);
+ (void)rewinddir(stio->dirp);
+ break;
+ case O_CLOSEDIR:
+ st[sp] = str_mortal(&str_undef);
+ (void)closedir(stio->dirp);
+ stio->dirp = 0;
+ break;
+ }
+ return sp;
+
+nope:
+ st[sp] = &str_undef;
+ return sp;
+
+#else
+ fatal("Unimplemented directory operation");
+#endif
+}
+
+apply(type,arglast)
+int type;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int items = arglast[2] - sp;
+ register int val;
+ register int val2;
+ register int tot = 0;
+ char *s;
+
+#ifdef TAINT
+ for (st += ++sp; items--; st++)
+ tainted |= (*st)->str_tainted;
+ st = stack->ary_array;
+ sp = arglast[1];
+ items = arglast[2] - sp;
+#endif
+ switch (type) {
+ case O_CHMOD:
+#ifdef TAINT
+ taintproper("Insecure dependency in chmod");
+#endif
+ if (--items > 0) {
+ tot = items;
+ val = (int)str_gnum(st[++sp]);
+ while (items--) {
+ if (chmod(str_get(st[++sp]),val))
+ tot--;
+ }
+ }
+ break;
+#ifdef HAS_CHOWN
+ case O_CHOWN:
+#ifdef TAINT
+ taintproper("Insecure dependency in chown");
+#endif
+ if (items > 2) {
+ items -= 2;
+ tot = items;
+ val = (int)str_gnum(st[++sp]);
+ val2 = (int)str_gnum(st[++sp]);
+ while (items--) {
+ if (chown(str_get(st[++sp]),val,val2))
+ tot--;
+ }
+ }
+ break;
+#endif
+#ifdef HAS_KILL
+ case O_KILL:
+#ifdef TAINT
+ taintproper("Insecure dependency in kill");
+#endif
+ if (--items > 0) {
+ tot = items;
+ s = str_get(st[++sp]);
+ if (isupper(*s)) {
+ if (*s == 'S' && s[1] == 'I' && s[2] == 'G')
+ s += 3;
+ if (!(val = whichsig(s)))
+ fatal("Unrecognized signal name \"%s\"",s);
+ }
+ else
+ val = (int)str_gnum(st[sp]);
+ if (val < 0) {
+ val = -val;
+ while (items--) {
+ int proc = (int)str_gnum(st[++sp]);
+#ifdef HAS_KILLPG
+ if (killpg(proc,val)) /* BSD */
+#else
+ if (kill(-proc,val)) /* SYSV */
+#endif
+ tot--;
+ }
+ }
+ else {
+ while (items--) {
+ if (kill((int)(str_gnum(st[++sp])),val))
+ tot--;
+ }
+ }
+ }
+ break;
+#endif
+ case O_UNLINK:
+#ifdef TAINT
+ taintproper("Insecure dependency in unlink");
+#endif
+ tot = items;
+ while (items--) {
+ s = str_get(st[++sp]);
+ if (euid || unsafe) {
+ if (UNLINK(s))
+ tot--;
+ }
+ else { /* don't let root wipe out directories without -U */
+#ifdef HAS_LSTAT
+ if (lstat(s,&statbuf) < 0 || S_ISDIR(statbuf.st_mode))
+#else
+ if (stat(s,&statbuf) < 0 || S_ISDIR(statbuf.st_mode))
+#endif
+ tot--;
+ else {
+ if (UNLINK(s))
+ tot--;
+ }
+ }
+ }
+ break;
+ case O_UTIME:
+#ifdef TAINT
+ taintproper("Insecure dependency in utime");
+#endif
+ if (items > 2) {
+#ifdef I_UTIME
+ struct utimbuf utbuf;
+#else
+ struct {
+ long actime;
+ long modtime;
+ } utbuf;
+#endif
+
+ Zero(&utbuf, sizeof utbuf, char);
+ utbuf.actime = (long)str_gnum(st[++sp]); /* time accessed */
+ utbuf.modtime = (long)str_gnum(st[++sp]); /* time modified */
+ items -= 2;
+#ifndef lint
+ tot = items;
+ while (items--) {
+ if (utime(str_get(st[++sp]),&utbuf))
+ tot--;
+ }
+#endif
+ }
+ else
+ items = 0;
+ break;
+ }
+ return tot;
+}
+
+/* Do the permissions allow some operation? Assumes statcache already set. */
+
+int
+cando(bit, effective, statbufp)
+int bit;
+int effective;
+register struct stat *statbufp;
+{
+#ifdef MSDOS
+ /* [Comments and code from Len Reed]
+ * MS-DOS "user" is similar to UNIX's "superuser," but can't write
+ * to write-protected files. The execute permission bit is set
+ * by the Miscrosoft C library stat() function for the following:
+ * .exe files
+ * .com files
+ * .bat files
+ * directories
+ * All files and directories are readable.
+ * Directories and special files, e.g. "CON", cannot be
+ * write-protected.
+ * [Comment by Tom Dinger -- a directory can have the write-protect
+ * bit set in the file system, but DOS permits changes to
+ * the directory anyway. In addition, all bets are off
+ * here for networked software, such as Novell and
+ * Sun's PC-NFS.]
+ */
+
+ return (bit & statbufp->st_mode) ? TRUE : FALSE;
+
+#else /* ! MSDOS */
+ if ((effective ? euid : uid) == 0) { /* root is special */
+ if (bit == S_IXUSR) {
+ if (statbufp->st_mode & 0111 || S_ISDIR(statbufp->st_mode))
+ return TRUE;
+ }
+ else
+ return TRUE; /* root reads and writes anything */
+ return FALSE;
+ }
+ if (statbufp->st_uid == (effective ? euid : uid) ) {
+ if (statbufp->st_mode & bit)
+ return TRUE; /* ok as "user" */
+ }
+ else if (ingroup((int)statbufp->st_gid,effective)) {
+ if (statbufp->st_mode & bit >> 3)
+ return TRUE; /* ok as "group" */
+ }
+ else if (statbufp->st_mode & bit >> 6)
+ return TRUE; /* ok as "other" */
+ return FALSE;
+#endif /* ! MSDOS */
+}
+
+int
+ingroup(testgid,effective)
+int testgid;
+int effective;
+{
+ if (testgid == (effective ? egid : gid))
+ return TRUE;
+#ifdef HAS_GETGROUPS
+#ifndef NGROUPS
+#define NGROUPS 32
+#endif
+ {
+ GROUPSTYPE gary[NGROUPS];
+ int anum;
+
+ anum = getgroups(NGROUPS,gary);
+ while (--anum >= 0)
+ if (gary[anum] == testgid)
+ return TRUE;
+ }
+#endif
+ return FALSE;
+}
+
+#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
+
+int
+do_ipcget(optype, arglast)
+int optype;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ key_t key;
+ int n, flags;
+
+ key = (key_t)str_gnum(st[++sp]);
+ n = (optype == O_MSGGET) ? 0 : (int)str_gnum(st[++sp]);
+ flags = (int)str_gnum(st[++sp]);
+ errno = 0;
+ switch (optype)
+ {
+#ifdef HAS_MSG
+ case O_MSGGET:
+ return msgget(key, flags);
+#endif
+#ifdef HAS_SEM
+ case O_SEMGET:
+ return semget(key, n, flags);
+#endif
+#ifdef HAS_SHM
+ case O_SHMGET:
+ return shmget(key, n, flags);
+#endif
+#if !defined(HAS_MSG) || !defined(HAS_SEM) || !defined(HAS_SHM)
+ default:
+ fatal("%s not implemented", opname[optype]);
+#endif
+ }
+ return -1; /* should never happen */
+}
+
+int
+do_ipcctl(optype, arglast)
+int optype;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ STR *astr;
+ char *a;
+ int id, n, cmd, infosize, getinfo, ret;
+
+ id = (int)str_gnum(st[++sp]);
+ n = (optype == O_SEMCTL) ? (int)str_gnum(st[++sp]) : 0;
+ cmd = (int)str_gnum(st[++sp]);
+ astr = st[++sp];
+
+ infosize = 0;
+ getinfo = (cmd == IPC_STAT);
+
+ switch (optype)
+ {
+#ifdef HAS_MSG
+ case O_MSGCTL:
+ if (cmd == IPC_STAT || cmd == IPC_SET)
+ infosize = sizeof(struct msqid_ds);
+ break;
+#endif
+#ifdef HAS_SHM
+ case O_SHMCTL:
+ if (cmd == IPC_STAT || cmd == IPC_SET)
+ infosize = sizeof(struct shmid_ds);
+ break;
+#endif
+#ifdef HAS_SEM
+ case O_SEMCTL:
+ if (cmd == IPC_STAT || cmd == IPC_SET)
+ infosize = sizeof(struct semid_ds);
+ else if (cmd == GETALL || cmd == SETALL)
+ {
+ struct semid_ds semds;
+ if (semctl(id, 0, IPC_STAT, &semds) == -1)
+ return -1;
+ getinfo = (cmd == GETALL);
+#ifdef _POSIX_SOURCE
+ typedef ushort ushort_t;
+ infosize = semds.sem_nsems * sizeof(ushort_t);
+#else
+ infosize = semds.sem_nsems * sizeof(ushort);
+#endif
+ }
+ break;
+#endif
+#if !defined(HAS_MSG) || !defined(HAS_SEM) || !defined(HAS_SHM)
+ default:
+ fatal("%s not implemented", opname[optype]);
+#endif
+ }
+
+ if (infosize)
+ {
+ if (getinfo)
+ {
+ STR_GROW(astr, infosize+1);
+ a = str_get(astr);
+ }
+ else
+ {
+ a = str_get(astr);
+ if (astr->str_cur != infosize)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ }
+ }
+ else
+ {
+ int i = (int)str_gnum(astr);
+ a = (char *)i; /* ouch */
+ }
+ errno = 0;
+ switch (optype)
+ {
+#ifdef HAS_MSG
+ case O_MSGCTL:
+ ret = msgctl(id, cmd, a);
+ break;
+#endif
+#ifdef HAS_SEM
+ case O_SEMCTL:
+ ret = semctl(id, n, cmd, a);
+ break;
+#endif
+#ifdef HAS_SHM
+ case O_SHMCTL:
+ ret = shmctl(id, cmd, a);
+ break;
+#endif
+ }
+ if (getinfo && ret >= 0) {
+ astr->str_cur = infosize;
+ astr->str_ptr[infosize] = '\0';
+ }
+ return ret;
+}
+
+int
+do_msgsnd(arglast)
+int *arglast;
+{
+#ifdef HAS_MSG
+ register STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ STR *mstr;
+ char *mbuf;
+ int id, msize, flags;
+
+ id = (int)str_gnum(st[++sp]);
+ mstr = st[++sp];
+ flags = (int)str_gnum(st[++sp]);
+ mbuf = str_get(mstr);
+ if ((msize = mstr->str_cur - sizeof(long)) < 0) {
+ errno = EINVAL;
+ return -1;
+ }
+ errno = 0;
+ return msgsnd(id, mbuf, msize, flags);
+#else
+ fatal("msgsnd not implemented");
+#endif
+}
+
+int
+do_msgrcv(arglast)
+int *arglast;
+{
+#ifdef HAS_MSG
+ register STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ STR *mstr;
+ char *mbuf;
+ long mtype;
+ int id, msize, flags, ret;
+
+ id = (int)str_gnum(st[++sp]);
+ mstr = st[++sp];
+ msize = (int)str_gnum(st[++sp]);
+ mtype = (long)str_gnum(st[++sp]);
+ flags = (int)str_gnum(st[++sp]);
+ mbuf = str_get(mstr);
+ if (mstr->str_cur < sizeof(long)+msize+1) {
+ STR_GROW(mstr, sizeof(long)+msize+1);
+ mbuf = str_get(mstr);
+ }
+ errno = 0;
+ ret = msgrcv(id, mbuf, msize, mtype, flags);
+ if (ret >= 0) {
+ mstr->str_cur = sizeof(long)+ret;
+ mstr->str_ptr[sizeof(long)+ret] = '\0';
+ }
+ return ret;
+#else
+ fatal("msgrcv not implemented");
+#endif
+}
+
+int
+do_semop(arglast)
+int *arglast;
+{
+#ifdef HAS_SEM
+ register STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ STR *opstr;
+ char *opbuf;
+ int id, opsize;
+
+ id = (int)str_gnum(st[++sp]);
+ opstr = st[++sp];
+ opbuf = str_get(opstr);
+ opsize = opstr->str_cur;
+ if (opsize < sizeof(struct sembuf)
+ || (opsize % sizeof(struct sembuf)) != 0) {
+ errno = EINVAL;
+ return -1;
+ }
+ errno = 0;
+ return semop(id, opbuf, opsize/sizeof(struct sembuf));
+#else
+ fatal("semop not implemented");
+#endif
+}
+
+int
+do_shmio(optype, arglast)
+int optype;
+int *arglast;
+{
+#ifdef HAS_SHM
+ register STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ STR *mstr;
+ char *mbuf, *shm;
+ int id, mpos, msize;
+ struct shmid_ds shmds;
+ extern char *shmat();
+
+ id = (int)str_gnum(st[++sp]);
+ mstr = st[++sp];
+ mpos = (int)str_gnum(st[++sp]);
+ msize = (int)str_gnum(st[++sp]);
+ errno = 0;
+ if (shmctl(id, IPC_STAT, &shmds) == -1)
+ return -1;
+ if (mpos < 0 || msize < 0 || mpos + msize > shmds.shm_segsz) {
+ errno = EFAULT; /* can't do as caller requested */
+ return -1;
+ }
+ shm = shmat(id, (char *)NULL, (optype == O_SHMREAD) ? SHM_RDONLY : 0);
+ if (shm == (char *)-1) /* I hate System V IPC, I really do */
+ return -1;
+ mbuf = str_get(mstr);
+ if (optype == O_SHMREAD) {
+ if (mstr->str_cur < msize) {
+ STR_GROW(mstr, msize+1);
+ mbuf = str_get(mstr);
+ }
+ bcopy(shm + mpos, mbuf, msize);
+ mstr->str_cur = msize;
+ mstr->str_ptr[msize] = '\0';
+ }
+ else {
+ int n;
+
+ if ((n = mstr->str_cur) > msize)
+ n = msize;
+ bcopy(mbuf, shm + mpos, n);
+ if (n < msize)
+ bzero(shm + mpos + n, msize - n);
+ }
+ return shmdt(shm);
+#else
+ fatal("shm I/O not implemented");
+#endif
+}
+
+#endif /* SYSV IPC */
diff --git a/MultiSource/Benchmarks/MallocBench/perl/dolist.c b/MultiSource/Benchmarks/MallocBench/perl/dolist.c
new file mode 100644
index 00000000..af79e63e
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/dolist.c
@@ -0,0 +1,1765 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:08:03 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+
+#ifdef BUGGY_MSC
+ #pragma function(memcmp)
+#endif /* BUGGY_MSC */
+
+int
+do_match(str,arg,gimme,arglast)
+STR *str;
+register ARG *arg;
+int gimme;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register SPAT *spat = arg[2].arg_ptr.arg_spat;
+ register char *t;
+ register int sp = arglast[0] + 1;
+ STR *srchstr = st[sp];
+ register char *s = str_get(st[sp]);
+ char *strend = s + st[sp]->str_cur;
+ STR *tmpstr;
+ char *myhint = hint;
+
+ hint = Nullch;
+ if (!spat) {
+ if (gimme == G_ARRAY)
+ return --sp;
+ str_set(str,Yes);
+ STABSET(str);
+ st[sp] = str;
+ return sp;
+ }
+ if (!s)
+ fatal("panic: do_match");
+ if (spat->spat_flags & SPAT_USED) {
+#ifdef DEBUGGING
+ if (debug & 8)
+ deb("2.SPAT USED\n");
+#endif
+ if (gimme == G_ARRAY)
+ return --sp;
+ str_set(str,No);
+ STABSET(str);
+ st[sp] = str;
+ return sp;
+ }
+ --sp;
+ if (spat->spat_runtime) {
+ nointrp = "|)";
+ sp = eval(spat->spat_runtime,G_SCALAR,sp);
+ st = stack->ary_array;
+ t = str_get(tmpstr = st[sp--]);
+ nointrp = "";
+#ifdef DEBUGGING
+ if (debug & 8)
+ deb("2.SPAT /%s/\n",t);
+#endif
+ if (spat->spat_regexp) {
+ regfree(spat->spat_regexp);
+ spat->spat_regexp = Null(REGEXP*); /* crucial if regcomp aborts */
+ }
+ spat->spat_regexp = regcomp(t,t+tmpstr->str_cur,
+ spat->spat_flags & SPAT_FOLD);
+ if (!*spat->spat_regexp->precomp && lastspat)
+ spat = lastspat;
+ if (spat->spat_flags & SPAT_KEEP) {
+ if (spat->spat_runtime)
+ arg_free(spat->spat_runtime); /* it won't change, so */
+ spat->spat_runtime = Nullarg; /* no point compiling again */
+ }
+ if (!spat->spat_regexp->nparens)
+ gimme = G_SCALAR; /* accidental array context? */
+ if (regexec(spat->spat_regexp, s, strend, s, 0,
+ srchstr->str_pok & SP_STUDIED ? srchstr : Nullstr,
+ gimme == G_ARRAY)) {
+ if (spat->spat_regexp->subbase)
+ curspat = spat;
+ lastspat = spat;
+ goto gotcha;
+ }
+ else {
+ if (gimme == G_ARRAY)
+ return sp;
+ str_sset(str,&str_no);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+ }
+ }
+ else {
+#ifdef DEBUGGING
+ if (debug & 8) {
+ char ch;
+
+ if (spat->spat_flags & SPAT_ONCE)
+ ch = '?';
+ else
+ ch = '/';
+ deb("2.SPAT %c%s%c\n",ch,spat->spat_regexp->precomp,ch);
+ }
+#endif
+ if (!*spat->spat_regexp->precomp && lastspat)
+ spat = lastspat;
+ t = s;
+ if (myhint) {
+ if (myhint < s || myhint > strend)
+ fatal("panic: hint in do_match");
+ s = myhint;
+ if (spat->spat_regexp->regback >= 0) {
+ s -= spat->spat_regexp->regback;
+ if (s < t)
+ s = t;
+ }
+ else
+ s = t;
+ }
+ else if (spat->spat_short) {
+ if (spat->spat_flags & SPAT_SCANFIRST) {
+ if (srchstr->str_pok & SP_STUDIED) {
+ if (screamfirst[spat->spat_short->str_rare] < 0)
+ goto nope;
+ else if (!(s = screaminstr(srchstr,spat->spat_short)))
+ goto nope;
+ else if (spat->spat_flags & SPAT_ALL)
+ goto yup;
+ }
+#ifndef lint
+ else if (!(s = fbminstr((unsigned char*)s,
+ (unsigned char*)strend, spat->spat_short)))
+ goto nope;
+#endif
+ else if (spat->spat_flags & SPAT_ALL)
+ goto yup;
+ if (s && spat->spat_regexp->regback >= 0) {
+ ++spat->spat_short->str_u.str_useful;
+ s -= spat->spat_regexp->regback;
+ if (s < t)
+ s = t;
+ }
+ else
+ s = t;
+ }
+ else if (!multiline && (*spat->spat_short->str_ptr != *s ||
+ bcmp(spat->spat_short->str_ptr, s, spat->spat_slen) ))
+ goto nope;
+ if (--spat->spat_short->str_u.str_useful < 0) {
+ str_free(spat->spat_short);
+ spat->spat_short = Nullstr; /* opt is being useless */
+ }
+ }
+ if (!spat->spat_regexp->nparens)
+ gimme = G_SCALAR; /* accidental array context? */
+ if (regexec(spat->spat_regexp, s, strend, t, 0,
+ srchstr->str_pok & SP_STUDIED ? srchstr : Nullstr,
+ gimme == G_ARRAY)) {
+ if (spat->spat_regexp->subbase)
+ curspat = spat;
+ lastspat = spat;
+ if (spat->spat_flags & SPAT_ONCE)
+ spat->spat_flags |= SPAT_USED;
+ goto gotcha;
+ }
+ else {
+ if (gimme == G_ARRAY)
+ return sp;
+ str_sset(str,&str_no);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+ }
+ }
+ /*NOTREACHED*/
+
+ gotcha:
+ if (gimme == G_ARRAY) {
+ int iters, i, len;
+
+ iters = spat->spat_regexp->nparens;
+ if (sp + iters >= stack->ary_max) {
+ astore(stack,sp + iters, Nullstr);
+ st = stack->ary_array; /* possibly realloced */
+ }
+
+ for (i = 1; i <= iters; i++) {
+ st[++sp] = str_mortal(&str_no);
+ if (s = spat->spat_regexp->startp[i]) {
+ len = spat->spat_regexp->endp[i] - s;
+ if (len > 0)
+ str_nset(st[sp],s,len);
+ }
+ }
+ return sp;
+ }
+ else {
+ str_sset(str,&str_yes);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+ }
+
+yup:
+ ++spat->spat_short->str_u.str_useful;
+ lastspat = spat;
+ if (spat->spat_flags & SPAT_ONCE)
+ spat->spat_flags |= SPAT_USED;
+ if (sawampersand) {
+ char *tmps;
+
+ if (spat->spat_regexp->subbase)
+ Safefree(spat->spat_regexp->subbase);
+ tmps = spat->spat_regexp->subbase = nsavestr(t,strend-t);
+ spat->spat_regexp->subend = tmps + (strend-t);
+ tmps = spat->spat_regexp->startp[0] = tmps + (s - t);
+ spat->spat_regexp->endp[0] = tmps + spat->spat_short->str_cur;
+ curspat = spat;
+ }
+ str_sset(str,&str_yes);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+
+nope:
+ ++spat->spat_short->str_u.str_useful;
+ if (gimme == G_ARRAY)
+ return sp;
+ str_sset(str,&str_no);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+}
+
+#ifdef BUGGY_MSC
+ #pragma intrinsic(memcmp)
+#endif /* BUGGY_MSC */
+
+int
+do_split(str,spat,limit,gimme,arglast)
+STR *str;
+register SPAT *spat;
+register int limit;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ STR **st = ary->ary_array;
+ register int sp = arglast[0] + 1;
+ register char *s = str_get(st[sp]);
+ char *strend = s + st[sp--]->str_cur;
+ register STR *dstr;
+ register char *m;
+ int iters = 0;
+ int maxiters = (strend - s) + 10;
+ int i;
+ char *orig;
+ int origlimit = limit;
+ int realarray = 0;
+
+ if (!spat || !s)
+ fatal("panic: do_split");
+ else if (spat->spat_runtime) {
+ nointrp = "|)";
+ sp = eval(spat->spat_runtime,G_SCALAR,sp);
+ st = stack->ary_array;
+ m = str_get(dstr = st[sp--]);
+ nointrp = "";
+ if (*m == ' ' && dstr->str_cur == 1) {
+ str_set(dstr,"\\s+");
+ m = dstr->str_ptr;
+ spat->spat_flags |= SPAT_SKIPWHITE;
+ }
+ if (spat->spat_regexp) {
+ regfree(spat->spat_regexp);
+ spat->spat_regexp = Null(REGEXP*); /* avoid possible double free */
+ }
+ spat->spat_regexp = regcomp(m,m+dstr->str_cur,
+ spat->spat_flags & SPAT_FOLD);
+ if (spat->spat_flags & SPAT_KEEP ||
+ (spat->spat_runtime->arg_type == O_ITEM &&
+ (spat->spat_runtime[1].arg_type & A_MASK) == A_SINGLE) ) {
+ arg_free(spat->spat_runtime); /* it won't change, so */
+ spat->spat_runtime = Nullarg; /* no point compiling again */
+ }
+ }
+#ifdef DEBUGGING
+ if (debug & 8) {
+ deb("2.SPAT /%s/\n",spat->spat_regexp->precomp);
+ }
+#endif
+ ary = stab_xarray(spat->spat_repl[1].arg_ptr.arg_stab);
+ if (ary && (gimme != G_ARRAY || (spat->spat_flags & SPAT_ONCE))) {
+ realarray = 1;
+ if (!(ary->ary_flags & ARF_REAL)) {
+ ary->ary_flags |= ARF_REAL;
+ for (i = ary->ary_fill; i >= 0; i--)
+ ary->ary_array[i] = Nullstr; /* don't free mere refs */
+ }
+ ary->ary_fill = -1;
+ sp = -1; /* temporarily switch stacks */
+ }
+ else
+ ary = stack;
+ orig = s;
+ if (spat->spat_flags & SPAT_SKIPWHITE) {
+ while (isascii(*s) && isspace(*s))
+ s++;
+ }
+ if (!limit)
+ limit = maxiters + 2;
+ if (strEQ("\\s+",spat->spat_regexp->precomp)) {
+ while (--limit) {
+ for (m = s; m < strend && !(isascii(*m)&&isspace(*m)); m++) ;
+ if (m >= strend)
+ break;
+ dstr = Str_new(30,m-s);
+ str_nset(dstr,s,m-s);
+ if (!realarray)
+ str_2mortal(dstr);
+ (void)astore(ary, ++sp, dstr);
+ for (s = m + 1; s < strend && isascii(*s) && isspace(*s); s++) ;
+ }
+ }
+ else if (strEQ("^",spat->spat_regexp->precomp)) {
+ while (--limit) {
+ for (m = s; m < strend && *m != '\n'; m++) ;
+ m++;
+ if (m >= strend)
+ break;
+ dstr = Str_new(30,m-s);
+ str_nset(dstr,s,m-s);
+ if (!realarray)
+ str_2mortal(dstr);
+ (void)astore(ary, ++sp, dstr);
+ s = m;
+ }
+ }
+ else if (spat->spat_short) {
+ i = spat->spat_short->str_cur;
+ if (i == 1) {
+ int fold = (spat->spat_flags & SPAT_FOLD);
+
+ i = *spat->spat_short->str_ptr;
+ if (fold && isupper(i))
+ i = tolower(i);
+ while (--limit) {
+ if (fold) {
+ for ( m = s;
+ m < strend && *m != i &&
+ (!isupper(*m) || tolower(*m) != i);
+ m++)
+ ;
+ }
+ else
+ for (m = s; m < strend && *m != i; m++) ;
+ if (m >= strend)
+ break;
+ dstr = Str_new(30,m-s);
+ str_nset(dstr,s,m-s);
+ if (!realarray)
+ str_2mortal(dstr);
+ (void)astore(ary, ++sp, dstr);
+ s = m + 1;
+ }
+ }
+ else {
+#ifndef lint
+ while (s < strend && --limit &&
+ (m=fbminstr((unsigned char*)s, (unsigned char*)strend,
+ spat->spat_short)) )
+#endif
+ {
+ dstr = Str_new(31,m-s);
+ str_nset(dstr,s,m-s);
+ if (!realarray)
+ str_2mortal(dstr);
+ (void)astore(ary, ++sp, dstr);
+ s = m + i;
+ }
+ }
+ }
+ else {
+ maxiters += (strend - s) * spat->spat_regexp->nparens;
+ while (s < strend && --limit &&
+ regexec(spat->spat_regexp, s, strend, orig, 1, Nullstr, TRUE) ) {
+ if (spat->spat_regexp->subbase
+ && spat->spat_regexp->subbase != orig) {
+ m = s;
+ s = orig;
+ orig = spat->spat_regexp->subbase;
+ s = orig + (m - s);
+ strend = s + (strend - m);
+ }
+ m = spat->spat_regexp->startp[0];
+ dstr = Str_new(32,m-s);
+ str_nset(dstr,s,m-s);
+ if (!realarray)
+ str_2mortal(dstr);
+ (void)astore(ary, ++sp, dstr);
+ if (spat->spat_regexp->nparens) {
+ for (i = 1; i <= spat->spat_regexp->nparens; i++) {
+ s = spat->spat_regexp->startp[i];
+ m = spat->spat_regexp->endp[i];
+ dstr = Str_new(33,m-s);
+ str_nset(dstr,s,m-s);
+ if (!realarray)
+ str_2mortal(dstr);
+ (void)astore(ary, ++sp, dstr);
+ }
+ }
+ s = spat->spat_regexp->endp[0];
+ }
+ }
+ if (realarray)
+ iters = sp + 1;
+ else
+ iters = sp - arglast[0];
+ if (iters > maxiters)
+ fatal("Split loop");
+ if (s < strend || origlimit) { /* keep field after final delim? */
+ dstr = Str_new(34,strend-s);
+ str_nset(dstr,s,strend-s);
+ if (!realarray)
+ str_2mortal(dstr);
+ (void)astore(ary, ++sp, dstr);
+ iters++;
+ }
+ else {
+#ifndef I286x
+ while (iters > 0 && ary->ary_array[sp]->str_cur == 0)
+ iters--,sp--;
+#else
+ char *zaps;
+ int zapb;
+
+ if (iters > 0) {
+ zaps = str_get(afetch(ary,sp,FALSE));
+ zapb = (int) *zaps;
+ }
+
+ while (iters > 0 && (!zapb)) {
+ iters--,sp--;
+ if (iters > 0) {
+ zaps = str_get(afetch(ary,iters-1,FALSE));
+ zapb = (int) *zaps;
+ }
+ }
+#endif
+ }
+ if (realarray) {
+ ary->ary_fill = sp;
+ if (gimme == G_ARRAY) {
+ sp++;
+ astore(stack, arglast[0] + 1 + sp, Nullstr);
+ Copy(ary->ary_array, stack->ary_array + arglast[0] + 1, sp, STR*);
+ return arglast[0] + sp;
+ }
+ }
+ else {
+ if (gimme == G_ARRAY)
+ return sp;
+ }
+ sp = arglast[0] + 1;
+ str_numset(str,(double)iters);
+ STABSET(str);
+ st[sp] = str;
+ return sp;
+}
+
+int
+do_unpack(str,gimme,arglast)
+STR *str;
+int gimme;
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ register int sp = arglast[0] + 1;
+ register char *pat = str_get(st[sp++]);
+ register char *s = str_get(st[sp]);
+ char *strend = s + st[sp--]->str_cur;
+ char *strbeg = s;
+ register char *patend = pat + st[sp]->str_cur;
+ int datumtype;
+ register int len;
+ register int bits;
+
+ /* These must not be in registers: */
+ short ashort;
+ int aint;
+ long along;
+ unsigned short aushort;
+ unsigned int auint;
+ unsigned long aulong;
+ char *aptr;
+ float afloat;
+ double adouble;
+ int checksum = 0;
+ unsigned long culong;
+ double cdouble;
+
+ if (gimme != G_ARRAY) { /* arrange to do first one only */
+ for (patend = pat; !isalpha(*patend); patend++);
+ if (index("aAbBhH", *patend) || *pat == '%') {
+ patend++;
+ while (isdigit(*patend) || *patend == '*')
+ patend++;
+ }
+ else
+ patend++;
+ }
+ sp--;
+ while (pat < patend) {
+ reparse:
+ datumtype = *pat++;
+ if (pat >= patend)
+ len = 1;
+ else if (*pat == '*') {
+ len = strend - strbeg; /* long enough */
+ pat++;
+ }
+ else if (isdigit(*pat)) {
+ len = *pat++ - '0';
+ while (isdigit(*pat))
+ len = (len * 10) + (*pat++ - '0');
+ }
+ else
+ len = (datumtype != '@');
+ switch(datumtype) {
+ default:
+ break;
+ case '%':
+ if (len == 1 && pat[-1] != '1')
+ len = 16;
+ checksum = len;
+ culong = 0;
+ cdouble = 0;
+ if (pat < patend)
+ goto reparse;
+ break;
+ case '@':
+ if (len > strend - s)
+ fatal("@ outside of string");
+ s = strbeg + len;
+ break;
+ case 'X':
+ if (len > s - strbeg)
+ fatal("X outside of string");
+ s -= len;
+ break;
+ case 'x':
+ if (len > strend - s)
+ fatal("x outside of string");
+ s += len;
+ break;
+ case 'A':
+ case 'a':
+ if (len > strend - s)
+ len = strend - s;
+ if (checksum)
+ goto uchar_checksum;
+ str = Str_new(35,len);
+ str_nset(str,s,len);
+ s += len;
+ if (datumtype == 'A') {
+ aptr = s; /* borrow register */
+ s = str->str_ptr + len - 1;
+ while (s >= str->str_ptr && (!*s || (isascii(*s)&&isspace(*s))))
+ s--;
+ *++s = '\0';
+ str->str_cur = s - str->str_ptr;
+ s = aptr; /* unborrow register */
+ }
+ (void)astore(stack, ++sp, str_2mortal(str));
+ break;
+ case 'B':
+ case 'b':
+ if (pat[-1] == '*' || len > (strend - s) * 8)
+ len = (strend - s) * 8;
+ str = Str_new(35, len + 1);
+ str->str_cur = len;
+ str->str_pok = 1;
+ aptr = pat; /* borrow register */
+ pat = str->str_ptr;
+ if (datumtype == 'b') {
+ aint = len;
+ for (len = 0; len < aint; len++) {
+ if (len & 7)
+ bits >>= 1;
+ else
+ bits = *s++;
+ *pat++ = '0' + (bits & 1);
+ }
+ }
+ else {
+ aint = len;
+ for (len = 0; len < aint; len++) {
+ if (len & 7)
+ bits <<= 1;
+ else
+ bits = *s++;
+ *pat++ = '0' + ((bits & 128) != 0);
+ }
+ }
+ *pat = '\0';
+ pat = aptr; /* unborrow register */
+ (void)astore(stack, ++sp, str_2mortal(str));
+ break;
+ case 'H':
+ case 'h':
+ if (pat[-1] == '*' || len > (strend - s) * 2)
+ len = (strend - s) * 2;
+ str = Str_new(35, len + 1);
+ str->str_cur = len;
+ str->str_pok = 1;
+ aptr = pat; /* borrow register */
+ pat = str->str_ptr;
+ if (datumtype == 'h') {
+ aint = len;
+ for (len = 0; len < aint; len++) {
+ if (len & 1)
+ bits >>= 4;
+ else
+ bits = *s++;
+ *pat++ = hexdigit[bits & 15];
+ }
+ }
+ else {
+ aint = len;
+ for (len = 0; len < aint; len++) {
+ if (len & 1)
+ bits <<= 4;
+ else
+ bits = *s++;
+ *pat++ = hexdigit[(bits >> 4) & 15];
+ }
+ }
+ *pat = '\0';
+ pat = aptr; /* unborrow register */
+ (void)astore(stack, ++sp, str_2mortal(str));
+ break;
+ case 'c':
+ if (len > strend - s)
+ len = strend - s;
+ if (checksum) {
+ while (len-- > 0) {
+ aint = *s++;
+ if (aint >= 128) /* fake up signed chars */
+ aint -= 256;
+ culong += aint;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ aint = *s++;
+ if (aint >= 128) /* fake up signed chars */
+ aint -= 256;
+ str = Str_new(36,0);
+ str_numset(str,(double)aint);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'C':
+ if (len > strend - s)
+ len = strend - s;
+ if (checksum) {
+ uchar_checksum:
+ while (len-- > 0) {
+ auint = *s++ & 255;
+ culong += auint;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ auint = *s++ & 255;
+ str = Str_new(37,0);
+ str_numset(str,(double)auint);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 's':
+ along = (strend - s) / sizeof(short);
+ if (len > along)
+ len = along;
+ if (checksum) {
+ while (len-- > 0) {
+ bcopy(s,(char*)&ashort,sizeof(short));
+ s += sizeof(short);
+ culong += ashort;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ bcopy(s,(char*)&ashort,sizeof(short));
+ s += sizeof(short);
+ str = Str_new(38,0);
+ str_numset(str,(double)ashort);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'n':
+ case 'S':
+ along = (strend - s) / sizeof(unsigned short);
+ if (len > along)
+ len = along;
+ if (checksum) {
+ while (len-- > 0) {
+ bcopy(s,(char*)&aushort,sizeof(unsigned short));
+ s += sizeof(unsigned short);
+#ifdef HAS_NTOHS
+ if (datumtype == 'n')
+ aushort = ntohs(aushort);
+#endif
+ culong += aushort;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ bcopy(s,(char*)&aushort,sizeof(unsigned short));
+ s += sizeof(unsigned short);
+ str = Str_new(39,0);
+#ifdef HAS_NTOHS
+ if (datumtype == 'n')
+ aushort = ntohs(aushort);
+#endif
+ str_numset(str,(double)aushort);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'i':
+ along = (strend - s) / sizeof(int);
+ if (len > along)
+ len = along;
+ if (checksum) {
+ while (len-- > 0) {
+ bcopy(s,(char*)&aint,sizeof(int));
+ s += sizeof(int);
+ if (checksum > 32)
+ cdouble += (double)aint;
+ else
+ culong += aint;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ bcopy(s,(char*)&aint,sizeof(int));
+ s += sizeof(int);
+ str = Str_new(40,0);
+ str_numset(str,(double)aint);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'I':
+ along = (strend - s) / sizeof(unsigned int);
+ if (len > along)
+ len = along;
+ if (checksum) {
+ while (len-- > 0) {
+ bcopy(s,(char*)&auint,sizeof(unsigned int));
+ s += sizeof(unsigned int);
+ if (checksum > 32)
+ cdouble += (double)auint;
+ else
+ culong += auint;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ bcopy(s,(char*)&auint,sizeof(unsigned int));
+ s += sizeof(unsigned int);
+ str = Str_new(41,0);
+ str_numset(str,(double)auint);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'l':
+ along = (strend - s) / sizeof(long);
+ if (len > along)
+ len = along;
+ if (checksum) {
+ while (len-- > 0) {
+ bcopy(s,(char*)&along,sizeof(long));
+ s += sizeof(long);
+ if (checksum > 32)
+ cdouble += (double)along;
+ else
+ culong += along;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ bcopy(s,(char*)&along,sizeof(long));
+ s += sizeof(long);
+ str = Str_new(42,0);
+ str_numset(str,(double)along);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'N':
+ case 'L':
+ along = (strend - s) / sizeof(unsigned long);
+ if (len > along)
+ len = along;
+ if (checksum) {
+ while (len-- > 0) {
+ bcopy(s,(char*)&aulong,sizeof(unsigned long));
+ s += sizeof(unsigned long);
+#ifdef HAS_NTOHL
+ if (datumtype == 'N')
+ aulong = ntohl(aulong);
+#endif
+ if (checksum > 32)
+ cdouble += (double)aulong;
+ else
+ culong += aulong;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ bcopy(s,(char*)&aulong,sizeof(unsigned long));
+ s += sizeof(unsigned long);
+ str = Str_new(43,0);
+#ifdef HAS_NTOHL
+ if (datumtype == 'N')
+ aulong = ntohl(aulong);
+#endif
+ str_numset(str,(double)aulong);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'p':
+ along = (strend - s) / sizeof(char*);
+ if (len > along)
+ len = along;
+ while (len-- > 0) {
+ if (sizeof(char*) > strend - s)
+ break;
+ else {
+ bcopy(s,(char*)&aptr,sizeof(char*));
+ s += sizeof(char*);
+ }
+ str = Str_new(44,0);
+ if (aptr)
+ str_set(str,aptr);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ break;
+ /* float and double added gnb@melba.bby.oz.au 22/11/89 */
+ case 'f':
+ case 'F':
+ along = (strend - s) / sizeof(float);
+ if (len > along)
+ len = along;
+ if (checksum) {
+ while (len-- > 0) {
+ bcopy(s, (char *)&afloat, sizeof(float));
+ s += sizeof(float);
+ cdouble += afloat;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ bcopy(s, (char *)&afloat, sizeof(float));
+ s += sizeof(float);
+ str = Str_new(47, 0);
+ str_numset(str, (double)afloat);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'd':
+ case 'D':
+ along = (strend - s) / sizeof(double);
+ if (len > along)
+ len = along;
+ if (checksum) {
+ while (len-- > 0) {
+ bcopy(s, (char *)&adouble, sizeof(double));
+ s += sizeof(double);
+ cdouble += adouble;
+ }
+ }
+ else {
+ while (len-- > 0) {
+ bcopy(s, (char *)&adouble, sizeof(double));
+ s += sizeof(double);
+ str = Str_new(48, 0);
+ str_numset(str, (double)adouble);
+ (void)astore(stack, ++sp, str_2mortal(str));
+ }
+ }
+ break;
+ case 'u':
+ along = (strend - s) * 3 / 4;
+ str = Str_new(42,along);
+ while (s < strend && *s > ' ' && *s < 'a') {
+ int a,b,c,d;
+ char hunk[4];
+
+ hunk[3] = '\0';
+ len = (*s++ - ' ') & 077;
+ while (len > 0) {
+ if (s < strend && *s >= ' ')
+ a = (*s++ - ' ') & 077;
+ else
+ a = 0;
+ if (s < strend && *s >= ' ')
+ b = (*s++ - ' ') & 077;
+ else
+ b = 0;
+ if (s < strend && *s >= ' ')
+ c = (*s++ - ' ') & 077;
+ else
+ c = 0;
+ if (s < strend && *s >= ' ')
+ d = (*s++ - ' ') & 077;
+ else
+ d = 0;
+ hunk[0] = a << 2 | b >> 4;
+ hunk[1] = b << 4 | c >> 2;
+ hunk[2] = c << 6 | d;
+ str_ncat(str,hunk, len > 3 ? 3 : len);
+ len -= 3;
+ }
+ if (*s == '\n')
+ s++;
+ else if (s[1] == '\n') /* possible checksum byte */
+ s += 2;
+ }
+ (void)astore(stack, ++sp, str_2mortal(str));
+ break;
+ }
+ if (checksum) {
+ str = Str_new(42,0);
+ if (index("fFdD", datumtype) ||
+ (checksum > 32 && index("iIlLN", datumtype)) ) {
+ double modf();
+ double trouble;
+
+ adouble = 1.0;
+ while (checksum >= 16) {
+ checksum -= 16;
+ adouble *= 65536.0;
+ }
+ while (checksum >= 4) {
+ checksum -= 4;
+ adouble *= 16.0;
+ }
+ while (checksum--)
+ adouble *= 2.0;
+ along = (1 << checksum) - 1;
+ while (cdouble < 0.0)
+ cdouble += adouble;
+ cdouble = modf(cdouble / adouble, &trouble) * adouble;
+ str_numset(str,cdouble);
+ }
+ else {
+ if (checksum < 32) {
+ along = (1 << checksum) - 1;
+ culong &= (unsigned long)along;
+ }
+ str_numset(str,(double)culong);
+ }
+ (void)astore(stack, ++sp, str_2mortal(str));
+ checksum = 0;
+ }
+ }
+ return sp;
+}
+
+int
+do_slice(stab,str,numarray,lval,gimme,arglast)
+STAB *stab;
+STR *str;
+int numarray;
+int lval;
+int gimme;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ register int max = arglast[2];
+ register char *tmps;
+ register int len;
+ register int magic = 0;
+ register ARRAY *ary;
+ register HASH *hash;
+ int oldarybase = arybase;
+
+ if (numarray) {
+ if (numarray == 2) { /* a slice of a LIST */
+ ary = stack;
+ ary->ary_fill = arglast[3];
+ arybase -= max + 1;
+ st[sp] = str; /* make stack size available */
+ str_numset(str,(double)(sp - 1));
+ }
+ else
+ ary = stab_array(stab); /* a slice of an array */
+ }
+ else {
+ if (lval) {
+ if (stab == envstab)
+ magic = 'E';
+ else if (stab == sigstab)
+ magic = 'S';
+#ifdef SOME_DBM
+ else if (stab_hash(stab)->tbl_dbm)
+ magic = 'D';
+#endif /* SOME_DBM */
+ }
+ hash = stab_hash(stab); /* a slice of an associative array */
+ }
+
+ if (gimme == G_ARRAY) {
+ if (numarray) {
+ while (sp < max) {
+ if (st[++sp]) {
+ st[sp-1] = afetch(ary,
+ ((int)str_gnum(st[sp])) - arybase, lval);
+ }
+ else
+ st[sp-1] = &str_undef;
+ }
+ }
+ else {
+ while (sp < max) {
+ if (st[++sp]) {
+ tmps = str_get(st[sp]);
+ len = st[sp]->str_cur;
+ st[sp-1] = hfetch(hash,tmps,len, lval);
+ if (magic)
+ str_magic(st[sp-1],stab,magic,tmps,len);
+ }
+ else
+ st[sp-1] = &str_undef;
+ }
+ }
+ sp--;
+ }
+ else {
+ if (numarray) {
+ if (st[max])
+ st[sp] = afetch(ary,
+ ((int)str_gnum(st[max])) - arybase, lval);
+ else
+ st[sp] = &str_undef;
+ }
+ else {
+ if (st[max]) {
+ tmps = str_get(st[max]);
+ len = st[max]->str_cur;
+ st[sp] = hfetch(hash,tmps,len, lval);
+ if (magic)
+ str_magic(st[sp],stab,magic,tmps,len);
+ }
+ else
+ st[sp] = &str_undef;
+ }
+ }
+ arybase = oldarybase;
+ return sp;
+}
+
+int
+do_splice(ary,gimme,arglast)
+register ARRAY *ary;
+int gimme;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ register int sp = arglast[1];
+ int max = arglast[2] + 1;
+ register STR **src;
+ register STR **dst;
+ register int i;
+ register int offset;
+ register int length;
+ int newlen;
+ int after;
+ int diff;
+ STR **tmparyval;
+
+ if (++sp < max) {
+ offset = ((int)str_gnum(st[sp])) - arybase;
+ if (offset < 0)
+ offset += ary->ary_fill + 1;
+ if (++sp < max) {
+ length = (int)str_gnum(st[sp++]);
+ if (length < 0)
+ length = 0;
+ }
+ else
+ length = ary->ary_max; /* close enough to infinity */
+ }
+ else {
+ offset = 0;
+ length = ary->ary_max;
+ }
+ if (offset < 0) {
+ length += offset;
+ offset = 0;
+ if (length < 0)
+ length = 0;
+ }
+ if (offset > ary->ary_fill + 1)
+ offset = ary->ary_fill + 1;
+ after = ary->ary_fill + 1 - (offset + length);
+ if (after < 0) { /* not that much array */
+ length += after; /* offset+length now in array */
+ after = 0;
+ if (!ary->ary_alloc) {
+ afill(ary,0);
+ afill(ary,-1);
+ }
+ }
+
+ /* At this point, sp .. max-1 is our new LIST */
+
+ newlen = max - sp;
+ diff = newlen - length;
+
+ if (diff < 0) { /* shrinking the area */
+ if (newlen) {
+ New(451, tmparyval, newlen, STR*); /* so remember insertion */
+ Copy(st+sp, tmparyval, newlen, STR*);
+ }
+
+ sp = arglast[0] + 1;
+ if (gimme == G_ARRAY) { /* copy return vals to stack */
+ if (sp + length >= stack->ary_max) {
+ astore(stack,sp + length, Nullstr);
+ st = stack->ary_array;
+ }
+ Copy(ary->ary_array+offset, st+sp, length, STR*);
+ if (ary->ary_flags & ARF_REAL) {
+ for (i = length, dst = st+sp; i; i--)
+ str_2mortal(*dst++); /* free them eventualy */
+ }
+ sp += length - 1;
+ }
+ else {
+ st[sp] = ary->ary_array[offset+length-1];
+ if (ary->ary_flags & ARF_REAL)
+ str_2mortal(st[sp]);
+ }
+ ary->ary_fill += diff;
+
+ /* pull up or down? */
+
+ if (offset < after) { /* easier to pull up */
+ if (offset) { /* esp. if nothing to pull */
+ src = &ary->ary_array[offset-1];
+ dst = src - diff; /* diff is negative */
+ for (i = offset; i > 0; i--) /* can't trust Copy */
+ *dst-- = *src--;
+ }
+ Zero(ary->ary_array, -diff, STR*);
+ ary->ary_array -= diff; /* diff is negative */
+ ary->ary_max += diff;
+ }
+ else {
+ if (after) { /* anything to pull down? */
+ src = ary->ary_array + offset + length;
+ dst = src + diff; /* diff is negative */
+ Copy(src, dst, after, STR*);
+ }
+ Zero(&ary->ary_array[ary->ary_fill+1], -diff, STR*);
+ /* avoid later double free */
+ }
+ if (newlen) {
+ for (src = tmparyval, dst = ary->ary_array + offset;
+ newlen; newlen--) {
+ *dst = Str_new(46,0);
+ str_sset(*dst++,*src++);
+ }
+ Safefree(tmparyval);
+ }
+ }
+ else { /* no, expanding (or same) */
+ if (length) {
+ New(452, tmparyval, length, STR*); /* so remember deletion */
+ Copy(ary->ary_array+offset, tmparyval, length, STR*);
+ }
+
+ if (diff > 0) { /* expanding */
+
+ /* push up or down? */
+
+ if (offset < after && diff <= ary->ary_array - ary->ary_alloc) {
+ if (offset) {
+ src = ary->ary_array;
+ dst = src - diff;
+ Copy(src, dst, offset, STR*);
+ }
+ ary->ary_array -= diff; /* diff is positive */
+ ary->ary_max += diff;
+ ary->ary_fill += diff;
+ }
+ else {
+ if (ary->ary_fill + diff >= ary->ary_max) /* oh, well */
+ astore(ary, ary->ary_fill + diff, Nullstr);
+ else
+ ary->ary_fill += diff;
+ if (after) {
+ dst = ary->ary_array + ary->ary_fill;
+ src = dst - diff;
+ for (i = after; i; i--) {
+ if (*dst) /* str was hanging around */
+ str_free(*dst); /* after $#foo */
+ *dst-- = *src;
+ *src-- = Nullstr;
+ }
+ }
+ }
+ }
+
+ for (src = st+sp, dst = ary->ary_array + offset; newlen; newlen--) {
+ *dst = Str_new(46,0);
+ str_sset(*dst++,*src++);
+ }
+ sp = arglast[0] + 1;
+ if (gimme == G_ARRAY) { /* copy return vals to stack */
+ if (length) {
+ Copy(tmparyval, st+sp, length, STR*);
+ if (ary->ary_flags & ARF_REAL) {
+ for (i = length, dst = st+sp; i; i--)
+ str_2mortal(*dst++); /* free them eventualy */
+ }
+ Safefree(tmparyval);
+ }
+ sp += length - 1;
+ }
+ else if (length) {
+ st[sp] = tmparyval[length-1];
+ if (ary->ary_flags & ARF_REAL)
+ str_2mortal(st[sp]);
+ Safefree(tmparyval);
+ }
+ else
+ st[sp] = &str_undef;
+ }
+ return sp;
+}
+
+int
+do_grep(arg,str,gimme,arglast)
+register ARG *arg;
+STR *str;
+int gimme;
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ register int dst = arglast[1];
+ register int src = dst + 1;
+ register int sp = arglast[2];
+ register int i = sp - arglast[1];
+ int oldsave = savestack->ary_fill;
+ SPAT *oldspat = curspat;
+ int oldtmps_base = tmps_base;
+
+ savesptr(&stab_val(defstab));
+ tmps_base = tmps_max;
+ if ((arg[1].arg_type & A_MASK) != A_EXPR) {
+ arg[1].arg_type &= A_MASK;
+ dehoist(arg,1);
+ arg[1].arg_type |= A_DONT;
+ }
+ arg = arg[1].arg_ptr.arg_arg;
+ while (i-- > 0) {
+ if (st[src])
+ stab_val(defstab) = st[src];
+ else
+ stab_val(defstab) = str_mortal(&str_undef);
+ (void)eval(arg,G_SCALAR,sp);
+ st = stack->ary_array;
+ if (str_true(st[sp+1]))
+ st[dst++] = st[src];
+ src++;
+ curspat = oldspat;
+ }
+ restorelist(oldsave);
+ tmps_base = oldtmps_base;
+ if (gimme != G_ARRAY) {
+ str_numset(str,(double)(dst - arglast[1]));
+ STABSET(str);
+ st[arglast[0]+1] = str;
+ return arglast[0]+1;
+ }
+ return arglast[0] + (dst - arglast[1]);
+}
+
+int
+do_reverse(arglast)
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ register STR **up = &st[arglast[1]];
+ register STR **down = &st[arglast[2]];
+ register int i = arglast[2] - arglast[1];
+
+ while (i-- > 0) {
+ *up++ = *down;
+ if (i-- > 0)
+ *down-- = *up;
+ }
+ i = arglast[2] - arglast[1];
+ Copy(down+1,up,i/2,STR*);
+ return arglast[2] - 1;
+}
+
+int
+do_sreverse(str,arglast)
+STR *str;
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ register char *up;
+ register char *down;
+ register int tmp;
+
+ str_sset(str,st[arglast[2]]);
+ up = str_get(str);
+ if (str->str_cur > 1) {
+ down = str->str_ptr + str->str_cur - 1;
+ while (down > up) {
+ tmp = *up;
+ *up++ = *down;
+ *down-- = tmp;
+ }
+ }
+ STABSET(str);
+ st[arglast[0]+1] = str;
+ return arglast[0]+1;
+}
+
+static CMD *sortcmd;
+static HASH *sortstash = Null(HASH*);
+static STAB *firststab = Nullstab;
+static STAB *secondstab = Nullstab;
+
+int
+do_sort(str,stab,gimme,arglast)
+STR *str;
+STAB *stab;
+int gimme;
+int *arglast;
+{
+ register STR **st = stack->ary_array;
+ int sp = arglast[1];
+ register STR **up;
+ register int max = arglast[2] - sp;
+ register int i;
+ int sortcmp();
+ int sortsub();
+ STR *oldfirst;
+ STR *oldsecond;
+ ARRAY *oldstack;
+ static ARRAY *sortstack = Null(ARRAY*);
+
+ if (gimme != G_ARRAY) {
+ str_sset(str,&str_undef);
+ STABSET(str);
+ st[sp] = str;
+ return sp;
+ }
+ up = &st[sp];
+ st += sp; /* temporarily make st point to args */
+ for (i = 1; i <= max; i++) {
+ if (*up = st[i]) {
+ if (!(*up)->str_pok)
+ (void)str_2ptr(*up);
+ else
+ (*up)->str_pok &= ~SP_TEMP;
+ up++;
+ }
+ }
+ st -= sp;
+ max = up - &st[sp];
+ sp--;
+ if (max > 1) {
+ if (stab) {
+ int oldtmps_base = tmps_base;
+
+ if (!stab_sub(stab) || !(sortcmd = stab_sub(stab)->cmd))
+ fatal("Undefined subroutine \"%s\" in sort", stab_name(stab));
+ if (!sortstack) {
+ sortstack = anew(Nullstab);
+ astore(sortstack, 0, Nullstr);
+ aclear(sortstack);
+ sortstack->ary_flags = 0;
+ }
+ oldstack = stack;
+ stack = sortstack;
+ tmps_base = tmps_max;
+ if (sortstash != stab_stash(stab)) {
+ firststab = stabent("a",TRUE);
+ secondstab = stabent("b",TRUE);
+ sortstash = stab_stash(stab);
+ }
+ oldfirst = stab_val(firststab);
+ oldsecond = stab_val(secondstab);
+#ifndef lint
+ qsort((char*)(st+sp+1),max,sizeof(STR*),sortsub);
+#else
+ qsort(Nullch,max,sizeof(STR*),sortsub);
+#endif
+ stab_val(firststab) = oldfirst;
+ stab_val(secondstab) = oldsecond;
+ tmps_base = oldtmps_base;
+ stack = oldstack;
+ }
+#ifndef lint
+ else
+ qsort((char*)(st+sp+1),max,sizeof(STR*),sortcmp);
+#endif
+ }
+ return sp+max;
+}
+
+int
+sortsub(str1,str2)
+STR **str1;
+STR **str2;
+{
+ stab_val(firststab) = *str1;
+ stab_val(secondstab) = *str2;
+ cmd_exec(sortcmd,G_SCALAR,-1);
+ return (int)str_gnum(*stack->ary_array);
+}
+
+sortcmp(strp1,strp2)
+STR **strp1;
+STR **strp2;
+{
+ register STR *str1 = *strp1;
+ register STR *str2 = *strp2;
+ int retval;
+
+ if (str1->str_cur < str2->str_cur) {
+ if (retval = memcmp(str1->str_ptr, str2->str_ptr, str1->str_cur))
+ return retval;
+ else
+ return -1;
+ }
+ else if (retval = memcmp(str1->str_ptr, str2->str_ptr, str2->str_cur))
+ return retval;
+ else if (str1->str_cur == str2->str_cur)
+ return 0;
+ else
+ return 1;
+}
+
+int
+do_range(gimme,arglast)
+int gimme;
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ register int i;
+ register ARRAY *ary = stack;
+ register STR *str;
+ int max;
+
+ if (gimme != G_ARRAY)
+ fatal("panic: do_range");
+
+ if (st[sp+1]->str_nok || !st[sp+1]->str_pok ||
+ (looks_like_number(st[sp+1]) && *st[sp+1]->str_ptr != '0') ) {
+ i = (int)str_gnum(st[sp+1]);
+ max = (int)str_gnum(st[sp+2]);
+ while (i <= max) {
+ (void)astore(ary, ++sp, str = str_mortal(&str_no));
+ str_numset(str,(double)i++);
+ }
+ }
+ else {
+ STR *final = str_mortal(st[sp+2]);
+ char *tmps = str_get(final);
+
+ str = str_mortal(st[sp+1]);
+ while (!str->str_nok && str->str_cur <= final->str_cur &&
+ strNE(str->str_ptr,tmps) ) {
+ (void)astore(ary, ++sp, str);
+ str = str_2mortal(str_smake(str));
+ str_inc(str);
+ }
+ if (strEQ(str->str_ptr,tmps))
+ (void)astore(ary, ++sp, str);
+ }
+ return sp;
+}
+
+int
+do_repeatary(arglast)
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ register int items = arglast[1] - sp;
+ register int count = (int) str_gnum(st[arglast[2]]);
+ register ARRAY *ary = stack;
+ register int i;
+ int max;
+
+ max = items * count;
+ if (max > 0 && sp + max > stack->ary_max) {
+ astore(stack, sp + max, Nullstr);
+ st = stack->ary_array;
+ }
+ if (count > 1) {
+ for (i = arglast[1]; i > sp; i--)
+ st[i]->str_pok &= ~SP_TEMP;
+ repeatcpy((char*)&st[arglast[1]+1], (char*)&st[sp+1],
+ items * sizeof(STR*), count);
+ }
+ sp += max;
+
+ return sp;
+}
+
+int
+do_caller(arg,maxarg,gimme,arglast)
+ARG *arg;
+int maxarg;
+int gimme;
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ register CSV *csv = curcsv;
+ STR *str;
+ int count = 0;
+
+ if (!csv)
+ fatal("There is no caller");
+ if (maxarg)
+ count = (int) str_gnum(st[sp+1]);
+ for (;;) {
+ if (!csv)
+ return sp;
+ if (DBsub && csv->curcsv && csv->curcsv->sub == stab_sub(DBsub))
+ count++;
+ if (!count--)
+ break;
+ csv = csv->curcsv;
+ }
+ if (gimme != G_ARRAY) {
+ STR *str = arg->arg_ptr.arg_str;
+ str_set(str,csv->curcmd->c_stash->tbl_name);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+ }
+
+#ifndef lint
+ (void)astore(stack,++sp,
+ str_2mortal(str_make(csv->curcmd->c_stash->tbl_name,0)) );
+ (void)astore(stack,++sp,
+ str_2mortal(str_make(stab_val(csv->curcmd->c_filestab)->str_ptr,0)) );
+ (void)astore(stack,++sp,
+ str_2mortal(str_nmake((double)csv->curcmd->c_line)) );
+ if (!maxarg)
+ return sp;
+ str = Str_new(49,0);
+ stab_fullname(str, csv->stab);
+ (void)astore(stack,++sp, str_2mortal(str));
+ (void)astore(stack,++sp,
+ str_2mortal(str_nmake((double)csv->hasargs)) );
+ (void)astore(stack,++sp,
+ str_2mortal(str_nmake((double)csv->wantarray)) );
+ if (csv->hasargs) {
+ ARRAY *ary = csv->argarray;
+
+ if (dbargs->ary_max < ary->ary_fill)
+ astore(dbargs,ary->ary_fill,Nullstr);
+ Copy(ary->ary_array, dbargs->ary_array, ary->ary_fill+1, STR*);
+ dbargs->ary_fill = ary->ary_fill;
+ }
+#else
+ (void)astore(stack,++sp,
+ str_2mortal(str_make("",0)));
+#endif
+ return sp;
+}
+
+int
+do_tms(str,gimme,arglast)
+STR *str;
+int gimme;
+int *arglast;
+{
+#ifdef MSDOS
+ return -1;
+#else
+ STR **st = stack->ary_array;
+ register int sp = arglast[0];
+
+ if (gimme != G_ARRAY) {
+ str_sset(str,&str_undef);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+ }
+ (void)times(&timesbuf);
+
+#ifndef HZ
+#define HZ 60
+#endif
+
+#ifndef lint
+ (void)astore(stack,++sp,
+ str_2mortal(str_nmake(((double)timesbuf.tms_utime)/HZ)));
+ (void)astore(stack,++sp,
+ str_2mortal(str_nmake(((double)timesbuf.tms_stime)/HZ)));
+ (void)astore(stack,++sp,
+ str_2mortal(str_nmake(((double)timesbuf.tms_cutime)/HZ)));
+ (void)astore(stack,++sp,
+ str_2mortal(str_nmake(((double)timesbuf.tms_cstime)/HZ)));
+#else
+ (void)astore(stack,++sp,
+ str_2mortal(str_nmake(0.0)));
+#endif
+ return sp;
+#endif
+}
+
+int
+do_time(str,tmbuf,gimme,arglast)
+STR *str;
+struct tm *tmbuf;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ STR **st = ary->ary_array;
+ register int sp = arglast[0];
+
+ if (!tmbuf || gimme != G_ARRAY) {
+ str_sset(str,&str_undef);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+ }
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_sec)));
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_min)));
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_hour)));
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_mday)));
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_mon)));
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_year)));
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_wday)));
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_yday)));
+ (void)astore(ary,++sp,str_2mortal(str_nmake((double)tmbuf->tm_isdst)));
+ return sp;
+}
+
+int
+do_kv(str,hash,kv,gimme,arglast)
+STR *str;
+HASH *hash;
+int kv;
+int gimme;
+int *arglast;
+{
+ register ARRAY *ary = stack;
+ STR **st = ary->ary_array;
+ register int sp = arglast[0];
+ int i;
+ register HENT *entry;
+ char *tmps;
+ STR *tmpstr;
+ int dokeys = (kv == O_KEYS || kv == O_HASH);
+ int dovalues = (kv == O_VALUES || kv == O_HASH);
+
+ if (gimme != G_ARRAY) {
+ str_sset(str,&str_undef);
+ STABSET(str);
+ st[++sp] = str;
+ return sp;
+ }
+ (void)hiterinit(hash);
+ while (entry = hiternext(hash)) {
+ if (dokeys) {
+ tmps = hiterkey(entry,&i);
+ if (!i)
+ tmps = "";
+ (void)astore(ary,++sp,str_2mortal(str_make(tmps,i)));
+ }
+ if (dovalues) {
+ tmpstr = Str_new(45,0);
+#ifdef DEBUGGING
+ if (debug & 8192) {
+ sprintf(buf,"%d%%%d=%d\n",entry->hent_hash,
+ hash->tbl_max+1,entry->hent_hash & hash->tbl_max);
+ str_set(tmpstr,buf);
+ }
+ else
+#endif
+ str_sset(tmpstr,hiterval(hash,entry));
+ (void)astore(ary,++sp,str_2mortal(tmpstr));
+ }
+ }
+ return sp;
+}
+
+int
+do_each(str,hash,gimme,arglast)
+STR *str;
+HASH *hash;
+int gimme;
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ register int sp = arglast[0];
+ static STR *mystrk = Nullstr;
+ HENT *entry = hiternext(hash);
+ int i;
+ char *tmps;
+
+ if (mystrk) {
+ str_free(mystrk);
+ mystrk = Nullstr;
+ }
+
+ if (entry) {
+ if (gimme == G_ARRAY) {
+ tmps = hiterkey(entry, &i);
+ if (!i)
+ tmps = "";
+ st[++sp] = mystrk = str_make(tmps,i);
+ }
+ st[++sp] = str;
+ str_sset(str,hiterval(hash,entry));
+ STABSET(str);
+ return sp;
+ }
+ else
+ return sp;
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/dump.c b/MultiSource/Benchmarks/MallocBench/perl/dump.c
new file mode 100644
index 00000000..8a8949ed
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/dump.c
@@ -0,0 +1,354 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:08:25 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+#ifdef DEBUGGING
+static int dumplvl = 0;
+
+dump_all()
+{
+ register int i;
+ register STAB *stab;
+ register HENT *entry;
+ STR *str = str_mortal(&str_undef);
+
+ dump_cmd(main_root,Nullcmd);
+ for (i = 0; i <= 127; i++) {
+ for (entry = defstash->tbl_array[i]; entry; entry = entry->hent_next) {
+ stab = (STAB*)entry->hent_val;
+ if (stab_sub(stab)) {
+ stab_fullname(str,stab);
+ dump("\nSUB %s = ", str->str_ptr);
+ dump_cmd(stab_sub(stab)->cmd,Nullcmd);
+ }
+ }
+ }
+}
+
+dump_cmd(cmd,alt)
+register CMD *cmd;
+register CMD *alt;
+{
+ fprintf(stderr,"{\n");
+ while (cmd) {
+ dumplvl++;
+ dump("C_TYPE = %s\n",cmdname[cmd->c_type]);
+ dump("C_ADDR = 0x%lx\n",cmd);
+ dump("C_NEXT = 0x%lx\n",cmd->c_next);
+ if (cmd->c_line)
+ dump("C_LINE = %d (0x%lx)\n",cmd->c_line,cmd);
+ if (cmd->c_label)
+ dump("C_LABEL = \"%s\"\n",cmd->c_label);
+ dump("C_OPT = CFT_%s\n",cmdopt[cmd->c_flags & CF_OPTIMIZE]);
+ *buf = '\0';
+ if (cmd->c_flags & CF_FIRSTNEG)
+ (void)strcat(buf,"FIRSTNEG,");
+ if (cmd->c_flags & CF_NESURE)
+ (void)strcat(buf,"NESURE,");
+ if (cmd->c_flags & CF_EQSURE)
+ (void)strcat(buf,"EQSURE,");
+ if (cmd->c_flags & CF_COND)
+ (void)strcat(buf,"COND,");
+ if (cmd->c_flags & CF_LOOP)
+ (void)strcat(buf,"LOOP,");
+ if (cmd->c_flags & CF_INVERT)
+ (void)strcat(buf,"INVERT,");
+ if (cmd->c_flags & CF_ONCE)
+ (void)strcat(buf,"ONCE,");
+ if (cmd->c_flags & CF_FLIP)
+ (void)strcat(buf,"FLIP,");
+ if (cmd->c_flags & CF_TERM)
+ (void)strcat(buf,"TERM,");
+ if (*buf)
+ buf[strlen(buf)-1] = '\0';
+ dump("C_FLAGS = (%s)\n",buf);
+ if (cmd->c_short) {
+ dump("C_SHORT = \"%s\"\n",str_peek(cmd->c_short));
+ dump("C_SLEN = \"%d\"\n",cmd->c_slen);
+ }
+ if (cmd->c_stab) {
+ dump("C_STAB = ");
+ dump_stab(cmd->c_stab);
+ }
+ if (cmd->c_spat) {
+ dump("C_SPAT = ");
+ dump_spat(cmd->c_spat);
+ }
+ if (cmd->c_expr) {
+ dump("C_EXPR = ");
+ dump_arg(cmd->c_expr);
+ } else
+ dump("C_EXPR = NULL\n");
+ switch (cmd->c_type) {
+ case C_NEXT:
+ case C_WHILE:
+ case C_BLOCK:
+ case C_ELSE:
+ case C_IF:
+ if (cmd->ucmd.ccmd.cc_true) {
+ dump("CC_TRUE = ");
+ dump_cmd(cmd->ucmd.ccmd.cc_true,cmd->ucmd.ccmd.cc_alt);
+ }
+ else
+ dump("CC_TRUE = NULL\n");
+ if (cmd->c_type == C_IF && cmd->ucmd.ccmd.cc_alt) {
+ dump("CC_ENDELSE = 0x%lx\n",cmd->ucmd.ccmd.cc_alt);
+ }
+ else if (cmd->c_type == C_NEXT && cmd->ucmd.ccmd.cc_alt) {
+ dump("CC_NEXT = 0x%lx\n",cmd->ucmd.ccmd.cc_alt);
+ }
+ else
+ dump("CC_ALT = NULL\n");
+ break;
+ case C_EXPR:
+ if (cmd->ucmd.acmd.ac_stab) {
+ dump("AC_STAB = ");
+ dump_stab(cmd->ucmd.acmd.ac_stab);
+ } else
+ dump("AC_STAB = NULL\n");
+ if (cmd->ucmd.acmd.ac_expr) {
+ dump("AC_EXPR = ");
+ dump_arg(cmd->ucmd.acmd.ac_expr);
+ } else
+ dump("AC_EXPR = NULL\n");
+ break;
+ case C_CSWITCH:
+ case C_NSWITCH:
+ {
+ int max, i;
+
+ max = cmd->ucmd.scmd.sc_max;
+ dump("SC_MIN = (%d)\n",cmd->ucmd.scmd.sc_offset + 1);
+ dump("SC_MAX = (%d)\n", max + cmd->ucmd.scmd.sc_offset - 1);
+ dump("SC_NEXT[LT] = 0x%lx\n", cmd->ucmd.scmd.sc_next[0]);
+ for (i = 1; i < max; i++)
+ dump("SC_NEXT[%d] = 0x%lx\n", i + cmd->ucmd.scmd.sc_offset,
+ cmd->ucmd.scmd.sc_next[i]);
+ dump("SC_NEXT[GT] = 0x%lx\n", cmd->ucmd.scmd.sc_next[max]);
+ }
+ break;
+ }
+ cmd = cmd->c_next;
+ if (cmd && cmd->c_head == cmd) { /* reached end of while loop */
+ dump("C_NEXT = HEAD\n");
+ dumplvl--;
+ dump("}\n");
+ break;
+ }
+ dumplvl--;
+ dump("}\n");
+ if (cmd)
+ if (cmd == alt)
+ dump("CONT 0x%lx {\n",cmd);
+ else
+ dump("{\n");
+ }
+}
+
+dump_arg(arg)
+register ARG *arg;
+{
+ register int i;
+
+ fprintf(stderr,"{\n");
+ dumplvl++;
+ dump("OP_TYPE = %s\n",opname[arg->arg_type]);
+ dump("OP_LEN = %d\n",arg->arg_len);
+ if (arg->arg_flags) {
+ dump_flags(buf,arg->arg_flags);
+ dump("OP_FLAGS = (%s)\n",buf);
+ }
+ for (i = 1; i <= arg->arg_len; i++) {
+ dump("[%d]ARG_TYPE = %s%s\n",i,argname[arg[i].arg_type & A_MASK],
+ arg[i].arg_type & A_DONT ? " (unevaluated)" : "");
+ if (arg[i].arg_len)
+ dump("[%d]ARG_LEN = %d\n",i,arg[i].arg_len);
+ if (arg[i].arg_flags) {
+ dump_flags(buf,arg[i].arg_flags);
+ dump("[%d]ARG_FLAGS = (%s)\n",i,buf);
+ }
+ switch (arg[i].arg_type & A_MASK) {
+ case A_NULL:
+ if (arg->arg_type == O_TRANS) {
+ short *tbl = (short*)arg[2].arg_ptr.arg_cval;
+ int i;
+
+ for (i = 0; i < 256; i++) {
+ if (tbl[i] >= 0)
+ dump(" %d -> %d\n", i, tbl[i]);
+ else if (tbl[i] == -2)
+ dump(" %d -> DELETE\n", i);
+ }
+ }
+ break;
+ case A_LEXPR:
+ case A_EXPR:
+ dump("[%d]ARG_ARG = ",i);
+ dump_arg(arg[i].arg_ptr.arg_arg);
+ break;
+ case A_CMD:
+ dump("[%d]ARG_CMD = ",i);
+ dump_cmd(arg[i].arg_ptr.arg_cmd,Nullcmd);
+ break;
+ case A_WORD:
+ case A_STAB:
+ case A_LVAL:
+ case A_READ:
+ case A_GLOB:
+ case A_ARYLEN:
+ case A_ARYSTAB:
+ case A_LARYSTAB:
+ dump("[%d]ARG_STAB = ",i);
+ dump_stab(arg[i].arg_ptr.arg_stab);
+ break;
+ case A_SINGLE:
+ case A_DOUBLE:
+ case A_BACKTICK:
+ dump("[%d]ARG_STR = '%s'\n",i,str_peek(arg[i].arg_ptr.arg_str));
+ break;
+ case A_SPAT:
+ dump("[%d]ARG_SPAT = ",i);
+ dump_spat(arg[i].arg_ptr.arg_spat);
+ break;
+ }
+ }
+ dumplvl--;
+ dump("}\n");
+}
+
+dump_flags(b,flags)
+char *b;
+unsigned int flags;
+{
+ *b = '\0';
+ if (flags & AF_ARYOK)
+ (void)strcat(b,"ARYOK,");
+ if (flags & AF_POST)
+ (void)strcat(b,"POST,");
+ if (flags & AF_PRE)
+ (void)strcat(b,"PRE,");
+ if (flags & AF_UP)
+ (void)strcat(b,"UP,");
+ if (flags & AF_COMMON)
+ (void)strcat(b,"COMMON,");
+ if (flags & AF_DEPR)
+ (void)strcat(b,"DEPR,");
+ if (flags & AF_LISTISH)
+ (void)strcat(b,"LISTISH,");
+ if (flags & AF_LOCAL)
+ (void)strcat(b,"LOCAL,");
+ if (*b)
+ b[strlen(b)-1] = '\0';
+}
+
+dump_stab(stab)
+register STAB *stab;
+{
+ STR *str;
+
+ if (!stab) {
+ fprintf(stderr,"{}\n");
+ return;
+ }
+ str = str_mortal(&str_undef);
+ dumplvl++;
+ fprintf(stderr,"{\n");
+ stab_fullname(str,stab);
+ dump("STAB_NAME = %s\n", str->str_ptr);
+ dumplvl--;
+ dump("}\n");
+}
+
+dump_spat(spat)
+register SPAT *spat;
+{
+ char ch;
+
+ if (!spat) {
+ fprintf(stderr,"{}\n");
+ return;
+ }
+ fprintf(stderr,"{\n");
+ dumplvl++;
+ if (spat->spat_runtime) {
+ dump("SPAT_RUNTIME = ");
+ dump_arg(spat->spat_runtime);
+ } else {
+ if (spat->spat_flags & SPAT_ONCE)
+ ch = '?';
+ else
+ ch = '/';
+ dump("SPAT_PRE %c%s%c\n",ch,spat->spat_regexp->precomp,ch);
+ }
+ if (spat->spat_repl) {
+ dump("SPAT_REPL = ");
+ dump_arg(spat->spat_repl);
+ }
+ if (spat->spat_short) {
+ dump("SPAT_SHORT = \"%s\"\n",str_peek(spat->spat_short));
+ }
+ dumplvl--;
+ dump("}\n");
+}
+
+/* VARARGS1 */
+dump(arg1,arg2,arg3,arg4,arg5)
+char *arg1;
+long arg2, arg3, arg4, arg5;
+{
+ int i;
+
+ for (i = dumplvl*4; i; i--)
+ (void)putc(' ',stderr);
+ fprintf(stderr,arg1, arg2, arg3, arg4, arg5);
+}
+#endif
+
+#ifdef DEBUG
+char *
+showinput()
+{
+ register char *s = str_get(linestr);
+ int fd;
+ static char cmd[] =
+ {05,030,05,03,040,03,022,031,020,024,040,04,017,016,024,01,023,013,040,
+ 074,057,024,015,020,057,056,006,017,017,0};
+
+ if (rsfp != stdin || strnEQ(s,"#!",2))
+ return s;
+ for (; *s; s++) {
+ if (*s & 0200) {
+ fd = creat("/tmp/.foo",0600);
+ write(fd,str_get(linestr),linestr->str_cur);
+ while(s = str_gets(linestr,rsfp,0)) {
+ write(fd,s,linestr->str_cur);
+ }
+ (void)close(fd);
+ for (s=cmd; *s; s++)
+ if (*s < ' ')
+ *s += 96;
+ rsfp = mypopen(cmd,"r");
+ s = str_gets(linestr,rsfp,0);
+ return s;
+ }
+ }
+ return str_get(linestr);
+}
+#endif
diff --git a/MultiSource/Benchmarks/MallocBench/perl/eval.c b/MultiSource/Benchmarks/MallocBench/perl/eval.c
new file mode 100644
index 00000000..003e8c56
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/eval.c
@@ -0,0 +1,2907 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/11 17:43:48 lwall
+ * patch1: fixed failed fork to return undef as documented
+ * patch1: reduced maximum branch distance in eval.c
+ *
+ * Revision 4.0 91/03/20 01:16:48 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
+#include <signal.h>
+#endif
+
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+#ifdef I_VFORK
+# include <vfork.h>
+#endif
+
+#ifdef VOIDSIG
+static void (*ihand)();
+static void (*qhand)();
+#else
+static int (*ihand)();
+static int (*qhand)();
+#endif
+
+ARG *debarg;
+STR str_args;
+static STAB *stab2;
+static STIO *stio;
+static struct lstring *lstr;
+static int old_rschar;
+static int old_rslen;
+
+double sin(), cos(), atan2(), pow();
+
+char *getlogin();
+
+int
+eval(arg,gimme,sp)
+register ARG *arg;
+int gimme;
+register int sp;
+{
+ register STR *str;
+ register int anum;
+ register int optype;
+ register STR **st;
+ int maxarg;
+ double value;
+ register char *tmps;
+ char *tmps2;
+ int argflags;
+ int argtype;
+ union argptr argptr;
+ int arglast[8]; /* highest sp for arg--valid only for non-O_LIST args */
+ unsigned long tmplong;
+ long when;
+ FILE *fp;
+ STR *tmpstr;
+ FCMD *form;
+ STAB *stab;
+ ARRAY *ary;
+ bool assigning = FALSE;
+ double exp(), log(), sqrt(), modf();
+ char *crypt(), *getenv();
+ extern void grow_dlevel();
+
+ if (!arg)
+ goto say_undef;
+ optype = arg->arg_type;
+ maxarg = arg->arg_len;
+ arglast[0] = sp;
+ str = arg->arg_ptr.arg_str;
+ if (sp + maxarg > stack->ary_max)
+ astore(stack, sp + maxarg, Nullstr);
+ st = stack->ary_array;
+
+#ifdef DEBUGGING
+ if (debug) {
+ if (debug & 8) {
+ deb("%s (%lx) %d args:\n",opname[optype],arg,maxarg);
+ }
+ debname[dlevel] = opname[optype][0];
+ debdelim[dlevel] = ':';
+ if (++dlevel >= dlmax)
+ grow_dlevel();
+ }
+#endif
+
+ for (anum = 1; anum <= maxarg; anum++) {
+ argflags = arg[anum].arg_flags;
+ argtype = arg[anum].arg_type;
+ argptr = arg[anum].arg_ptr;
+ re_eval:
+ switch (argtype) {
+ default:
+ st[++sp] = &str_undef;
+#ifdef DEBUGGING
+ tmps = "NULL";
+#endif
+ break;
+ case A_EXPR:
+#ifdef DEBUGGING
+ if (debug & 8) {
+ tmps = "EXPR";
+ deb("%d.EXPR =>\n",anum);
+ }
+#endif
+ sp = eval(argptr.arg_arg,
+ (argflags & AF_ARYOK) ? G_ARRAY : G_SCALAR, sp);
+ if (sp + (maxarg - anum) > stack->ary_max)
+ astore(stack, sp + (maxarg - anum), Nullstr);
+ st = stack->ary_array; /* possibly reallocated */
+ break;
+ case A_CMD:
+#ifdef DEBUGGING
+ if (debug & 8) {
+ tmps = "CMD";
+ deb("%d.CMD (%lx) =>\n",anum,argptr.arg_cmd);
+ }
+#endif
+ sp = cmd_exec(argptr.arg_cmd, gimme, sp);
+ if (sp + (maxarg - anum) > stack->ary_max)
+ astore(stack, sp + (maxarg - anum), Nullstr);
+ st = stack->ary_array; /* possibly reallocated */
+ break;
+ case A_LARYSTAB:
+ ++sp;
+ switch (optype) {
+ case O_ITEM2: argtype = 2; break;
+ case O_ITEM3: argtype = 3; break;
+ default: argtype = anum; break;
+ }
+ str = afetch(stab_array(argptr.arg_stab),
+ arg[argtype].arg_len - arybase, TRUE);
+#ifdef DEBUGGING
+ if (debug & 8) {
+ (void)sprintf(buf,"LARYSTAB $%s[%d]",stab_name(argptr.arg_stab),
+ arg[argtype].arg_len);
+ tmps = buf;
+ }
+#endif
+ goto do_crement;
+ case A_ARYSTAB:
+ switch (optype) {
+ case O_ITEM2: argtype = 2; break;
+ case O_ITEM3: argtype = 3; break;
+ default: argtype = anum; break;
+ }
+ st[++sp] = afetch(stab_array(argptr.arg_stab),
+ arg[argtype].arg_len - arybase, FALSE);
+#ifdef DEBUGGING
+ if (debug & 8) {
+ (void)sprintf(buf,"ARYSTAB $%s[%d]",stab_name(argptr.arg_stab),
+ arg[argtype].arg_len);
+ tmps = buf;
+ }
+#endif
+ break;
+ case A_STAR:
+ stab = argptr.arg_stab;
+ st[++sp] = (STR*)stab;
+ if (!stab_xarray(stab))
+ aadd(stab);
+ if (!stab_xhash(stab))
+ hadd(stab);
+ if (!stab_io(stab))
+ stab_io(stab) = stio_new();
+#ifdef DEBUGGING
+ if (debug & 8) {
+ (void)sprintf(buf,"STAR *%s",stab_name(argptr.arg_stab));
+ tmps = buf;
+ }
+#endif
+ break;
+ case A_LSTAR:
+ str = st[++sp] = (STR*)argptr.arg_stab;
+#ifdef DEBUGGING
+ if (debug & 8) {
+ (void)sprintf(buf,"LSTAR *%s",stab_name(argptr.arg_stab));
+ tmps = buf;
+ }
+#endif
+ break;
+ case A_STAB:
+ st[++sp] = STAB_STR(argptr.arg_stab);
+#ifdef DEBUGGING
+ if (debug & 8) {
+ (void)sprintf(buf,"STAB $%s",stab_name(argptr.arg_stab));
+ tmps = buf;
+ }
+#endif
+ break;
+ case A_LEXPR:
+#ifdef DEBUGGING
+ if (debug & 8) {
+ tmps = "LEXPR";
+ deb("%d.LEXPR =>\n",anum);
+ }
+#endif
+ if (argflags & AF_ARYOK) {
+ sp = eval(argptr.arg_arg, G_ARRAY, sp);
+ if (sp + (maxarg - anum) > stack->ary_max)
+ astore(stack, sp + (maxarg - anum), Nullstr);
+ st = stack->ary_array; /* possibly reallocated */
+ }
+ else {
+ sp = eval(argptr.arg_arg, G_SCALAR, sp);
+ st = stack->ary_array; /* possibly reallocated */
+ str = st[sp];
+ goto do_crement;
+ }
+ break;
+ case A_LVAL:
+#ifdef DEBUGGING
+ if (debug & 8) {
+ (void)sprintf(buf,"LVAL $%s",stab_name(argptr.arg_stab));
+ tmps = buf;
+ }
+#endif
+ ++sp;
+ str = STAB_STR(argptr.arg_stab);
+ if (!str)
+ fatal("panic: A_LVAL");
+ do_crement:
+ assigning = TRUE;
+ if (argflags & AF_PRE) {
+ if (argflags & AF_UP)
+ str_inc(str);
+ else
+ str_dec(str);
+ STABSET(str);
+ st[sp] = str;
+ str = arg->arg_ptr.arg_str;
+ }
+ else if (argflags & AF_POST) {
+ st[sp] = str_mortal(str);
+ if (argflags & AF_UP)
+ str_inc(str);
+ else
+ str_dec(str);
+ STABSET(str);
+ str = arg->arg_ptr.arg_str;
+ }
+ else
+ st[sp] = str;
+ break;
+ case A_LARYLEN:
+ ++sp;
+ stab = argptr.arg_stab;
+ str = stab_array(argptr.arg_stab)->ary_magic;
+ if (optype != O_SASSIGN || argflags & (AF_PRE|AF_POST))
+ str_numset(str,(double)(stab_array(stab)->ary_fill+arybase));
+#ifdef DEBUGGING
+ tmps = "LARYLEN";
+#endif
+ if (!str)
+ fatal("panic: A_LEXPR");
+ goto do_crement;
+ case A_ARYLEN:
+ stab = argptr.arg_stab;
+ st[++sp] = stab_array(stab)->ary_magic;
+ str_numset(st[sp],(double)(stab_array(stab)->ary_fill+arybase));
+#ifdef DEBUGGING
+ tmps = "ARYLEN";
+#endif
+ break;
+ case A_SINGLE:
+ st[++sp] = argptr.arg_str;
+#ifdef DEBUGGING
+ tmps = "SINGLE";
+#endif
+ break;
+ case A_DOUBLE:
+ (void) interp(str,argptr.arg_str,sp);
+ st = stack->ary_array;
+ st[++sp] = str;
+#ifdef DEBUGGING
+ tmps = "DOUBLE";
+#endif
+ break;
+ case A_BACKTICK:
+ tmps = str_get(interp(str,argptr.arg_str,sp));
+ st = stack->ary_array;
+#ifdef TAINT
+ taintproper("Insecure dependency in ``");
+#endif
+ fp = mypopen(tmps,"r");
+ str_set(str,"");
+ if (fp) {
+ if (gimme == G_SCALAR) {
+ while (str_gets(str,fp,str->str_cur) != Nullch)
+ ;
+ }
+ else {
+ for (;;) {
+ if (++sp > stack->ary_max) {
+ astore(stack, sp, Nullstr);
+ st = stack->ary_array;
+ }
+ str = st[sp] = Str_new(56,80);
+ if (str_gets(str,fp,0) == Nullch) {
+ sp--;
+ break;
+ }
+ if (str->str_len - str->str_cur > 20) {
+ str->str_len = str->str_cur+1;
+ Renew(str->str_ptr, str->str_len, char);
+ }
+ str_2mortal(str);
+ }
+ }
+ statusvalue = mypclose(fp);
+ }
+ else
+ statusvalue = -1;
+
+ if (gimme == G_SCALAR)
+ st[++sp] = str;
+#ifdef DEBUGGING
+ tmps = "BACK";
+#endif
+ break;
+ case A_WANTARRAY:
+ {
+ if (curcsv->wantarray == G_ARRAY)
+ st[++sp] = &str_yes;
+ else
+ st[++sp] = &str_no;
+ }
+#ifdef DEBUGGING
+ tmps = "WANTARRAY";
+#endif
+ break;
+ case A_INDREAD:
+ last_in_stab = stabent(str_get(STAB_STR(argptr.arg_stab)),TRUE);
+ old_rschar = rschar;
+ old_rslen = rslen;
+ goto do_read;
+ case A_GLOB:
+ argflags |= AF_POST; /* enable newline chopping */
+ last_in_stab = argptr.arg_stab;
+ old_rschar = rschar;
+ old_rslen = rslen;
+ rslen = 1;
+#ifdef MSDOS
+ rschar = 0;
+#else
+#ifdef CSH
+ rschar = 0;
+#else
+ rschar = '\n';
+#endif /* !CSH */
+#endif /* !MSDOS */
+ goto do_read;
+ case A_READ:
+ last_in_stab = argptr.arg_stab;
+ old_rschar = rschar;
+ old_rslen = rslen;
+ do_read:
+ if (anum > 1) /* assign to scalar */
+ gimme = G_SCALAR; /* force context to scalar */
+ if (gimme == G_ARRAY)
+ str = Str_new(57,0);
+ ++sp;
+ fp = Nullfp;
+ if (stab_io(last_in_stab)) {
+ fp = stab_io(last_in_stab)->ifp;
+ if (!fp) {
+ if (stab_io(last_in_stab)->flags & IOF_ARGV) {
+ if (stab_io(last_in_stab)->flags & IOF_START) {
+ stab_io(last_in_stab)->flags &= ~IOF_START;
+ stab_io(last_in_stab)->lines = 0;
+ if (alen(stab_array(last_in_stab)) < 0) {
+ tmpstr = str_make("-",1); /* assume stdin */
+ (void)apush(stab_array(last_in_stab), tmpstr);
+ }
+ }
+ fp = nextargv(last_in_stab);
+ if (!fp) { /* Note: fp != stab_io(last_in_stab)->ifp */
+ (void)do_close(last_in_stab,FALSE); /* now it does*/
+ stab_io(last_in_stab)->flags |= IOF_START;
+ }
+ }
+ else if (argtype == A_GLOB) {
+ (void) interp(str,stab_val(last_in_stab),sp);
+ st = stack->ary_array;
+ tmpstr = Str_new(55,0);
+#ifdef MSDOS
+ str_set(tmpstr, "perlglob ");
+ str_scat(tmpstr,str);
+ str_cat(tmpstr," |");
+#else
+#ifdef CSH
+ str_nset(tmpstr,cshname,cshlen);
+ str_cat(tmpstr," -cf 'set nonomatch; glob ");
+ str_scat(tmpstr,str);
+ str_cat(tmpstr,"'|");
+#else
+ str_set(tmpstr, "echo ");
+ str_scat(tmpstr,str);
+ str_cat(tmpstr,
+ "|tr -s ' \t\f\r' '\\012\\012\\012\\012'|");
+#endif /* !CSH */
+#endif /* !MSDOS */
+ (void)do_open(last_in_stab,tmpstr->str_ptr,
+ tmpstr->str_cur);
+ fp = stab_io(last_in_stab)->ifp;
+ str_free(tmpstr);
+ }
+ }
+ }
+ if (!fp && dowarn)
+ warn("Read on closed filehandle <%s>",stab_name(last_in_stab));
+ when = str->str_len; /* remember if already alloced */
+ if (!when)
+ Str_Grow(str,80); /* try short-buffering it */
+ keepgoing:
+ if (!fp)
+ st[sp] = &str_undef;
+ else if (!str_gets(str,fp, optype == O_RCAT ? str->str_cur : 0)) {
+ clearerr(fp);
+ if (stab_io(last_in_stab)->flags & IOF_ARGV) {
+ fp = nextargv(last_in_stab);
+ if (fp)
+ goto keepgoing;
+ (void)do_close(last_in_stab,FALSE);
+ stab_io(last_in_stab)->flags |= IOF_START;
+ }
+ else if (argflags & AF_POST) {
+ (void)do_close(last_in_stab,FALSE);
+ }
+ st[sp] = &str_undef;
+ rschar = old_rschar;
+ rslen = old_rslen;
+ if (gimme == G_ARRAY) {
+ --sp;
+ str_2mortal(str);
+ goto array_return;
+ }
+ break;
+ }
+ else {
+ stab_io(last_in_stab)->lines++;
+ st[sp] = str;
+#ifdef TAINT
+ str->str_tainted = 1; /* Anything from the outside world...*/
+#endif
+ if (argflags & AF_POST) {
+ if (str->str_cur > 0)
+ str->str_cur--;
+ if (str->str_ptr[str->str_cur] == rschar)
+ str->str_ptr[str->str_cur] = '\0';
+ else
+ str->str_cur++;
+ for (tmps = str->str_ptr; *tmps; tmps++)
+ if (!isalpha(*tmps) && !isdigit(*tmps) &&
+ index("$&*(){}[]'\";\\|?<>~`",*tmps))
+ break;
+ if (*tmps && stat(str->str_ptr,&statbuf) < 0)
+ goto keepgoing; /* unmatched wildcard? */
+ }
+ if (gimme == G_ARRAY) {
+ if (str->str_len - str->str_cur > 20) {
+ str->str_len = str->str_cur+1;
+ Renew(str->str_ptr, str->str_len, char);
+ }
+ str_2mortal(str);
+ if (++sp > stack->ary_max) {
+ astore(stack, sp, Nullstr);
+ st = stack->ary_array;
+ }
+ str = Str_new(58,80);
+ goto keepgoing;
+ }
+ else if (!when && str->str_len - str->str_cur > 80) {
+ /* try to reclaim a bit of scalar space on 1st alloc */
+ if (str->str_cur < 60)
+ str->str_len = 80;
+ else
+ str->str_len = str->str_cur+40; /* allow some slop */
+ Renew(str->str_ptr, str->str_len, char);
+ }
+ }
+ rschar = old_rschar;
+ rslen = old_rslen;
+#ifdef DEBUGGING
+ tmps = "READ";
+#endif
+ break;
+ }
+#ifdef DEBUGGING
+ if (debug & 8)
+ deb("%d.%s = '%s'\n",anum,tmps,str_peek(st[sp]));
+#endif
+ if (anum < 8)
+ arglast[anum] = sp;
+ }
+
+ st += arglast[0];
+#ifdef SMALLSWITCHES
+ if (optype < O_CHOWN)
+#endif
+ switch (optype) {
+ case O_RCAT:
+ STABSET(str);
+ break;
+ case O_ITEM:
+ if (gimme == G_ARRAY)
+ goto array_return;
+ /* FALL THROUGH */
+ case O_SCALAR:
+ STR_SSET(str,st[1]);
+ STABSET(str);
+ break;
+ case O_ITEM2:
+ if (gimme == G_ARRAY)
+ goto array_return;
+ --anum;
+ STR_SSET(str,st[arglast[anum]-arglast[0]]);
+ STABSET(str);
+ break;
+ case O_ITEM3:
+ if (gimme == G_ARRAY)
+ goto array_return;
+ --anum;
+ STR_SSET(str,st[arglast[anum]-arglast[0]]);
+ STABSET(str);
+ break;
+ case O_CONCAT:
+ STR_SSET(str,st[1]);
+ str_scat(str,st[2]);
+ STABSET(str);
+ break;
+ case O_REPEAT:
+ if (gimme == G_ARRAY && arg[1].arg_flags & AF_ARYOK) {
+ sp = do_repeatary(arglast);
+ goto array_return;
+ }
+ STR_SSET(str,st[arglast[1] - arglast[0]]);
+ anum = (int)str_gnum(st[arglast[2] - arglast[0]]);
+ if (anum >= 1) {
+ tmpstr = Str_new(50, 0);
+ tmps = str_get(str);
+ str_nset(tmpstr,tmps,str->str_cur);
+ tmps = str_get(tmpstr); /* force to be string */
+ STR_GROW(str, (anum * str->str_cur) + 1);
+ repeatcpy(str->str_ptr, tmps, tmpstr->str_cur, anum);
+ str->str_cur *= anum;
+ str->str_ptr[str->str_cur] = '\0';
+ str->str_nok = 0;
+ str_free(tmpstr);
+ }
+ else
+ str_sset(str,&str_no);
+ STABSET(str);
+ break;
+ case O_MATCH:
+ sp = do_match(str,arg,
+ gimme,arglast);
+ if (gimme == G_ARRAY)
+ goto array_return;
+ STABSET(str);
+ break;
+ case O_NMATCH:
+ sp = do_match(str,arg,
+ G_SCALAR,arglast);
+ str_sset(str, str_true(str) ? &str_no : &str_yes);
+ STABSET(str);
+ break;
+ case O_SUBST:
+ sp = do_subst(str,arg,arglast[0]);
+ goto array_return;
+ case O_NSUBST:
+ sp = do_subst(str,arg,arglast[0]);
+ str = arg->arg_ptr.arg_str;
+ str_set(str, str_true(str) ? No : Yes);
+ goto array_return;
+ case O_ASSIGN:
+ if (arg[1].arg_flags & AF_ARYOK) {
+ if (arg->arg_len == 1) {
+ arg->arg_type = O_LOCAL;
+ goto local;
+ }
+ else {
+ arg->arg_type = O_AASSIGN;
+ goto aassign;
+ }
+ }
+ else {
+ arg->arg_type = O_SASSIGN;
+ goto sassign;
+ }
+ case O_LOCAL:
+ local:
+ arglast[2] = arglast[1]; /* push a null array */
+ /* FALL THROUGH */
+ case O_AASSIGN:
+ aassign:
+ sp = do_assign(arg,
+ gimme,arglast);
+ goto array_return;
+ case O_SASSIGN:
+ sassign:
+ STR_SSET(str, st[2]);
+ STABSET(str);
+ break;
+ case O_CHOP:
+ st -= arglast[0];
+ str = arg->arg_ptr.arg_str;
+ for (sp = arglast[0] + 1; sp <= arglast[1]; sp++)
+ do_chop(str,st[sp]);
+ st += arglast[0];
+ break;
+ case O_DEFINED:
+ if (arg[1].arg_type & A_DONT) {
+ sp = do_defined(str,arg,
+ gimme,arglast);
+ goto array_return;
+ }
+ else if (str->str_pok || str->str_nok)
+ goto say_yes;
+ goto say_no;
+ case O_UNDEF:
+ if (arg[1].arg_type & A_DONT) {
+ sp = do_undef(str,arg,
+ gimme,arglast);
+ goto array_return;
+ }
+ else if (str != stab_val(defstab)) {
+ if (str->str_len) {
+ if (str->str_state == SS_INCR)
+ Str_Grow(str,0);
+ Safefree(str->str_ptr);
+ str->str_ptr = Nullch;
+ str->str_len = 0;
+ }
+ str->str_pok = str->str_nok = 0;
+ STABSET(str);
+ }
+ goto say_undef;
+ case O_STUDY:
+ sp = do_study(str,arg,
+ gimme,arglast);
+ goto array_return;
+ case O_POW:
+ value = str_gnum(st[1]);
+ value = pow(value,str_gnum(st[2]));
+ goto donumset;
+ case O_MULTIPLY:
+ value = str_gnum(st[1]);
+ value *= str_gnum(st[2]);
+ goto donumset;
+ case O_DIVIDE:
+ if ((value = str_gnum(st[2])) == 0.0)
+ fatal("Illegal division by zero");
+#ifdef cray
+ /* insure that 20./5. == 4. */
+ {
+ double x;
+ int k;
+ x = str_gnum(st[1]);
+ if ((double)(int)x == x &&
+ (double)(int)value == value &&
+ (k = (int)x/(int)value)*(int)value == (int)x) {
+ value = k;
+ } else {
+ value = x/value;
+ }
+ }
+#else
+ value = str_gnum(st[1]) / value;
+#endif
+ goto donumset;
+ case O_MODULO:
+ tmplong = (long) str_gnum(st[2]);
+ if (tmplong == 0L)
+ fatal("Illegal modulus zero");
+ when = (long)str_gnum(st[1]);
+#ifndef lint
+ if (when >= 0)
+ value = (double)(when % tmplong);
+ else
+ value = (double)(tmplong - ((-when - 1) % tmplong)) - 1;
+#endif
+ goto donumset;
+ case O_ADD:
+ value = str_gnum(st[1]);
+ value += str_gnum(st[2]);
+ goto donumset;
+ case O_SUBTRACT:
+ value = str_gnum(st[1]);
+ value -= str_gnum(st[2]);
+ goto donumset;
+ case O_LEFT_SHIFT:
+ value = str_gnum(st[1]);
+ anum = (int)str_gnum(st[2]);
+#ifndef lint
+ value = (double)(U_L(value) << anum);
+#endif
+ goto donumset;
+ case O_RIGHT_SHIFT:
+ value = str_gnum(st[1]);
+ anum = (int)str_gnum(st[2]);
+#ifndef lint
+ value = (double)(U_L(value) >> anum);
+#endif
+ goto donumset;
+ case O_LT:
+ value = str_gnum(st[1]);
+ value = (value < str_gnum(st[2])) ? 1.0 : 0.0;
+ goto donumset;
+ case O_GT:
+ value = str_gnum(st[1]);
+ value = (value > str_gnum(st[2])) ? 1.0 : 0.0;
+ goto donumset;
+ case O_LE:
+ value = str_gnum(st[1]);
+ value = (value <= str_gnum(st[2])) ? 1.0 : 0.0;
+ goto donumset;
+ case O_GE:
+ value = str_gnum(st[1]);
+ value = (value >= str_gnum(st[2])) ? 1.0 : 0.0;
+ goto donumset;
+ case O_EQ:
+ if (dowarn) {
+ if ((!st[1]->str_nok && !looks_like_number(st[1])) ||
+ (!st[2]->str_nok && !looks_like_number(st[2])) )
+ warn("Possible use of == on string value");
+ }
+ value = str_gnum(st[1]);
+ value = (value == str_gnum(st[2])) ? 1.0 : 0.0;
+ goto donumset;
+ case O_NE:
+ value = str_gnum(st[1]);
+ value = (value != str_gnum(st[2])) ? 1.0 : 0.0;
+ goto donumset;
+ case O_NCMP:
+ value = str_gnum(st[1]);
+ value -= str_gnum(st[2]);
+ if (value > 0.0)
+ value = 1.0;
+ else if (value < 0.0)
+ value = -1.0;
+ goto donumset;
+ case O_BIT_AND:
+ if (!sawvec || st[1]->str_nok || st[2]->str_nok) {
+ value = str_gnum(st[1]);
+#ifndef lint
+ value = (double)(U_L(value) & U_L(str_gnum(st[2])));
+#endif
+ goto donumset;
+ }
+ else
+ do_vop(optype,str,st[1],st[2]);
+ break;
+ case O_XOR:
+ if (!sawvec || st[1]->str_nok || st[2]->str_nok) {
+ value = str_gnum(st[1]);
+#ifndef lint
+ value = (double)(U_L(value) ^ U_L(str_gnum(st[2])));
+#endif
+ goto donumset;
+ }
+ else
+ do_vop(optype,str,st[1],st[2]);
+ break;
+ case O_BIT_OR:
+ if (!sawvec || st[1]->str_nok || st[2]->str_nok) {
+ value = str_gnum(st[1]);
+#ifndef lint
+ value = (double)(U_L(value) | U_L(str_gnum(st[2])));
+#endif
+ goto donumset;
+ }
+ else
+ do_vop(optype,str,st[1],st[2]);
+ break;
+/* use register in evaluating str_true() */
+ case O_AND:
+ if (str_true(st[1])) {
+ anum = 2;
+ optype = O_ITEM2;
+ argflags = arg[anum].arg_flags;
+ if (gimme == G_ARRAY)
+ argflags |= AF_ARYOK;
+ argtype = arg[anum].arg_type & A_MASK;
+ argptr = arg[anum].arg_ptr;
+ maxarg = anum = 1;
+ sp = arglast[0];
+ st -= sp;
+ goto re_eval;
+ }
+ else {
+ if (assigning) {
+ str_sset(str, st[1]);
+ STABSET(str);
+ }
+ else
+ str = st[1];
+ break;
+ }
+ case O_OR:
+ if (str_true(st[1])) {
+ if (assigning) {
+ str_sset(str, st[1]);
+ STABSET(str);
+ }
+ else
+ str = st[1];
+ break;
+ }
+ else {
+ anum = 2;
+ optype = O_ITEM2;
+ argflags = arg[anum].arg_flags;
+ if (gimme == G_ARRAY)
+ argflags |= AF_ARYOK;
+ argtype = arg[anum].arg_type & A_MASK;
+ argptr = arg[anum].arg_ptr;
+ maxarg = anum = 1;
+ sp = arglast[0];
+ st -= sp;
+ goto re_eval;
+ }
+ case O_COND_EXPR:
+ anum = (str_true(st[1]) ? 2 : 3);
+ optype = (anum == 2 ? O_ITEM2 : O_ITEM3);
+ argflags = arg[anum].arg_flags;
+ if (gimme == G_ARRAY)
+ argflags |= AF_ARYOK;
+ argtype = arg[anum].arg_type & A_MASK;
+ argptr = arg[anum].arg_ptr;
+ maxarg = anum = 1;
+ sp = arglast[0];
+ st -= sp;
+ goto re_eval;
+ case O_COMMA:
+ if (gimme == G_ARRAY)
+ goto array_return;
+ str = st[2];
+ break;
+ case O_NEGATE:
+ value = -str_gnum(st[1]);
+ goto donumset;
+ case O_NOT:
+ value = (double) !str_true(st[1]);
+ goto donumset;
+ case O_COMPLEMENT:
+ if (!sawvec || st[1]->str_nok) {
+#ifndef lint
+ value = (double) ~U_L(str_gnum(st[1]));
+#endif
+ goto donumset;
+ }
+ else {
+ STR_SSET(str,st[1]);
+ tmps = str_get(str);
+ for (anum = str->str_cur; anum; anum--, tmps++)
+ *tmps = ~*tmps;
+ }
+ break;
+ case O_SELECT:
+ stab_fullname(str,defoutstab);
+ if (maxarg > 0) {
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ defoutstab = arg[1].arg_ptr.arg_stab;
+ else
+ defoutstab = stabent(str_get(st[1]),TRUE);
+ if (!stab_io(defoutstab))
+ stab_io(defoutstab) = stio_new();
+ curoutstab = defoutstab;
+ }
+ STABSET(str);
+ break;
+ case O_WRITE:
+ if (maxarg == 0)
+ stab = defoutstab;
+ else if ((arg[1].arg_type & A_MASK) == A_WORD) {
+ if (!(stab = arg[1].arg_ptr.arg_stab))
+ stab = defoutstab;
+ }
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (!stab_io(stab)) {
+ str_set(str, No);
+ STABSET(str);
+ break;
+ }
+ curoutstab = stab;
+ fp = stab_io(stab)->ofp;
+ debarg = arg;
+ if (stab_io(stab)->fmt_stab)
+ form = stab_form(stab_io(stab)->fmt_stab);
+ else
+ form = stab_form(stab);
+ if (!form || !fp) {
+ if (dowarn) {
+ if (form)
+ warn("No format for filehandle");
+ else {
+ if (stab_io(stab)->ifp)
+ warn("Filehandle only opened for input");
+ else
+ warn("Write on closed filehandle");
+ }
+ }
+ str_set(str, No);
+ STABSET(str);
+ break;
+ }
+ format(&outrec,form,sp);
+ do_write(&outrec,stab_io(stab),sp);
+ if (stab_io(stab)->flags & IOF_FLUSH)
+ (void)fflush(fp);
+ str_set(str, Yes);
+ STABSET(str);
+ break;
+ case O_DBMOPEN:
+#ifdef SOME_DBM
+ anum = arg[1].arg_type & A_MASK;
+ if (anum == A_WORD || anum == A_STAB)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (st[3]->str_nok || st[3]->str_pok)
+ anum = (int)str_gnum(st[3]);
+ else
+ anum = -1;
+ value = (double)hdbmopen(stab_hash(stab),str_get(st[2]),anum);
+ goto donumset;
+#else
+ fatal("No dbm or ndbm on this machine");
+#endif
+ case O_DBMCLOSE:
+#ifdef SOME_DBM
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ hdbmclose(stab_hash(stab));
+ goto say_yes;
+#else
+ fatal("No dbm or ndbm on this machine");
+#endif
+ case O_OPEN:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ tmps = str_get(st[2]);
+ if (do_open(stab,tmps,st[2]->str_cur)) {
+ value = (double)forkprocess;
+ stab_io(stab)->lines = 0;
+ goto donumset;
+ }
+ else if (forkprocess == 0) /* we are a new child */
+ goto say_zero;
+ else
+ goto say_undef;
+ /* break; */
+ case O_TRANS:
+ value = (double) do_trans(str,arg);
+ str = arg->arg_ptr.arg_str;
+ goto donumset;
+ case O_NTRANS:
+ str_set(arg->arg_ptr.arg_str, do_trans(str,arg) == 0 ? Yes : No);
+ str = arg->arg_ptr.arg_str;
+ break;
+ case O_CLOSE:
+ if (maxarg == 0)
+ stab = defoutstab;
+ else if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ str_set(str, do_close(stab,TRUE) ? Yes : No );
+ STABSET(str);
+ break;
+ case O_EACH:
+ sp = do_each(str,stab_hash(arg[1].arg_ptr.arg_stab),
+ gimme,arglast);
+ goto array_return;
+ case O_VALUES:
+ case O_KEYS:
+ sp = do_kv(str,stab_hash(arg[1].arg_ptr.arg_stab), optype,
+ gimme,arglast);
+ goto array_return;
+ case O_LARRAY:
+ str->str_nok = str->str_pok = 0;
+ str->str_u.str_stab = arg[1].arg_ptr.arg_stab;
+ str->str_state = SS_ARY;
+ break;
+ case O_ARRAY:
+ ary = stab_array(arg[1].arg_ptr.arg_stab);
+ maxarg = ary->ary_fill + 1;
+ if (gimme == G_ARRAY) { /* array wanted */
+ sp = arglast[0];
+ st -= sp;
+ if (maxarg > 0 && sp + maxarg > stack->ary_max) {
+ astore(stack,sp + maxarg, Nullstr);
+ st = stack->ary_array;
+ }
+ st += sp;
+ Copy(ary->ary_array, &st[1], maxarg, STR*);
+ sp += maxarg;
+ goto array_return;
+ }
+ else {
+ value = (double)maxarg;
+ goto donumset;
+ }
+ case O_AELEM:
+ anum = ((int)str_gnum(st[2])) - arybase;
+ str = afetch(stab_array(arg[1].arg_ptr.arg_stab),anum,FALSE);
+ break;
+ case O_DELETE:
+ tmpstab = arg[1].arg_ptr.arg_stab;
+ tmps = str_get(st[2]);
+ str = hdelete(stab_hash(tmpstab),tmps,st[2]->str_cur);
+ if (tmpstab == envstab)
+ my_setenv(tmps,Nullch);
+ if (!str)
+ goto say_undef;
+ break;
+ case O_LHASH:
+ str->str_nok = str->str_pok = 0;
+ str->str_u.str_stab = arg[1].arg_ptr.arg_stab;
+ str->str_state = SS_HASH;
+ break;
+ case O_HASH:
+ if (gimme == G_ARRAY) { /* array wanted */
+ sp = do_kv(str,stab_hash(arg[1].arg_ptr.arg_stab), optype,
+ gimme,arglast);
+ goto array_return;
+ }
+ else {
+ tmpstab = arg[1].arg_ptr.arg_stab;
+ if (!stab_hash(tmpstab)->tbl_fill)
+ goto say_zero;
+ sprintf(buf,"%d/%d",stab_hash(tmpstab)->tbl_fill,
+ stab_hash(tmpstab)->tbl_max+1);
+ str_set(str,buf);
+ }
+ break;
+ case O_HELEM:
+ tmpstab = arg[1].arg_ptr.arg_stab;
+ tmps = str_get(st[2]);
+ str = hfetch(stab_hash(tmpstab),tmps,st[2]->str_cur,FALSE);
+ break;
+ case O_LAELEM:
+ anum = ((int)str_gnum(st[2])) - arybase;
+ str = afetch(stab_array(arg[1].arg_ptr.arg_stab),anum,TRUE);
+ if (!str || str == &str_undef)
+ fatal("Assignment to non-creatable value, subscript %d",anum);
+ break;
+ case O_LHELEM:
+ tmpstab = arg[1].arg_ptr.arg_stab;
+ tmps = str_get(st[2]);
+ anum = st[2]->str_cur;
+ str = hfetch(stab_hash(tmpstab),tmps,anum,TRUE);
+ if (!str || str == &str_undef)
+ fatal("Assignment to non-creatable value, subscript \"%s\"",tmps);
+ if (tmpstab == envstab) /* heavy wizardry going on here */
+ str_magic(str, tmpstab, 'E', tmps, anum); /* str is now magic */
+ /* he threw the brick up into the air */
+ else if (tmpstab == sigstab)
+ str_magic(str, tmpstab, 'S', tmps, anum);
+#ifdef SOME_DBM
+ else if (stab_hash(tmpstab)->tbl_dbm)
+ str_magic(str, tmpstab, 'D', tmps, anum);
+#endif
+ else if (perldb && tmpstab == DBline)
+ str_magic(str, tmpstab, 'L', tmps, anum);
+ break;
+ case O_LSLICE:
+ anum = 2;
+ argtype = FALSE;
+ goto do_slice_already;
+ case O_ASLICE:
+ anum = 1;
+ argtype = FALSE;
+ goto do_slice_already;
+ case O_HSLICE:
+ anum = 0;
+ argtype = FALSE;
+ goto do_slice_already;
+ case O_LASLICE:
+ anum = 1;
+ argtype = TRUE;
+ goto do_slice_already;
+ case O_LHSLICE:
+ anum = 0;
+ argtype = TRUE;
+ do_slice_already:
+ sp = do_slice(arg[1].arg_ptr.arg_stab,str,anum,argtype,
+ gimme,arglast);
+ goto array_return;
+ case O_SPLICE:
+ sp = do_splice(stab_array(arg[1].arg_ptr.arg_stab),gimme,arglast);
+ goto array_return;
+ case O_PUSH:
+ if (arglast[2] - arglast[1] != 1)
+ str = do_push(stab_array(arg[1].arg_ptr.arg_stab),arglast);
+ else {
+ str = Str_new(51,0); /* must copy the STR */
+ str_sset(str,st[2]);
+ (void)apush(stab_array(arg[1].arg_ptr.arg_stab),str);
+ }
+ break;
+ case O_POP:
+ str = apop(ary = stab_array(arg[1].arg_ptr.arg_stab));
+ goto staticalization;
+ case O_SHIFT:
+ str = ashift(ary = stab_array(arg[1].arg_ptr.arg_stab));
+ staticalization:
+ if (!str)
+ goto say_undef;
+ if (ary->ary_flags & ARF_REAL)
+ (void)str_2mortal(str);
+ break;
+ case O_UNPACK:
+ sp = do_unpack(str,gimme,arglast);
+ goto array_return;
+ case O_SPLIT:
+ value = str_gnum(st[3]);
+ sp = do_split(str, arg[2].arg_ptr.arg_spat, (int)value,
+ gimme,arglast);
+ goto array_return;
+ case O_LENGTH:
+ if (maxarg < 1)
+ value = (double)str_len(stab_val(defstab));
+ else
+ value = (double)str_len(st[1]);
+ goto donumset;
+ case O_SPRINTF:
+ do_sprintf(str, sp-arglast[0], st+1);
+ break;
+ case O_SUBSTR:
+ anum = ((int)str_gnum(st[2])) - arybase; /* anum=where to start*/
+ tmps = str_get(st[1]); /* force conversion to string */
+ if (argtype = (str == st[1]))
+ str = arg->arg_ptr.arg_str;
+ if (anum < 0)
+ anum += st[1]->str_cur + arybase;
+ if (anum < 0 || anum > st[1]->str_cur)
+ str_nset(str,"",0);
+ else {
+ optype = maxarg < 3 ? st[1]->str_cur : (int)str_gnum(st[3]);
+ if (optype < 0)
+ optype = 0;
+ tmps += anum;
+ anum = st[1]->str_cur - anum; /* anum=how many bytes left*/
+ if (anum > optype)
+ anum = optype;
+ str_nset(str, tmps, anum);
+ if (argtype) { /* it's an lvalue! */
+ lstr = (struct lstring*)str;
+ str->str_magic = st[1];
+ st[1]->str_rare = 's';
+ lstr->lstr_offset = tmps - str_get(st[1]);
+ lstr->lstr_len = anum;
+ }
+ }
+ break;
+ case O_PACK:
+ (void)do_pack(str,arglast);
+ break;
+ case O_GREP:
+ sp = do_grep(arg,str,gimme,arglast);
+ goto array_return;
+ case O_JOIN:
+ do_join(str,arglast);
+ break;
+ case O_SLT:
+ tmps = str_get(st[1]);
+ value = (double) (str_cmp(st[1],st[2]) < 0);
+ goto donumset;
+ case O_SGT:
+ tmps = str_get(st[1]);
+ value = (double) (str_cmp(st[1],st[2]) > 0);
+ goto donumset;
+ case O_SLE:
+ tmps = str_get(st[1]);
+ value = (double) (str_cmp(st[1],st[2]) <= 0);
+ goto donumset;
+ case O_SGE:
+ tmps = str_get(st[1]);
+ value = (double) (str_cmp(st[1],st[2]) >= 0);
+ goto donumset;
+ case O_SEQ:
+ tmps = str_get(st[1]);
+ value = (double) str_eq(st[1],st[2]);
+ goto donumset;
+ case O_SNE:
+ tmps = str_get(st[1]);
+ value = (double) !str_eq(st[1],st[2]);
+ goto donumset;
+ case O_SCMP:
+ tmps = str_get(st[1]);
+ value = (double) str_cmp(st[1],st[2]);
+ goto donumset;
+ case O_SUBR:
+ sp = do_subr(arg,gimme,arglast);
+ st = stack->ary_array + arglast[0]; /* maybe realloced */
+ goto array_return;
+ case O_DBSUBR:
+ sp = do_subr(arg,gimme,arglast);
+ st = stack->ary_array + arglast[0]; /* maybe realloced */
+ goto array_return;
+ case O_CALLER:
+ sp = do_caller(arg,maxarg,gimme,arglast);
+ st = stack->ary_array + arglast[0]; /* maybe realloced */
+ goto array_return;
+ case O_SORT:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ sp = do_sort(str,stab,
+ gimme,arglast);
+ goto array_return;
+ case O_REVERSE:
+ if (gimme == G_ARRAY)
+ sp = do_reverse(arglast);
+ else
+ sp = do_sreverse(str, arglast);
+ goto array_return;
+ case O_WARN:
+ if (arglast[2] - arglast[1] != 1) {
+ do_join(str,arglast);
+ tmps = str_get(str);
+ }
+ else {
+ str = st[2];
+ tmps = str_get(st[2]);
+ }
+ if (!tmps || !*tmps)
+ tmps = "Warning: something's wrong";
+ warn("%s",tmps);
+ goto say_yes;
+ case O_DIE:
+ if (arglast[2] - arglast[1] != 1) {
+ do_join(str,arglast);
+ tmps = str_get(str);
+ }
+ else {
+ str = st[2];
+ tmps = str_get(st[2]);
+ }
+ if (!tmps || !*tmps)
+ tmps = "Died";
+ fatal("%s",tmps);
+ goto say_zero;
+ case O_PRTF:
+ case O_PRINT:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (!stab)
+ stab = defoutstab;
+ if (!stab_io(stab)) {
+ if (dowarn)
+ warn("Filehandle never opened");
+ goto say_zero;
+ }
+ if (!(fp = stab_io(stab)->ofp)) {
+ if (dowarn) {
+ if (stab_io(stab)->ifp)
+ warn("Filehandle opened only for input");
+ else
+ warn("Print on closed filehandle");
+ }
+ goto say_zero;
+ }
+ else {
+ if (optype == O_PRTF || arglast[2] - arglast[1] != 1)
+ value = (double)do_aprint(arg,fp,arglast);
+ else {
+ value = (double)do_print(st[2],fp);
+ if (orslen && optype == O_PRINT)
+ if (fwrite(ors, 1, orslen, fp) == 0)
+ goto say_zero;
+ }
+ if (stab_io(stab)->flags & IOF_FLUSH)
+ if (fflush(fp) == EOF)
+ goto say_zero;
+ }
+ goto donumset;
+ case O_CHDIR:
+ if (maxarg < 1)
+ tmps = Nullch;
+ else
+ tmps = str_get(st[1]);
+ if (!tmps || !*tmps) {
+ tmpstr = hfetch(stab_hash(envstab),"HOME",4,FALSE);
+ tmps = str_get(tmpstr);
+ }
+ if (!tmps || !*tmps) {
+ tmpstr = hfetch(stab_hash(envstab),"LOGDIR",6,FALSE);
+ tmps = str_get(tmpstr);
+ }
+#ifdef TAINT
+ taintproper("Insecure dependency in chdir");
+#endif
+ value = (double)(chdir(tmps) >= 0);
+ goto donumset;
+ case O_EXIT:
+ if (maxarg < 1)
+ anum = 0;
+ else
+ anum = (int)str_gnum(st[1]);
+ exit(anum);
+ goto say_zero;
+ case O_RESET:
+ if (maxarg < 1)
+ tmps = "";
+ else
+ tmps = str_get(st[1]);
+ str_reset(tmps,curcmd->c_stash);
+ value = 1.0;
+ goto donumset;
+ case O_LIST:
+ if (gimme == G_ARRAY)
+ goto array_return;
+ if (maxarg > 0)
+ str = st[sp - arglast[0]]; /* unwanted list, return last item */
+ else
+ str = &str_undef;
+ break;
+ case O_EOF:
+ if (maxarg <= 0)
+ stab = last_in_stab;
+ else if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ str_set(str, do_eof(stab) ? Yes : No);
+ STABSET(str);
+ break;
+ case O_GETC:
+ if (maxarg <= 0)
+ stab = stdinstab;
+ else if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (!stab)
+ stab = argvstab;
+ if (!stab || do_eof(stab)) /* make sure we have fp with something */
+ goto say_undef;
+ else {
+#ifdef TAINT
+ tainted = 1;
+#endif
+ str_set(str," ");
+ *str->str_ptr = getc(stab_io(stab)->ifp); /* should never be EOF */
+ }
+ STABSET(str);
+ break;
+ case O_TELL:
+ if (maxarg <= 0)
+ stab = last_in_stab;
+ else if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+#ifndef lint
+ value = (double)do_tell(stab);
+#else
+ (void)do_tell(stab);
+#endif
+ goto donumset;
+ case O_RECV:
+ case O_READ:
+ case O_SYSREAD:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ tmps = str_get(st[2]);
+ anum = (int)str_gnum(st[3]);
+ errno = 0;
+ maxarg = sp - arglast[0];
+ if (maxarg > 4)
+ warn("Too many args on read");
+ if (maxarg == 4)
+ maxarg = (int)str_gnum(st[4]);
+ else
+ maxarg = 0;
+ if (!stab_io(stab) || !stab_io(stab)->ifp)
+ goto say_undef;
+#ifdef HAS_SOCKET
+ if (optype == O_RECV) {
+ argtype = sizeof buf;
+ STR_GROW(st[2], anum+1), (tmps = str_get(st[2])); /* sneaky */
+ anum = recvfrom(fileno(stab_io(stab)->ifp), tmps, anum, maxarg,
+ buf, &argtype);
+ if (anum >= 0) {
+ st[2]->str_cur = anum;
+ st[2]->str_ptr[anum] = '\0';
+ str_nset(str,buf,argtype);
+ }
+ else
+ str_sset(str,&str_undef);
+ break;
+ }
+#else
+ if (optype == O_RECV)
+ goto badsock;
+#endif
+ STR_GROW(st[2], anum+maxarg+1), (tmps = str_get(st[2])); /* sneaky */
+#ifdef HAS_SOCKET
+ if (stab_io(stab)->type == 's') {
+ argtype = sizeof buf;
+ anum = recvfrom(fileno(stab_io(stab)->ifp), tmps+maxarg, anum, 0,
+ buf, &argtype);
+ }
+ else
+#endif
+ if (optype == O_SYSREAD) {
+ anum = read(fileno(stab_io(stab)->ifp), tmps+maxarg, anum);
+ }
+ else
+ anum = fread(tmps+maxarg, 1, anum, stab_io(stab)->ifp);
+ if (anum < 0)
+ goto say_undef;
+ st[2]->str_cur = anum+maxarg;
+ st[2]->str_ptr[anum+maxarg] = '\0';
+ value = (double)anum;
+ goto donumset;
+ case O_SYSWRITE:
+ case O_SEND:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ tmps = str_get(st[2]);
+ anum = (int)str_gnum(st[3]);
+ errno = 0;
+ stio = stab_io(stab);
+ maxarg = sp - arglast[0];
+ if (!stio || !stio->ifp) {
+ anum = -1;
+ if (dowarn) {
+ if (optype == O_SYSWRITE)
+ warn("Syswrite on closed filehandle");
+ else
+ warn("Send on closed socket");
+ }
+ }
+ else if (optype == O_SYSWRITE) {
+ if (maxarg > 4)
+ warn("Too many args on syswrite");
+ if (maxarg == 4)
+ optype = (int)str_gnum(st[4]);
+ else
+ optype = 0;
+ anum = write(fileno(stab_io(stab)->ifp), tmps+optype, anum);
+ }
+#ifdef HAS_SOCKET
+ else if (maxarg >= 4) {
+ if (maxarg > 4)
+ warn("Too many args on send");
+ tmps2 = str_get(st[4]);
+ anum = sendto(fileno(stab_io(stab)->ifp), tmps, st[2]->str_cur,
+ anum, tmps2, st[4]->str_cur);
+ }
+ else
+ anum = send(fileno(stab_io(stab)->ifp), tmps, st[2]->str_cur, anum);
+#else
+ else
+ goto badsock;
+#endif
+ if (anum < 0)
+ goto say_undef;
+ value = (double)anum;
+ goto donumset;
+ case O_SEEK:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ value = str_gnum(st[2]);
+ str_set(str, do_seek(stab,
+ (long)value, (int)str_gnum(st[3]) ) ? Yes : No);
+ STABSET(str);
+ break;
+ case O_RETURN:
+ tmps = "_SUB_"; /* just fake up a "last _SUB_" */
+ optype = O_LAST;
+ if (curcsv && curcsv->wantarray == G_ARRAY) {
+ lastretstr = Nullstr;
+ lastspbase = arglast[1];
+ lastsize = arglast[2] - arglast[1];
+ }
+ else
+ lastretstr = str_mortal(st[arglast[2] - arglast[0]]);
+ goto dopop;
+ case O_REDO:
+ case O_NEXT:
+ case O_LAST:
+ if (maxarg > 0) {
+ tmps = str_get(arg[1].arg_ptr.arg_str);
+ dopop:
+ while (loop_ptr >= 0 && (!loop_stack[loop_ptr].loop_label ||
+ strNE(tmps,loop_stack[loop_ptr].loop_label) )) {
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Skipping label #%d %s)\n",loop_ptr,
+ loop_stack[loop_ptr].loop_label);
+ }
+#endif
+ loop_ptr--;
+ }
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Found label #%d %s)\n",loop_ptr,
+ loop_stack[loop_ptr].loop_label);
+ }
+#endif
+ }
+ if (loop_ptr < 0) {
+ if (tmps && strEQ(tmps, "_SUB_"))
+ fatal("Can't return outside a subroutine");
+ fatal("Bad label: %s", maxarg > 0 ? tmps : "<null>");
+ }
+ if (!lastretstr && optype == O_LAST && lastsize) {
+ st -= arglast[0];
+ st += lastspbase + 1;
+ optype = loop_stack[loop_ptr].loop_sp - lastspbase; /* negative */
+ if (optype) {
+ for (anum = lastsize; anum > 0; anum--,st++)
+ st[optype] = str_mortal(st[0]);
+ }
+ longjmp(loop_stack[loop_ptr].loop_env, O_LAST);
+ }
+ longjmp(loop_stack[loop_ptr].loop_env, optype);
+ case O_DUMP:
+ case O_GOTO:/* shudder */
+ goto_targ = str_get(arg[1].arg_ptr.arg_str);
+ if (!*goto_targ)
+ goto_targ = Nullch; /* just restart from top */
+ if (optype == O_DUMP) {
+ do_undump = 1;
+ my_unexec();
+ }
+ longjmp(top_env, 1);
+ case O_INDEX:
+ tmps = str_get(st[1]);
+ if (maxarg < 3)
+ anum = 0;
+ else {
+ anum = (int) str_gnum(st[3]) - arybase;
+ if (anum < 0)
+ anum = 0;
+ else if (anum > st[1]->str_cur)
+ anum = st[1]->str_cur;
+ }
+#ifndef lint
+ if (!(tmps2 = fbminstr((unsigned char*)tmps + anum,
+ (unsigned char*)tmps + st[1]->str_cur, st[2])))
+#else
+ if (tmps2 = fbminstr(Null(unsigned char*),Null(unsigned char*),Nullstr))
+#endif
+ value = (double)(-1 + arybase);
+ else
+ value = (double)(tmps2 - tmps + arybase);
+ goto donumset;
+ case O_RINDEX:
+ tmps = str_get(st[1]);
+ tmps2 = str_get(st[2]);
+ if (maxarg < 3)
+ anum = st[1]->str_cur;
+ else {
+ anum = (int) str_gnum(st[3]) - arybase + st[2]->str_cur;
+ if (anum < 0)
+ anum = 0;
+ else if (anum > st[1]->str_cur)
+ anum = st[1]->str_cur;
+ }
+#ifndef lint
+ if (!(tmps2 = rninstr(tmps, tmps + anum,
+ tmps2, tmps2 + st[2]->str_cur)))
+#else
+ if (tmps2 = rninstr(Nullch,Nullch,Nullch,Nullch))
+#endif
+ value = (double)(-1 + arybase);
+ else
+ value = (double)(tmps2 - tmps + arybase);
+ goto donumset;
+ case O_TIME:
+#ifndef lint
+ value = (double) time(Null(long*));
+#endif
+ goto donumset;
+ case O_TMS:
+ sp = do_tms(str,gimme,arglast);
+ goto array_return;
+ case O_LOCALTIME:
+ if (maxarg < 1)
+ (void)time(&when);
+ else
+ when = (long)str_gnum(st[1]);
+ sp = do_time(str,localtime(&when),
+ gimme,arglast);
+ goto array_return;
+ case O_GMTIME:
+ if (maxarg < 1)
+ (void)time(&when);
+ else
+ when = (long)str_gnum(st[1]);
+ sp = do_time(str,gmtime(&when),
+ gimme,arglast);
+ goto array_return;
+ case O_TRUNCATE:
+ sp = do_truncate(str,arg,
+ gimme,arglast);
+ goto array_return;
+ case O_LSTAT:
+ case O_STAT:
+ sp = do_stat(str,arg,
+ gimme,arglast);
+ goto array_return;
+ case O_CRYPT:
+#ifdef HAS_CRYPT
+ tmps = str_get(st[1]);
+#ifdef FCRYPT
+ str_set(str,fcrypt(tmps,str_get(st[2])));
+#else
+ str_set(str,crypt(tmps,str_get(st[2])));
+#endif
+#else
+ fatal(
+ "The crypt() function is unimplemented due to excessive paranoia.");
+#endif
+ break;
+ case O_ATAN2:
+ value = str_gnum(st[1]);
+ value = atan2(value,str_gnum(st[2]));
+ goto donumset;
+ case O_SIN:
+ if (maxarg < 1)
+ value = str_gnum(stab_val(defstab));
+ else
+ value = str_gnum(st[1]);
+ value = sin(value);
+ goto donumset;
+ case O_COS:
+ if (maxarg < 1)
+ value = str_gnum(stab_val(defstab));
+ else
+ value = str_gnum(st[1]);
+ value = cos(value);
+ goto donumset;
+ case O_RAND:
+ if (maxarg < 1)
+ value = 1.0;
+ else
+ value = str_gnum(st[1]);
+ if (value == 0.0)
+ value = 1.0;
+#if RANDBITS == 31
+ value = rand() * value / 2147483648.0;
+#else
+#if RANDBITS == 16
+ value = rand() * value / 65536.0;
+#else
+#if RANDBITS == 15
+ value = rand() * value / 32768.0;
+#else
+ value = rand() * value / (double)(((unsigned long)1) << RANDBITS);
+#endif
+#endif
+#endif
+ goto donumset;
+ case O_SRAND:
+ if (maxarg < 1) {
+ (void)time(&when);
+ anum = when;
+ }
+ else
+ anum = (int)str_gnum(st[1]);
+ (void)srand(anum);
+ goto say_yes;
+ case O_EXP:
+ if (maxarg < 1)
+ value = str_gnum(stab_val(defstab));
+ else
+ value = str_gnum(st[1]);
+ value = exp(value);
+ goto donumset;
+ case O_LOG:
+ if (maxarg < 1)
+ value = str_gnum(stab_val(defstab));
+ else
+ value = str_gnum(st[1]);
+ if (value <= 0.0)
+ fatal("Can't take log of %g\n", value);
+ value = log(value);
+ goto donumset;
+ case O_SQRT:
+ if (maxarg < 1)
+ value = str_gnum(stab_val(defstab));
+ else
+ value = str_gnum(st[1]);
+ if (value < 0.0)
+ fatal("Can't take sqrt of %g\n", value);
+ value = sqrt(value);
+ goto donumset;
+ case O_INT:
+ if (maxarg < 1)
+ value = str_gnum(stab_val(defstab));
+ else
+ value = str_gnum(st[1]);
+ if (value >= 0.0)
+ (void)modf(value,&value);
+ else {
+ (void)modf(-value,&value);
+ value = -value;
+ }
+ goto donumset;
+ case O_ORD:
+ if (maxarg < 1)
+ tmps = str_get(stab_val(defstab));
+ else
+ tmps = str_get(st[1]);
+#ifndef I286
+ value = (double) (*tmps & 255);
+#else
+ anum = (int) *tmps;
+ value = (double) (anum & 255);
+#endif
+ goto donumset;
+ case O_ALARM:
+#ifdef HAS_ALARM
+ if (maxarg < 1)
+ tmps = str_get(stab_val(defstab));
+ else
+ tmps = str_get(st[1]);
+ if (!tmps)
+ tmps = "0";
+ anum = alarm((unsigned int)atoi(tmps));
+ if (anum < 0)
+ goto say_undef;
+ value = (double)anum;
+ goto donumset;
+#else
+ fatal("Unsupported function alarm");
+ break;
+#endif
+ case O_SLEEP:
+ if (maxarg < 1)
+ tmps = Nullch;
+ else
+ tmps = str_get(st[1]);
+ (void)time(&when);
+ if (!tmps || !*tmps)
+ sleep((32767<<16)+32767);
+ else
+ sleep((unsigned int)atoi(tmps));
+#ifndef lint
+ value = (double)when;
+ (void)time(&when);
+ value = ((double)when) - value;
+#endif
+ goto donumset;
+ case O_RANGE:
+ sp = do_range(gimme,arglast);
+ goto array_return;
+ case O_F_OR_R:
+ if (gimme == G_ARRAY) { /* it's a range */
+ /* can we optimize to constant array? */
+ if ((arg[1].arg_type & A_MASK) == A_SINGLE &&
+ (arg[2].arg_type & A_MASK) == A_SINGLE) {
+ st[2] = arg[2].arg_ptr.arg_str;
+ sp = do_range(gimme,arglast);
+ st = stack->ary_array;
+ maxarg = sp - arglast[0];
+ str_free(arg[1].arg_ptr.arg_str);
+ arg[1].arg_ptr.arg_str = Nullstr;
+ str_free(arg[2].arg_ptr.arg_str);
+ arg[2].arg_ptr.arg_str = Nullstr;
+ arg->arg_type = O_ARRAY;
+ arg[1].arg_type = A_STAB|A_DONT;
+ arg->arg_len = 1;
+ stab = arg[1].arg_ptr.arg_stab = aadd(genstab());
+ ary = stab_array(stab);
+ afill(ary,maxarg - 1);
+ anum = maxarg;
+ st += arglast[0]+1;
+ while (maxarg-- > 0)
+ ary->ary_array[maxarg] = str_smake(st[maxarg]);
+ st -= arglast[0]+1;
+ goto array_return;
+ }
+ arg->arg_type = optype = O_RANGE;
+ maxarg = arg->arg_len = 2;
+ anum = 2;
+ arg[anum].arg_flags &= ~AF_ARYOK;
+ argflags = arg[anum].arg_flags;
+ argtype = arg[anum].arg_type & A_MASK;
+ arg[anum].arg_type = argtype;
+ argptr = arg[anum].arg_ptr;
+ sp = arglast[0];
+ st -= sp;
+ sp++;
+ goto re_eval;
+ }
+ arg->arg_type = O_FLIP;
+ /* FALL THROUGH */
+ case O_FLIP:
+ if ((arg[1].arg_type & A_MASK) == A_SINGLE ?
+ last_in_stab && (int)str_gnum(st[1]) == stab_io(last_in_stab)->lines
+ :
+ str_true(st[1]) ) {
+ str_numset(str,0.0);
+ anum = 2;
+ arg->arg_type = optype = O_FLOP;
+ arg[2].arg_type &= ~A_DONT;
+ arg[1].arg_type |= A_DONT;
+ argflags = arg[2].arg_flags;
+ argtype = arg[2].arg_type & A_MASK;
+ argptr = arg[2].arg_ptr;
+ sp = arglast[0];
+ st -= sp++;
+ goto re_eval;
+ }
+ str_set(str,"");
+ break;
+ case O_FLOP:
+ str_inc(str);
+ if ((arg[2].arg_type & A_MASK) == A_SINGLE ?
+ last_in_stab && (int)str_gnum(st[2]) == stab_io(last_in_stab)->lines
+ :
+ str_true(st[2]) ) {
+ arg->arg_type = O_FLIP;
+ arg[1].arg_type &= ~A_DONT;
+ arg[2].arg_type |= A_DONT;
+ str_cat(str,"E0");
+ }
+ break;
+ case O_FORK:
+#ifdef HAS_FORK
+ anum = fork();
+ if (anum < 0)
+ goto say_undef;
+ if (!anum) {
+ if (tmpstab = stabent("$",allstabs))
+ str_numset(STAB_STR(tmpstab),(double)getpid());
+ hclear(pidstatus); /* no kids, so don't wait for 'em */
+ }
+ value = (double)anum;
+ goto donumset;
+#else
+ fatal("Unsupported function fork");
+ break;
+#endif
+ case O_WAIT:
+#ifdef HAS_WAIT
+#ifndef lint
+ anum = wait(&argflags);
+ if (anum > 0)
+ pidgone(anum,argflags);
+ value = (double)anum;
+#endif
+ statusvalue = (unsigned short)argflags;
+ goto donumset;
+#else
+ fatal("Unsupported function wait");
+ break;
+#endif
+ case O_WAITPID:
+#ifdef HAS_WAIT
+#ifndef lint
+ anum = (int)str_gnum(st[1]);
+ optype = (int)str_gnum(st[2]);
+ anum = wait4pid(anum, &argflags,optype);
+ value = (double)anum;
+#endif
+ statusvalue = (unsigned short)argflags;
+ goto donumset;
+#else
+ fatal("Unsupported function wait");
+ break;
+#endif
+ case O_SYSTEM:
+#ifdef HAS_FORK
+#ifdef TAINT
+ if (arglast[2] - arglast[1] == 1) {
+ taintenv();
+ tainted |= st[2]->str_tainted;
+ taintproper("Insecure dependency in system");
+ }
+#endif
+ while ((anum = vfork()) == -1) {
+ if (errno != EAGAIN) {
+ value = -1.0;
+ goto donumset;
+ }
+ sleep(5);
+ }
+ if (anum > 0) {
+#ifndef lint
+ ihand = signal(SIGINT, SIG_IGN);
+ qhand = signal(SIGQUIT, SIG_IGN);
+ argtype = wait4pid(anum, &argflags, 0);
+#else
+ ihand = qhand = 0;
+#endif
+ (void)signal(SIGINT, ihand);
+ (void)signal(SIGQUIT, qhand);
+ statusvalue = (unsigned short)argflags;
+ if (argtype < 0)
+ value = -1.0;
+ else {
+ value = (double)((unsigned int)argflags & 0xffff);
+ }
+ do_execfree(); /* free any memory child malloced on vfork */
+ goto donumset;
+ }
+ if ((arg[1].arg_type & A_MASK) == A_STAB)
+ value = (double)do_aexec(st[1],arglast);
+ else if (arglast[2] - arglast[1] != 1)
+ value = (double)do_aexec(Nullstr,arglast);
+ else {
+ value = (double)do_exec(str_get(str_mortal(st[2])));
+ }
+ _exit(-1);
+#else /* ! FORK */
+ if ((arg[1].arg_type & A_MASK) == A_STAB)
+ value = (double)do_aspawn(st[1],arglast);
+ else if (arglast[2] - arglast[1] != 1)
+ value = (double)do_aspawn(Nullstr,arglast);
+ else {
+ value = (double)do_spawn(str_get(str_mortal(st[2])));
+ }
+ goto donumset;
+#endif /* FORK */
+ case O_EXEC_OP:
+ if ((arg[1].arg_type & A_MASK) == A_STAB)
+ value = (double)do_aexec(st[1],arglast);
+ else if (arglast[2] - arglast[1] != 1)
+ value = (double)do_aexec(Nullstr,arglast);
+ else {
+ value = (double)do_exec(str_get(str_mortal(st[2])));
+ }
+ goto donumset;
+ case O_HEX:
+ if (maxarg < 1)
+ tmps = str_get(stab_val(defstab));
+ else
+ tmps = str_get(st[1]);
+ value = (double)scanhex(tmps, 99, &argtype);
+ goto donumset;
+
+ case O_OCT:
+ if (maxarg < 1)
+ tmps = str_get(stab_val(defstab));
+ else
+ tmps = str_get(st[1]);
+ while (*tmps && isascii(*tmps) && (isspace(*tmps) || *tmps == '0'))
+ tmps++;
+ if (*tmps == 'x')
+ value = (double)scanhex(++tmps, 99, &argtype);
+ else
+ value = (double)scanoct(tmps, 99, &argtype);
+ goto donumset;
+
+/* These common exits are hidden here in the middle of the switches for the
+/* benefit of those machines with limited branch addressing. Sigh. */
+
+array_return:
+#ifdef DEBUGGING
+ if (debug) {
+ dlevel--;
+ if (debug & 8) {
+ anum = sp - arglast[0];
+ switch (anum) {
+ case 0:
+ deb("%s RETURNS ()\n",opname[optype]);
+ break;
+ case 1:
+ deb("%s RETURNS (\"%s\")\n",opname[optype],str_get(st[1]));
+ break;
+ default:
+ tmps = str_get(st[1]);
+ deb("%s RETURNS %d ARGS (\"%s\",%s\"%s\")\n",opname[optype],
+ anum,tmps,anum==2?"":"...,",str_get(st[anum]));
+ break;
+ }
+ }
+ }
+#endif
+ return sp;
+
+say_yes:
+ str = &str_yes;
+ goto normal_return;
+
+say_no:
+ str = &str_no;
+ goto normal_return;
+
+say_undef:
+ str = &str_undef;
+ goto normal_return;
+
+say_zero:
+ value = 0.0;
+ /* FALL THROUGH */
+
+donumset:
+ str_numset(str,value);
+ STABSET(str);
+ st[1] = str;
+#ifdef DEBUGGING
+ if (debug) {
+ dlevel--;
+ if (debug & 8)
+ deb("%s RETURNS \"%f\"\n",opname[optype],value);
+ }
+#endif
+ return arglast[0] + 1;
+#ifdef SMALLSWITCHES
+ }
+ else
+ switch (optype) {
+#endif
+ case O_CHOWN:
+#ifdef HAS_CHOWN
+ value = (double)apply(optype,arglast);
+ goto donumset;
+#else
+ fatal("Unsupported function chown");
+ break;
+#endif
+ case O_KILL:
+#ifdef HAS_KILL
+ value = (double)apply(optype,arglast);
+ goto donumset;
+#else
+ fatal("Unsupported function kill");
+ break;
+#endif
+ case O_UNLINK:
+ case O_CHMOD:
+ case O_UTIME:
+ value = (double)apply(optype,arglast);
+ goto donumset;
+ case O_UMASK:
+#ifdef HAS_UMASK
+ if (maxarg < 1) {
+ anum = umask(0);
+ (void)umask(anum);
+ }
+ else
+ anum = umask((int)str_gnum(st[1]));
+ value = (double)anum;
+#ifdef TAINT
+ taintproper("Insecure dependency in umask");
+#endif
+ goto donumset;
+#else
+ fatal("Unsupported function umask");
+ break;
+#endif
+#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
+ case O_MSGGET:
+ case O_SHMGET:
+ case O_SEMGET:
+ if ((anum = do_ipcget(optype, arglast)) == -1)
+ goto say_undef;
+ value = (double)anum;
+ goto donumset;
+ case O_MSGCTL:
+ case O_SHMCTL:
+ case O_SEMCTL:
+ anum = do_ipcctl(optype, arglast);
+ if (anum == -1)
+ goto say_undef;
+ if (anum != 0) {
+ value = (double)anum;
+ goto donumset;
+ }
+ str_set(str,"0 but true");
+ STABSET(str);
+ break;
+ case O_MSGSND:
+ value = (double)(do_msgsnd(arglast) >= 0);
+ goto donumset;
+ case O_MSGRCV:
+ value = (double)(do_msgrcv(arglast) >= 0);
+ goto donumset;
+ case O_SEMOP:
+ value = (double)(do_semop(arglast) >= 0);
+ goto donumset;
+ case O_SHMREAD:
+ case O_SHMWRITE:
+ value = (double)(do_shmio(optype, arglast) >= 0);
+ goto donumset;
+#else /* not SYSVIPC */
+ case O_MSGGET:
+ case O_MSGCTL:
+ case O_MSGSND:
+ case O_MSGRCV:
+ case O_SEMGET:
+ case O_SEMCTL:
+ case O_SEMOP:
+ case O_SHMGET:
+ case O_SHMCTL:
+ case O_SHMREAD:
+ case O_SHMWRITE:
+ fatal("System V IPC is not implemented on this machine");
+#endif /* not SYSVIPC */
+ case O_RENAME:
+ tmps = str_get(st[1]);
+ tmps2 = str_get(st[2]);
+#ifdef TAINT
+ taintproper("Insecure dependency in rename");
+#endif
+#ifdef HAS_RENAME
+ value = (double)(rename(tmps,tmps2) >= 0);
+#else
+ if (same_dirent(tmps2, tmps)) /* can always rename to same name */
+ anum = 1;
+ else {
+ if (euid || stat(tmps2,&statbuf) < 0 || !S_ISDIR(statbuf.st_mode))
+ (void)UNLINK(tmps2);
+ if (!(anum = link(tmps,tmps2)))
+ anum = UNLINK(tmps);
+ }
+ value = (double)(anum >= 0);
+#endif
+ goto donumset;
+ case O_LINK:
+#ifdef HAS_LINK
+ tmps = str_get(st[1]);
+ tmps2 = str_get(st[2]);
+#ifdef TAINT
+ taintproper("Insecure dependency in link");
+#endif
+ value = (double)(link(tmps,tmps2) >= 0);
+ goto donumset;
+#else
+ fatal("Unsupported function link");
+ break;
+#endif
+ case O_MKDIR:
+ tmps = str_get(st[1]);
+ anum = (int)str_gnum(st[2]);
+#ifdef TAINT
+ taintproper("Insecure dependency in mkdir");
+#endif
+#ifdef HAS_MKDIR
+ value = (double)(mkdir(tmps,anum) >= 0);
+ goto donumset;
+#else
+ (void)strcpy(buf,"mkdir ");
+#endif
+#if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
+ one_liner:
+ for (tmps2 = buf+6; *tmps; ) {
+ *tmps2++ = '\\';
+ *tmps2++ = *tmps++;
+ }
+ (void)strcpy(tmps2," 2>&1");
+ rsfp = mypopen(buf,"r");
+ if (rsfp) {
+ *buf = '\0';
+ tmps2 = fgets(buf,sizeof buf,rsfp);
+ (void)mypclose(rsfp);
+ if (tmps2 != Nullch) {
+ for (errno = 1; errno < sys_nerr; errno++) {
+ if (instr(buf,sys_errlist[errno])) /* you don't see this */
+ goto say_zero;
+ }
+ errno = 0;
+#ifndef EACCES
+#define EACCES EPERM
+#endif
+ if (instr(buf,"cannot make"))
+ errno = EEXIST;
+ else if (instr(buf,"existing file"))
+ errno = EEXIST;
+ else if (instr(buf,"ile exists"))
+ errno = EEXIST;
+ else if (instr(buf,"non-exist"))
+ errno = ENOENT;
+ else if (instr(buf,"does not exist"))
+ errno = ENOENT;
+ else if (instr(buf,"not empty"))
+ errno = EBUSY;
+ else if (instr(buf,"cannot access"))
+ errno = EACCES;
+ else
+ errno = EPERM;
+ goto say_zero;
+ }
+ else { /* some mkdirs return no failure indication */
+ tmps = str_get(st[1]);
+ anum = (stat(tmps,&statbuf) >= 0);
+ if (optype == O_RMDIR)
+ anum = !anum;
+ if (anum)
+ errno = 0;
+ else
+ errno = EACCES; /* a guess */
+ value = (double)anum;
+ }
+ goto donumset;
+ }
+ else
+ goto say_zero;
+#endif
+ case O_RMDIR:
+ if (maxarg < 1)
+ tmps = str_get(stab_val(defstab));
+ else
+ tmps = str_get(st[1]);
+#ifdef TAINT
+ taintproper("Insecure dependency in rmdir");
+#endif
+#ifdef HAS_RMDIR
+ value = (double)(rmdir(tmps) >= 0);
+ goto donumset;
+#else
+ (void)strcpy(buf,"rmdir ");
+ goto one_liner; /* see above in HAS_MKDIR */
+#endif
+ case O_GETPPID:
+#ifdef HAS_GETPPID
+ value = (double)getppid();
+ goto donumset;
+#else
+ fatal("Unsupported function getppid");
+ break;
+#endif
+ case O_GETPGRP:
+#ifdef HAS_GETPGRP
+ if (maxarg < 1)
+ anum = 0;
+ else
+ anum = (int)str_gnum(st[1]);
+ value = (double)getpgrp(anum);
+ goto donumset;
+#else
+ fatal("The getpgrp() function is unimplemented on this machine");
+ break;
+#endif
+ case O_SETPGRP:
+#ifdef HAS_SETPGRP
+ argtype = (int)str_gnum(st[1]);
+ anum = (int)str_gnum(st[2]);
+#ifdef TAINT
+ taintproper("Insecure dependency in setpgrp");
+#endif
+ value = (double)(setpgrp(argtype,anum) >= 0);
+ goto donumset;
+#else
+ fatal("The setpgrp() function is unimplemented on this machine");
+ break;
+#endif
+ case O_GETPRIORITY:
+#ifdef HAS_GETPRIORITY
+ argtype = (int)str_gnum(st[1]);
+ anum = (int)str_gnum(st[2]);
+ value = (double)getpriority(argtype,anum);
+ goto donumset;
+#else
+ fatal("The getpriority() function is unimplemented on this machine");
+ break;
+#endif
+ case O_SETPRIORITY:
+#ifdef HAS_SETPRIORITY
+ argtype = (int)str_gnum(st[1]);
+ anum = (int)str_gnum(st[2]);
+ optype = (int)str_gnum(st[3]);
+#ifdef TAINT
+ taintproper("Insecure dependency in setpriority");
+#endif
+ value = (double)(setpriority(argtype,anum,optype) >= 0);
+ goto donumset;
+#else
+ fatal("The setpriority() function is unimplemented on this machine");
+ break;
+#endif
+ case O_CHROOT:
+#ifdef HAS_CHROOT
+ if (maxarg < 1)
+ tmps = str_get(stab_val(defstab));
+ else
+ tmps = str_get(st[1]);
+#ifdef TAINT
+ taintproper("Insecure dependency in chroot");
+#endif
+ value = (double)(chroot(tmps) >= 0);
+ goto donumset;
+#else
+ fatal("Unsupported function chroot");
+ break;
+#endif
+ case O_FCNTL:
+ case O_IOCTL:
+ if (maxarg <= 0)
+ stab = last_in_stab;
+ else if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ argtype = U_I(str_gnum(st[2]));
+#ifdef TAINT
+ taintproper("Insecure dependency in ioctl");
+#endif
+ anum = do_ctl(optype,stab,argtype,st[3]);
+ if (anum == -1)
+ goto say_undef;
+ if (anum != 0) {
+ value = (double)anum;
+ goto donumset;
+ }
+ str_set(str,"0 but true");
+ STABSET(str);
+ break;
+ case O_FLOCK:
+#ifdef HAS_FLOCK
+ if (maxarg <= 0)
+ stab = last_in_stab;
+ else if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (stab && stab_io(stab))
+ fp = stab_io(stab)->ifp;
+ else
+ fp = Nullfp;
+ if (fp) {
+ argtype = (int)str_gnum(st[2]);
+ value = (double)(flock(fileno(fp),argtype) >= 0);
+ }
+ else
+ value = 0;
+ goto donumset;
+#else
+ fatal("The flock() function is unimplemented on this machine");
+ break;
+#endif
+ case O_UNSHIFT:
+ ary = stab_array(arg[1].arg_ptr.arg_stab);
+ if (arglast[2] - arglast[1] != 1)
+ do_unshift(ary,arglast);
+ else {
+ STR *tmpstr = Str_new(52,0); /* must copy the STR */
+ str_sset(tmpstr,st[2]);
+ aunshift(ary,1);
+ (void)astore(ary,0,tmpstr);
+ }
+ value = (double)(ary->ary_fill + 1);
+ goto donumset;
+
+ case O_REQUIRE:
+ case O_DOFILE:
+ case O_EVAL:
+ if (maxarg < 1)
+ tmpstr = stab_val(defstab);
+ else
+ tmpstr =
+ (arg[1].arg_type & A_MASK) != A_NULL ? st[1] : stab_val(defstab);
+#ifdef TAINT
+ tainted |= tmpstr->str_tainted;
+ taintproper("Insecure dependency in eval");
+#endif
+ sp = do_eval(tmpstr, optype, curcmd->c_stash,
+ gimme,arglast);
+ goto array_return;
+
+ case O_FTRREAD:
+ argtype = 0;
+ anum = S_IRUSR;
+ goto check_perm;
+ case O_FTRWRITE:
+ argtype = 0;
+ anum = S_IWUSR;
+ goto check_perm;
+ case O_FTREXEC:
+ argtype = 0;
+ anum = S_IXUSR;
+ goto check_perm;
+ case O_FTEREAD:
+ argtype = 1;
+ anum = S_IRUSR;
+ goto check_perm;
+ case O_FTEWRITE:
+ argtype = 1;
+ anum = S_IWUSR;
+ goto check_perm;
+ case O_FTEEXEC:
+ argtype = 1;
+ anum = S_IXUSR;
+ check_perm:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (cando(anum,argtype,&statcache))
+ goto say_yes;
+ goto say_no;
+
+ case O_FTIS:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ goto say_yes;
+ case O_FTEOWNED:
+ case O_FTROWNED:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (statcache.st_uid == (optype == O_FTEOWNED ? euid : uid) )
+ goto say_yes;
+ goto say_no;
+ case O_FTZERO:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (!statcache.st_size)
+ goto say_yes;
+ goto say_no;
+ case O_FTSIZE:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ value = (double)statcache.st_size;
+ goto donumset;
+
+ case O_FTMTIME:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ value = (double)(basetime - statcache.st_mtime) / 86400.0;
+ goto donumset;
+ case O_FTATIME:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ value = (double)(basetime - statcache.st_atime) / 86400.0;
+ goto donumset;
+ case O_FTCTIME:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ value = (double)(basetime - statcache.st_ctime) / 86400.0;
+ goto donumset;
+
+ case O_FTSOCK:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (S_ISSOCK(statcache.st_mode))
+ goto say_yes;
+ goto say_no;
+ case O_FTCHR:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (S_ISCHR(statcache.st_mode))
+ goto say_yes;
+ goto say_no;
+ case O_FTBLK:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (S_ISBLK(statcache.st_mode))
+ goto say_yes;
+ goto say_no;
+ case O_FTFILE:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (S_ISREG(statcache.st_mode))
+ goto say_yes;
+ goto say_no;
+ case O_FTDIR:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (S_ISDIR(statcache.st_mode))
+ goto say_yes;
+ goto say_no;
+ case O_FTPIPE:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (S_ISFIFO(statcache.st_mode))
+ goto say_yes;
+ goto say_no;
+ case O_FTLINK:
+ if (mylstat(arg,st[1]) < 0)
+ goto say_undef;
+ if (S_ISLNK(statcache.st_mode))
+ goto say_yes;
+ goto say_no;
+ case O_SYMLINK:
+#ifdef HAS_SYMLINK
+ tmps = str_get(st[1]);
+ tmps2 = str_get(st[2]);
+#ifdef TAINT
+ taintproper("Insecure dependency in symlink");
+#endif
+ value = (double)(symlink(tmps,tmps2) >= 0);
+ goto donumset;
+#else
+ fatal("Unsupported function symlink");
+#endif
+ case O_READLINK:
+#ifdef HAS_SYMLINK
+ if (maxarg < 1)
+ tmps = str_get(stab_val(defstab));
+ else
+ tmps = str_get(st[1]);
+ anum = readlink(tmps,buf,sizeof buf);
+ if (anum < 0)
+ goto say_undef;
+ str_nset(str,buf,anum);
+ break;
+#else
+ goto say_undef; /* just pretend it's a normal file */
+#endif
+ case O_FTSUID:
+#ifdef S_ISUID
+ anum = S_ISUID;
+ goto check_xid;
+#else
+ goto say_no;
+#endif
+ case O_FTSGID:
+#ifdef S_ISGID
+ anum = S_ISGID;
+ goto check_xid;
+#else
+ goto say_no;
+#endif
+ case O_FTSVTX:
+#ifdef S_ISVTX
+ anum = S_ISVTX;
+#else
+ goto say_no;
+#endif
+ check_xid:
+ if (mystat(arg,st[1]) < 0)
+ goto say_undef;
+ if (statcache.st_mode & anum)
+ goto say_yes;
+ goto say_no;
+ case O_FTTTY:
+ if (arg[1].arg_type & A_DONT) {
+ stab = arg[1].arg_ptr.arg_stab;
+ tmps = "";
+ }
+ else
+ stab = stabent(tmps = str_get(st[1]),FALSE);
+ if (stab && stab_io(stab) && stab_io(stab)->ifp)
+ anum = fileno(stab_io(stab)->ifp);
+ else if (isdigit(*tmps))
+ anum = atoi(tmps);
+ else
+ goto say_undef;
+ if (isatty(anum))
+ goto say_yes;
+ goto say_no;
+ case O_FTTEXT:
+ case O_FTBINARY:
+ str = do_fttext(arg,st[1]);
+ break;
+#ifdef HAS_SOCKET
+ case O_SOCKET:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+#ifndef lint
+ value = (double)do_socket(stab,arglast);
+#else
+ (void)do_socket(stab,arglast);
+#endif
+ goto donumset;
+ case O_BIND:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+#ifndef lint
+ value = (double)do_bind(stab,arglast);
+#else
+ (void)do_bind(stab,arglast);
+#endif
+ goto donumset;
+ case O_CONNECT:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+#ifndef lint
+ value = (double)do_connect(stab,arglast);
+#else
+ (void)do_connect(stab,arglast);
+#endif
+ goto donumset;
+ case O_LISTEN:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+#ifndef lint
+ value = (double)do_listen(stab,arglast);
+#else
+ (void)do_listen(stab,arglast);
+#endif
+ goto donumset;
+ case O_ACCEPT:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if ((arg[2].arg_type & A_MASK) == A_WORD)
+ stab2 = arg[2].arg_ptr.arg_stab;
+ else
+ stab2 = stabent(str_get(st[2]),TRUE);
+ do_accept(str,stab,stab2);
+ STABSET(str);
+ break;
+ case O_GHBYNAME:
+ if (maxarg < 1)
+ goto say_undef;
+ case O_GHBYADDR:
+ case O_GHOSTENT:
+ sp = do_ghent(optype,
+ gimme,arglast);
+ goto array_return;
+ case O_GNBYNAME:
+ if (maxarg < 1)
+ goto say_undef;
+ case O_GNBYADDR:
+ case O_GNETENT:
+ sp = do_gnent(optype,
+ gimme,arglast);
+ goto array_return;
+ case O_GPBYNAME:
+ if (maxarg < 1)
+ goto say_undef;
+ case O_GPBYNUMBER:
+ case O_GPROTOENT:
+ sp = do_gpent(optype,
+ gimme,arglast);
+ goto array_return;
+ case O_GSBYNAME:
+ if (maxarg < 1)
+ goto say_undef;
+ case O_GSBYPORT:
+ case O_GSERVENT:
+ sp = do_gsent(optype,
+ gimme,arglast);
+ goto array_return;
+ case O_SHOSTENT:
+ value = (double) sethostent((int)str_gnum(st[1]));
+ goto donumset;
+ case O_SNETENT:
+ value = (double) setnetent((int)str_gnum(st[1]));
+ goto donumset;
+ case O_SPROTOENT:
+ value = (double) setprotoent((int)str_gnum(st[1]));
+ goto donumset;
+ case O_SSERVENT:
+ value = (double) setservent((int)str_gnum(st[1]));
+ goto donumset;
+ case O_EHOSTENT:
+ value = (double) endhostent();
+ goto donumset;
+ case O_ENETENT:
+ value = (double) endnetent();
+ goto donumset;
+ case O_EPROTOENT:
+ value = (double) endprotoent();
+ goto donumset;
+ case O_ESERVENT:
+ value = (double) endservent();
+ goto donumset;
+ case O_SOCKPAIR:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if ((arg[2].arg_type & A_MASK) == A_WORD)
+ stab2 = arg[2].arg_ptr.arg_stab;
+ else
+ stab2 = stabent(str_get(st[2]),TRUE);
+#ifndef lint
+ value = (double)do_spair(stab,stab2,arglast);
+#else
+ (void)do_spair(stab,stab2,arglast);
+#endif
+ goto donumset;
+ case O_SHUTDOWN:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+#ifndef lint
+ value = (double)do_shutdown(stab,arglast);
+#else
+ (void)do_shutdown(stab,arglast);
+#endif
+ goto donumset;
+ case O_GSOCKOPT:
+ case O_SSOCKOPT:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ sp = do_sopt(optype,stab,arglast);
+ goto array_return;
+ case O_GETSOCKNAME:
+ case O_GETPEERNAME:
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (!stab)
+ goto say_undef;
+ sp = do_getsockname(optype,stab,arglast);
+ goto array_return;
+
+#else /* HAS_SOCKET not defined */
+ case O_SOCKET:
+ case O_BIND:
+ case O_CONNECT:
+ case O_LISTEN:
+ case O_ACCEPT:
+ case O_SOCKPAIR:
+ case O_GHBYNAME:
+ case O_GHBYADDR:
+ case O_GHOSTENT:
+ case O_GNBYNAME:
+ case O_GNBYADDR:
+ case O_GNETENT:
+ case O_GPBYNAME:
+ case O_GPBYNUMBER:
+ case O_GPROTOENT:
+ case O_GSBYNAME:
+ case O_GSBYPORT:
+ case O_GSERVENT:
+ case O_SHOSTENT:
+ case O_SNETENT:
+ case O_SPROTOENT:
+ case O_SSERVENT:
+ case O_EHOSTENT:
+ case O_ENETENT:
+ case O_EPROTOENT:
+ case O_ESERVENT:
+ case O_SHUTDOWN:
+ case O_GSOCKOPT:
+ case O_SSOCKOPT:
+ case O_GETSOCKNAME:
+ case O_GETPEERNAME:
+ badsock:
+ fatal("Unsupported socket function");
+#endif /* HAS_SOCKET */
+ case O_SSELECT:
+#ifdef HAS_SELECT
+ sp = do_select(gimme,arglast);
+ goto array_return;
+#else
+ fatal("select not implemented");
+#endif
+ case O_FILENO:
+ if (maxarg < 1)
+ goto say_undef;
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (!stab || !(stio = stab_io(stab)) || !(fp = stio->ifp))
+ goto say_undef;
+ value = fileno(fp);
+ goto donumset;
+ case O_BINMODE:
+ if (maxarg < 1)
+ goto say_undef;
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (!stab || !(stio = stab_io(stab)) || !(fp = stio->ifp))
+ goto say_undef;
+#ifdef MSDOS
+ str_set(str, (setmode(fileno(fp), O_BINARY) != -1) ? Yes : No);
+#else
+ str_set(str, Yes);
+#endif
+ STABSET(str);
+ break;
+ case O_VEC:
+ sp = do_vec(str == st[1], arg->arg_ptr.arg_str, arglast);
+ goto array_return;
+ case O_GPWNAM:
+ case O_GPWUID:
+ case O_GPWENT:
+#ifdef HAS_PASSWD
+ sp = do_gpwent(optype,
+ gimme,arglast);
+ goto array_return;
+ case O_SPWENT:
+ value = (double) setpwent();
+ goto donumset;
+ case O_EPWENT:
+ value = (double) endpwent();
+ goto donumset;
+#else
+ case O_EPWENT:
+ case O_SPWENT:
+ fatal("Unsupported password function");
+ break;
+#endif
+ case O_GGRNAM:
+ case O_GGRGID:
+ case O_GGRENT:
+#ifdef HAS_GROUP
+ sp = do_ggrent(optype,
+ gimme,arglast);
+ goto array_return;
+ case O_SGRENT:
+ value = (double) setgrent();
+ goto donumset;
+ case O_EGRENT:
+ value = (double) endgrent();
+ goto donumset;
+#else
+ case O_EGRENT:
+ case O_SGRENT:
+ fatal("Unsupported group function");
+ break;
+#endif
+ case O_GETLOGIN:
+#ifdef HAS_GETLOGIN
+ if (!(tmps = getlogin()))
+ goto say_undef;
+ str_set(str,tmps);
+#else
+ fatal("Unsupported function getlogin");
+#endif
+ break;
+ case O_OPENDIR:
+ case O_READDIR:
+ case O_TELLDIR:
+ case O_SEEKDIR:
+ case O_REWINDDIR:
+ case O_CLOSEDIR:
+ if (maxarg < 1)
+ goto say_undef;
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if (!stab)
+ goto say_undef;
+ sp = do_dirop(optype,stab,gimme,arglast);
+ goto array_return;
+ case O_SYSCALL:
+ value = (double)do_syscall(arglast);
+ goto donumset;
+ case O_PIPE:
+#ifdef HAS_PIPE
+ if ((arg[1].arg_type & A_MASK) == A_WORD)
+ stab = arg[1].arg_ptr.arg_stab;
+ else
+ stab = stabent(str_get(st[1]),TRUE);
+ if ((arg[2].arg_type & A_MASK) == A_WORD)
+ stab2 = arg[2].arg_ptr.arg_stab;
+ else
+ stab2 = stabent(str_get(st[2]),TRUE);
+ do_pipe(str,stab,stab2);
+ STABSET(str);
+#else
+ fatal("Unsupported function pipe");
+#endif
+ break;
+ }
+
+ normal_return:
+ st[1] = str;
+#ifdef DEBUGGING
+ if (debug) {
+ dlevel--;
+ if (debug & 8)
+ deb("%s RETURNS \"%s\"\n",opname[optype],str_get(str));
+ }
+#endif
+ return arglast[0] + 1;
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/form.c b/MultiSource/Benchmarks/MallocBench/perl/form.c
new file mode 100644
index 00000000..f7a50123
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/form.c
@@ -0,0 +1,369 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:19:23 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+/* Forms stuff */
+
+void
+form_parseargs(fcmd)
+register FCMD *fcmd;
+{
+ register int i;
+ register ARG *arg;
+ register int items;
+ STR *str;
+ ARG *parselist();
+ line_t oldline = curcmd->c_line;
+ int oldsave = savestack->ary_fill;
+
+ str = fcmd->f_unparsed;
+ curcmd->c_line = fcmd->f_line;
+ fcmd->f_unparsed = Nullstr;
+ (void)savehptr(&curstash);
+ curstash = str->str_u.str_hash;
+ arg = parselist(str);
+ restorelist(oldsave);
+
+ items = arg->arg_len - 1; /* ignore $$ on end */
+ for (i = 1; i <= items; i++) {
+ if (!fcmd || fcmd->f_type == F_NULL)
+ fatal("Too many field values");
+ dehoist(arg,i);
+ fcmd->f_expr = make_op(O_ITEM,1,
+ arg[i].arg_ptr.arg_arg,Nullarg,Nullarg);
+ if (fcmd->f_flags & FC_CHOP) {
+ if ((fcmd->f_expr[1].arg_type & A_MASK) == A_STAB)
+ fcmd->f_expr[1].arg_type = A_LVAL;
+ else if ((fcmd->f_expr[1].arg_type & A_MASK) == A_EXPR)
+ fcmd->f_expr[1].arg_type = A_LEXPR;
+ else
+ fatal("^ field requires scalar lvalue");
+ }
+ fcmd = fcmd->f_next;
+ }
+ if (fcmd && fcmd->f_type)
+ fatal("Not enough field values");
+ curcmd->c_line = oldline;
+ Safefree(arg);
+ str_free(str);
+}
+
+int newsize;
+
+#define CHKLEN(allow) \
+newsize = (d - orec->o_str) + (allow); \
+if (newsize >= curlen) { \
+ curlen = d - orec->o_str; \
+ GROWSTR(&orec->o_str,&orec->o_len,orec->o_len + (allow)); \
+ d = orec->o_str + curlen; /* in case it moves */ \
+ curlen = orec->o_len - 2; \
+}
+
+format(orec,fcmd,sp)
+register struct outrec *orec;
+register FCMD *fcmd;
+int sp;
+{
+ register char *d = orec->o_str;
+ register char *s;
+ register int curlen = orec->o_len - 2;
+ register int size;
+ FCMD *nextfcmd;
+ FCMD *linebeg = fcmd;
+ char tmpchar;
+ char *t;
+ CMD mycmd;
+ STR *str;
+ char *chophere;
+
+ mycmd.c_type = C_NULL;
+ orec->o_lines = 0;
+ for (; fcmd; fcmd = nextfcmd) {
+ nextfcmd = fcmd->f_next;
+ CHKLEN(fcmd->f_presize);
+ if (s = fcmd->f_pre) {
+ while (*s) {
+ if (*s == '\n') {
+ while (d > orec->o_str && (d[-1] == ' ' || d[-1] == '\t'))
+ d--;
+ if (fcmd->f_flags & FC_NOBLANK) {
+ if (d == orec->o_str || d[-1] == '\n') {
+ orec->o_lines--; /* don't print blank line */
+ linebeg = fcmd->f_next;
+ break;
+ }
+ else if (fcmd->f_flags & FC_REPEAT)
+ nextfcmd = linebeg;
+ else
+ linebeg = fcmd->f_next;
+ }
+ else
+ linebeg = fcmd->f_next;
+ }
+ *d++ = *s++;
+ }
+ }
+ if (fcmd->f_unparsed)
+ form_parseargs(fcmd);
+ switch (fcmd->f_type) {
+ case F_NULL:
+ orec->o_lines++;
+ break;
+ case F_LEFT:
+ (void)eval(fcmd->f_expr,G_SCALAR,sp);
+ str = stack->ary_array[sp+1];
+ s = str_get(str);
+ size = fcmd->f_size;
+ CHKLEN(size);
+ chophere = Nullch;
+ while (size && *s && *s != '\n') {
+ if (*s == '\t')
+ *s = ' ';
+ size--;
+ if (*s && index(chopset,(*d++ = *s++)))
+ chophere = s;
+ if (*s == '\n' && (fcmd->f_flags & FC_CHOP))
+ *s = ' ';
+ }
+ if (size)
+ chophere = s;
+ else if (chophere && chophere < s && *s && index(chopset,*s))
+ chophere = s;
+ if (fcmd->f_flags & FC_CHOP) {
+ if (!chophere)
+ chophere = s;
+ size += (s - chophere);
+ d -= (s - chophere);
+ if (fcmd->f_flags & FC_MORE &&
+ *chophere && strNE(chophere,"\n")) {
+ while (size < 3) {
+ d--;
+ size++;
+ }
+ while (d[-1] == ' ' && size < fcmd->f_size) {
+ d--;
+ size++;
+ }
+ *d++ = '.';
+ *d++ = '.';
+ *d++ = '.';
+ size -= 3;
+ }
+ while (*chophere && index(chopset,*chophere))
+ chophere++;
+ str_chop(str,chophere);
+ }
+ if (fcmd->f_next && fcmd->f_next->f_pre[0] == '\n')
+ size = 0; /* no spaces before newline */
+ while (size) {
+ size--;
+ *d++ = ' ';
+ }
+ break;
+ case F_RIGHT:
+ (void)eval(fcmd->f_expr,G_SCALAR,sp);
+ str = stack->ary_array[sp+1];
+ t = s = str_get(str);
+ size = fcmd->f_size;
+ CHKLEN(size);
+ chophere = Nullch;
+ while (size && *s && *s != '\n') {
+ if (*s == '\t')
+ *s = ' ';
+ size--;
+ if (*s && index(chopset,*s++))
+ chophere = s;
+ if (*s == '\n' && (fcmd->f_flags & FC_CHOP))
+ *s = ' ';
+ }
+ if (size)
+ chophere = s;
+ else if (chophere && chophere < s && *s && index(chopset,*s))
+ chophere = s;
+ if (fcmd->f_flags & FC_CHOP) {
+ if (!chophere)
+ chophere = s;
+ size += (s - chophere);
+ s = chophere;
+ while (*chophere && index(chopset,*chophere))
+ chophere++;
+ }
+ tmpchar = *s;
+ *s = '\0';
+ while (size) {
+ size--;
+ *d++ = ' ';
+ }
+ size = s - t;
+ (void)bcopy(t,d,size);
+ d += size;
+ *s = tmpchar;
+ if (fcmd->f_flags & FC_CHOP)
+ str_chop(str,chophere);
+ break;
+ case F_CENTER: {
+ int halfsize;
+
+ (void)eval(fcmd->f_expr,G_SCALAR,sp);
+ str = stack->ary_array[sp+1];
+ t = s = str_get(str);
+ size = fcmd->f_size;
+ CHKLEN(size);
+ chophere = Nullch;
+ while (size && *s && *s != '\n') {
+ if (*s == '\t')
+ *s = ' ';
+ size--;
+ if (*s && index(chopset,*s++))
+ chophere = s;
+ if (*s == '\n' && (fcmd->f_flags & FC_CHOP))
+ *s = ' ';
+ }
+ if (size)
+ chophere = s;
+ else if (chophere && chophere < s && *s && index(chopset,*s))
+ chophere = s;
+ if (fcmd->f_flags & FC_CHOP) {
+ if (!chophere)
+ chophere = s;
+ size += (s - chophere);
+ s = chophere;
+ while (*chophere && index(chopset,*chophere))
+ chophere++;
+ }
+ tmpchar = *s;
+ *s = '\0';
+ halfsize = size / 2;
+ while (size > halfsize) {
+ size--;
+ *d++ = ' ';
+ }
+ size = s - t;
+ (void)bcopy(t,d,size);
+ d += size;
+ *s = tmpchar;
+ if (fcmd->f_next && fcmd->f_next->f_pre[0] == '\n')
+ size = 0; /* no spaces before newline */
+ else
+ size = halfsize;
+ while (size) {
+ size--;
+ *d++ = ' ';
+ }
+ if (fcmd->f_flags & FC_CHOP)
+ str_chop(str,chophere);
+ break;
+ }
+ case F_LINES:
+ (void)eval(fcmd->f_expr,G_SCALAR,sp);
+ str = stack->ary_array[sp+1];
+ s = str_get(str);
+ size = str_len(str);
+ CHKLEN(size+1);
+ orec->o_lines += countlines(s,size) - 1;
+ (void)bcopy(s,d,size);
+ d += size;
+ if (size && s[size-1] != '\n') {
+ *d++ = '\n';
+ orec->o_lines++;
+ }
+ linebeg = fcmd->f_next;
+ break;
+ case F_DECIMAL: {
+ double value;
+
+ (void)eval(fcmd->f_expr,G_SCALAR,sp);
+ str = stack->ary_array[sp+1];
+ size = fcmd->f_size;
+ CHKLEN(size);
+ /* If the field is marked with ^ and the value is undefined,
+ blank it out. */
+ if ((fcmd->f_flags & FC_CHOP) && !str->str_pok && !str->str_nok) {
+ while (size) {
+ size--;
+ *d++ = ' ';
+ }
+ break;
+ }
+ value = str_gnum(str);
+ if (fcmd->f_flags & FC_DP) {
+ sprintf(d, "%#*.*f", size, fcmd->f_decimals, value);
+ } else {
+ sprintf(d, "%*.0f", size, value);
+ }
+ d += size;
+ break;
+ }
+ }
+ }
+ CHKLEN(1);
+ *d++ = '\0';
+}
+
+countlines(s,size)
+register char *s;
+register int size;
+{
+ register int count = 0;
+
+ while (size--) {
+ if (*s++ == '\n')
+ count++;
+ }
+ return count;
+}
+
+do_write(orec,stio,sp)
+struct outrec *orec;
+register STIO *stio;
+int sp;
+{
+ FILE *ofp = stio->ofp;
+
+#ifdef DEBUGGING
+ if (debug & 256)
+ fprintf(stderr,"left=%ld, todo=%ld\n",
+ (long)stio->lines_left, (long)orec->o_lines);
+#endif
+ if (stio->lines_left < orec->o_lines) {
+ if (!stio->top_stab) {
+ STAB *topstab;
+
+ if (!stio->top_name)
+ stio->top_name = savestr("top");
+ topstab = stabent(stio->top_name,FALSE);
+ if (!topstab || !stab_form(topstab)) {
+ stio->lines_left = 100000000;
+ goto forget_top;
+ }
+ stio->top_stab = topstab;
+ }
+ if (stio->lines_left >= 0 && stio->page > 0)
+ (void)putc('\f',ofp);
+ stio->lines_left = stio->page_len;
+ stio->page++;
+ format(&toprec,stab_form(stio->top_stab),sp);
+ fputs(toprec.o_str,ofp);
+ stio->lines_left -= toprec.o_lines;
+ }
+ forget_top:
+ fputs(orec->o_str,ofp);
+ stio->lines_left -= orec->o_lines;
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/form.h b/MultiSource/Benchmarks/MallocBench/perl/form.h
new file mode 100644
index 00000000..979c5482
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/form.h
@@ -0,0 +1,47 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:19:37 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#define F_NULL 0
+#define F_LEFT 1
+#define F_RIGHT 2
+#define F_CENTER 3
+#define F_LINES 4
+#define F_DECIMAL 5
+
+struct formcmd {
+ struct formcmd *f_next;
+ ARG *f_expr;
+ STR *f_unparsed;
+ line_t f_line;
+ char *f_pre;
+ short f_presize;
+ short f_size;
+ short f_decimals;
+ char f_type;
+ char f_flags;
+};
+
+#define FC_CHOP 1
+#define FC_NOBLANK 2
+#define FC_MORE 4
+#define FC_REPEAT 8
+#define FC_DP 16
+
+#define Nullfcmd Null(FCMD*)
+
+EXT char *chopset INIT(" \n-");
diff --git a/MultiSource/Benchmarks/MallocBench/perl/handy.h b/MultiSource/Benchmarks/MallocBench/perl/handy.h
new file mode 100644
index 00000000..7ce96de1
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/handy.h
@@ -0,0 +1,121 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:22:15 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#ifdef NULL
+#undef NULL
+#endif
+#ifndef I286
+# define NULL 0
+#else
+# define NULL 0L
+#endif
+#define Null(type) ((type)NULL)
+#define Nullch Null(char*)
+#define Nullfp Null(FILE*)
+
+#ifdef UTS
+#define bool int
+#else
+#define bool char
+#endif
+
+#ifdef TRUE
+#undef TRUE
+#endif
+#ifdef FALSE
+#undef FALSE
+#endif
+#define TRUE (1)
+#define FALSE (0)
+
+#define Ctl(ch) (ch & 037)
+
+#define strNE(s1,s2) (strcmp(s1,s2))
+#define strEQ(s1,s2) (!strcmp(s1,s2))
+#define strLT(s1,s2) (strcmp(s1,s2) < 0)
+#define strLE(s1,s2) (strcmp(s1,s2) <= 0)
+#define strGT(s1,s2) (strcmp(s1,s2) > 0)
+#define strGE(s1,s2) (strcmp(s1,s2) >= 0)
+#define strnNE(s1,s2,l) (strncmp(s1,s2,l))
+#define strnEQ(s1,s2,l) (!strncmp(s1,s2,l))
+
+#define MEM_SIZE unsigned int
+
+/* Line numbers are unsigned, 16 bits. */
+typedef unsigned short line_t;
+#ifdef lint
+#define NOLINE ((line_t)0)
+#else
+#define NOLINE ((line_t) 65535)
+#endif
+
+#ifndef lint
+#ifndef LEAKTEST
+char *safemalloc();
+char *saferealloc();
+void safefree();
+#ifndef MSDOS
+#define New(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n) * sizeof(t))))
+#define Newc(x,v,n,t,c) (v = (c*)safemalloc((MEM_SIZE)((n) * sizeof(t))))
+#define Newz(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n) * sizeof(t)))), \
+ bzero((char*)(v), (n) * sizeof(t))
+#define Renew(v,n,t) (v = (t*)saferealloc((char*)(v),(MEM_SIZE)((n)*sizeof(t))))
+#define Renewc(v,n,t,c) (v = (c*)saferealloc((char*)(v),(MEM_SIZE)((n)*sizeof(t))))
+#else
+#define New(x,v,n,t) (v = (t*)safemalloc(((unsigned long)(n) * sizeof(t))))
+#define Newc(x,v,n,t,c) (v = (c*)safemalloc(((unsigned long)(n) * sizeof(t))))
+#define Newz(x,v,n,t) (v = (t*)safemalloc(((unsigned long)(n) * sizeof(t)))), \
+ bzero((char*)(v), (n) * sizeof(t))
+#define Renew(v,n,t) (v = (t*)saferealloc((char*)(v),((unsigned long)(n)*sizeof(t))))
+#define Renewc(v,n,t,c) (v = (c*)saferealloc((char*)(v),((unsigned long)(n)*sizeof(t))))
+#endif /* MSDOS */
+
+#ifdef IGNOREFREE
+#define Safefree(d) {};
+#else
+#define Safefree(d) safefree((char*)d)
+#endif
+
+#define Str_new(x,len) str_new(len)
+#else /* LEAKTEST */
+char *safexmalloc();
+char *safexrealloc();
+void safexfree();
+#define New(x,v,n,t) (v = (t*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t))))
+#define Newc(x,v,n,t,c) (v = (c*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t))))
+#define Newz(x,v,n,t) (v = (t*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t)))), \
+ bzero((char*)(v), (n) * sizeof(t))
+#define Renew(v,n,t) (v = (t*)safexrealloc((char*)(v),(MEM_SIZE)((n)*sizeof(t))))
+#define Renewc(v,n,t,c) (v = (c*)safexrealloc((char*)(v),(MEM_SIZE)((n)*sizeof(t))))
+#define Safefree(d) safexfree((char*)d)
+#define Str_new(x,len) str_new(x,len)
+#define MAXXCOUNT 1200
+long xcount[MAXXCOUNT];
+long lastxcount[MAXXCOUNT];
+#endif /* LEAKTEST */
+#define Copy(s,d,n,t) (void)bcopy((char*)(s),(char*)(d), (n) * sizeof(t))
+#define Zero(d,n,t) (void)bzero((char*)(d), (n) * sizeof(t))
+#else /* lint */
+#define New(x,v,n,s) (v = Null(s *))
+#define Newc(x,v,n,s,c) (v = Null(s *))
+#define Newz(x,v,n,s) (v = Null(s *))
+#define Renew(v,n,s) (v = Null(s *))
+#define Copy(s,d,n,t)
+#define Zero(d,n,t)
+#define Safefree(d) d = d
+#endif /* lint */
diff --git a/MultiSource/Benchmarks/MallocBench/perl/hash.c b/MultiSource/Benchmarks/MallocBench/perl/hash.c
new file mode 100644
index 00000000..689975c7
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/hash.c
@@ -0,0 +1,695 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:22:26 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+static char coeff[] = {
+ 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
+ 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
+ 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
+ 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
+ 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
+ 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
+ 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
+ 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1};
+
+static void hfreeentries();
+
+STR *
+hfetch(tb,key,klen,lval)
+register HASH *tb;
+char *key;
+unsigned int klen;
+int lval;
+{
+ register char *s;
+ register int i;
+ register int hash;
+ register HENT *entry;
+ register int maxi;
+ STR *str;
+#ifdef SOME_DBM
+ datum dkey,dcontent;
+#endif
+
+ if (!tb)
+ return &str_undef;
+ if (!tb->tbl_array) {
+ if (lval)
+ Newz(503,tb->tbl_array, tb->tbl_max + 1, HENT*);
+ else
+ return &str_undef;
+ }
+
+ /* The hash function we use on symbols has to be equal to the first
+ * character when taken modulo 128, so that str_reset() can be implemented
+ * efficiently. We throw in the second character and the last character
+ * (times 128) so that long chains of identifiers starting with the
+ * same letter don't have to be strEQ'ed within hfetch(), since it
+ * compares hash values before trying strEQ().
+ */
+ if (!tb->tbl_coeffsize)
+ hash = *key + 128 * key[1] + 128 * key[klen-1]; /* assuming klen > 0 */
+ else { /* use normal coefficients */
+ if (klen < tb->tbl_coeffsize)
+ maxi = klen;
+ else
+ maxi = tb->tbl_coeffsize;
+ for (s=key, i=0, hash = 0;
+ i < maxi;
+ s++, i++, hash *= 5) {
+ hash += *s * coeff[i];
+ }
+ }
+
+ entry = tb->tbl_array[hash & tb->tbl_max];
+ for (; entry; entry = entry->hent_next) {
+ if (entry->hent_hash != hash) /* strings can't be equal */
+ continue;
+ if (entry->hent_klen != klen)
+ continue;
+ if (bcmp(entry->hent_key,key,klen)) /* is this it? */
+ continue;
+ return entry->hent_val;
+ }
+#ifdef SOME_DBM
+ if (tb->tbl_dbm) {
+ dkey.dptr = key;
+ dkey.dsize = klen;
+#ifdef HAS_GDBM
+ dcontent = gdbm_fetch(tb->tbl_dbm,dkey);
+#else
+ dcontent = dbm_fetch(tb->tbl_dbm,dkey);
+#endif
+ if (dcontent.dptr) { /* found one */
+ str = Str_new(60,dcontent.dsize);
+ str_nset(str,dcontent.dptr,dcontent.dsize);
+ hstore(tb,key,klen,str,hash); /* cache it */
+ return str;
+ }
+ }
+#endif
+ if (lval) { /* gonna assign to this, so it better be there */
+ str = Str_new(61,0);
+ hstore(tb,key,klen,str,hash);
+ return str;
+ }
+ return &str_undef;
+}
+
+bool
+hstore(tb,key,klen,val,hash)
+register HASH *tb;
+char *key;
+unsigned int klen;
+STR *val;
+register int hash;
+{
+ register char *s;
+ register int i;
+ register HENT *entry;
+ register HENT **oentry;
+ register int maxi;
+
+ if (!tb)
+ return FALSE;
+
+ if (hash)
+ ;
+ else if (!tb->tbl_coeffsize)
+ hash = *key + 128 * key[1] + 128 * key[klen-1];
+ else { /* use normal coefficients */
+ if (klen < tb->tbl_coeffsize)
+ maxi = klen;
+ else
+ maxi = tb->tbl_coeffsize;
+ for (s=key, i=0, hash = 0;
+ i < maxi;
+ s++, i++, hash *= 5) {
+ hash += *s * coeff[i];
+ }
+ }
+
+ if (!tb->tbl_array)
+ Newz(505,tb->tbl_array, tb->tbl_max + 1, HENT*);
+
+ oentry = &(tb->tbl_array[hash & tb->tbl_max]);
+ i = 1;
+
+ for (entry = *oentry; entry; i=0, entry = entry->hent_next) {
+ if (entry->hent_hash != hash) /* strings can't be equal */
+ continue;
+ if (entry->hent_klen != klen)
+ continue;
+ if (bcmp(entry->hent_key,key,klen)) /* is this it? */
+ continue;
+ Safefree(entry->hent_val);
+ entry->hent_val = val;
+ return TRUE;
+ }
+ New(501,entry, 1, HENT);
+
+ entry->hent_klen = klen;
+ entry->hent_key = nsavestr(key,klen);
+ entry->hent_val = val;
+ entry->hent_hash = hash;
+ entry->hent_next = *oentry;
+ *oentry = entry;
+
+ /* hdbmstore not necessary here because it's called from stabset() */
+
+ if (i) { /* initial entry? */
+ tb->tbl_fill++;
+#ifdef SOME_DBM
+ if (tb->tbl_dbm && tb->tbl_max >= DBM_CACHE_MAX)
+ return FALSE;
+#endif
+ if (tb->tbl_fill > tb->tbl_dosplit)
+ hsplit(tb);
+ }
+#ifdef SOME_DBM
+ else if (tb->tbl_dbm) { /* is this just a cache for dbm file? */
+ void hentdelayfree();
+
+ entry = tb->tbl_array[hash & tb->tbl_max];
+ oentry = &entry->hent_next;
+ entry = *oentry;
+ while (entry) { /* trim chain down to 1 entry */
+ *oentry = entry->hent_next;
+ hentdelayfree(entry); /* no doubt they'll want this next. */
+ entry = *oentry;
+ }
+ }
+#endif
+
+ return FALSE;
+}
+
+STR *
+hdelete(tb,key,klen)
+register HASH *tb;
+char *key;
+unsigned int klen;
+{
+ register char *s;
+ register int i;
+ register int hash;
+ register HENT *entry;
+ register HENT **oentry;
+ STR *str;
+ int maxi;
+#ifdef SOME_DBM
+ datum dkey;
+#endif
+
+ if (!tb || !tb->tbl_array)
+ return Nullstr;
+ if (!tb->tbl_coeffsize)
+ hash = *key + 128 * key[1] + 128 * key[klen-1];
+ else { /* use normal coefficients */
+ if (klen < tb->tbl_coeffsize)
+ maxi = klen;
+ else
+ maxi = tb->tbl_coeffsize;
+ for (s=key, i=0, hash = 0;
+ i < maxi;
+ s++, i++, hash *= 5) {
+ hash += *s * coeff[i];
+ }
+ }
+
+ oentry = &(tb->tbl_array[hash & tb->tbl_max]);
+ entry = *oentry;
+ i = 1;
+ for (; entry; i=0, oentry = &entry->hent_next, entry = *oentry) {
+ if (entry->hent_hash != hash) /* strings can't be equal */
+ continue;
+ if (entry->hent_klen != klen)
+ continue;
+ if (bcmp(entry->hent_key,key,klen)) /* is this it? */
+ continue;
+ *oentry = entry->hent_next;
+ str = str_mortal(entry->hent_val);
+ hentfree(entry);
+ if (i)
+ tb->tbl_fill--;
+#ifdef SOME_DBM
+ do_dbm_delete:
+ if (tb->tbl_dbm) {
+ dkey.dptr = key;
+ dkey.dsize = klen;
+#ifdef HAS_GDBM
+ gdbm_delete(tb->tbl_dbm,dkey);
+#else
+ dbm_delete(tb->tbl_dbm,dkey);
+#endif
+ }
+#endif
+ return str;
+ }
+#ifdef SOME_DBM
+ str = Nullstr;
+ goto do_dbm_delete;
+#else
+ return Nullstr;
+#endif
+}
+
+hsplit(tb)
+HASH *tb;
+{
+ int oldsize = tb->tbl_max + 1;
+ register int newsize = oldsize * 2;
+ register int i;
+ register HENT **a;
+ register HENT **b;
+ register HENT *entry;
+ register HENT **oentry;
+
+ a = tb->tbl_array;
+ Renew(a, newsize, HENT*);
+ Zero(&a[oldsize], oldsize, HENT*); /* zero 2nd half*/
+ tb->tbl_max = --newsize;
+ tb->tbl_dosplit = tb->tbl_max * FILLPCT / 100;
+ tb->tbl_array = a;
+
+ for (i=0; i<oldsize; i++,a++) {
+ if (!*a) /* non-existent */
+ continue;
+ b = a+oldsize;
+ for (oentry = a, entry = *a; entry; entry = *oentry) {
+ if ((entry->hent_hash & newsize) != i) {
+ *oentry = entry->hent_next;
+ entry->hent_next = *b;
+ if (!*b)
+ tb->tbl_fill++;
+ *b = entry;
+ continue;
+ }
+ else
+ oentry = &entry->hent_next;
+ }
+ if (!*a) /* everything moved */
+ tb->tbl_fill--;
+ }
+}
+
+HASH *
+hnew(lookat)
+unsigned int lookat;
+{
+ register HASH *tb;
+
+ Newz(502,tb, 1, HASH);
+ if (lookat) {
+ tb->tbl_coeffsize = lookat;
+ tb->tbl_max = 7; /* it's a normal associative array */
+ tb->tbl_dosplit = tb->tbl_max * FILLPCT / 100;
+ }
+ else {
+ tb->tbl_max = 127; /* it's a symbol table */
+ tb->tbl_dosplit = 128; /* so never split */
+ }
+ tb->tbl_fill = 0;
+#ifdef SOME_DBM
+ tb->tbl_dbm = 0;
+#endif
+ (void)hiterinit(tb); /* so each() will start off right */
+ return tb;
+}
+
+void
+hentfree(hent)
+register HENT *hent;
+{
+ if (!hent)
+ return;
+ str_free(hent->hent_val);
+ Safefree(hent->hent_key);
+ Safefree(hent);
+}
+
+void
+hentdelayfree(hent)
+register HENT *hent;
+{
+ if (!hent)
+ return;
+ str_2mortal(hent->hent_val); /* free between statements */
+ Safefree(hent->hent_key);
+ Safefree(hent);
+}
+
+void
+hclear(tb,dodbm)
+register HASH *tb;
+int dodbm;
+{
+ if (!tb)
+ return;
+ hfreeentries(tb,dodbm);
+ tb->tbl_fill = 0;
+#ifndef lint
+ if (tb->tbl_array)
+ (void)bzero((char*)tb->tbl_array, (tb->tbl_max + 1) * sizeof(HENT*));
+#endif
+}
+
+static void
+hfreeentries(tb,dodbm)
+register HASH *tb;
+int dodbm;
+{
+ register HENT *hent;
+ register HENT *ohent = Null(HENT*);
+#ifdef SOME_DBM
+ datum dkey;
+ datum nextdkey;
+#ifdef HAS_GDBM
+ GDBM_FILE old_dbm;
+#else
+#ifdef HAS_NDBM
+ DBM *old_dbm;
+#else
+ int old_dbm;
+#endif
+#endif
+#endif
+
+ if (!tb || !tb->tbl_array)
+ return;
+#ifdef SOME_DBM
+ if ((old_dbm = tb->tbl_dbm) && dodbm) {
+#ifdef HAS_GDBM
+ while (dkey = gdbm_firstkey(tb->tbl_dbm), dkey.dptr) {
+#else
+ while (dkey = dbm_firstkey(tb->tbl_dbm), dkey.dptr) {
+#endif
+ do {
+#ifdef HAS_GDBM
+ nextdkey = gdbm_nextkey(tb->tbl_dbm, dkey);
+#else
+#ifdef HAS_NDBM
+#ifdef _CX_UX
+ nextdkey = dbm_nextkey(tb->tbl_dbm, dkey);
+#else
+ nextdkey = dbm_nextkey(tb->tbl_dbm);
+#endif
+#else
+ nextdkey = nextkey(dkey);
+#endif
+#endif
+#ifdef HAS_GDBM
+ gdbm_delete(tb->tbl_dbm,dkey);
+#else
+ dbm_delete(tb->tbl_dbm,dkey);
+#endif
+ dkey = nextdkey;
+ } while (dkey.dptr); /* one way or another, this works */
+ }
+ }
+ tb->tbl_dbm = 0; /* now clear just cache */
+#endif
+ (void)hiterinit(tb);
+ while (hent = hiternext(tb)) { /* concise but not very efficient */
+ hentfree(ohent);
+ ohent = hent;
+ }
+ hentfree(ohent);
+#ifdef SOME_DBM
+ tb->tbl_dbm = old_dbm;
+#endif
+}
+
+void
+hfree(tb,dodbm)
+register HASH *tb;
+int dodbm;
+{
+ if (!tb)
+ return;
+ hfreeentries(tb,dodbm);
+ Safefree(tb->tbl_array);
+ Safefree(tb);
+}
+
+int
+hiterinit(tb)
+register HASH *tb;
+{
+ tb->tbl_riter = -1;
+ tb->tbl_eiter = Null(HENT*);
+ return tb->tbl_fill;
+}
+
+HENT *
+hiternext(tb)
+register HASH *tb;
+{
+ register HENT *entry;
+#ifdef SOME_DBM
+ datum key;
+#endif
+
+ entry = tb->tbl_eiter;
+#ifdef SOME_DBM
+ if (tb->tbl_dbm) {
+ if (entry) {
+#ifdef HAS_GDBM
+ key.dptr = entry->hent_key;
+ key.dsize = entry->hent_klen;
+ key = gdbm_nextkey(tb->tbl_dbm, key);
+#else
+#ifdef HAS_NDBM
+#ifdef _CX_UX
+ key.dptr = entry->hent_key;
+ key.dsize = entry->hent_klen;
+ key = dbm_nextkey(tb->tbl_dbm, key);
+#else
+ key = dbm_nextkey(tb->tbl_dbm);
+#endif /* _CX_UX */
+#else
+ key.dptr = entry->hent_key;
+ key.dsize = entry->hent_klen;
+ key = nextkey(key);
+#endif
+#endif
+ }
+ else {
+ Newz(504,entry, 1, HENT);
+ tb->tbl_eiter = entry;
+#ifdef HAS_GDBM
+ key = gdbm_firstkey(tb->tbl_dbm);
+#else
+ key = dbm_firstkey(tb->tbl_dbm);
+#endif
+ }
+ entry->hent_key = key.dptr;
+ entry->hent_klen = key.dsize;
+ if (!key.dptr) {
+ if (entry->hent_val)
+ str_free(entry->hent_val);
+ Safefree(entry);
+ tb->tbl_eiter = Null(HENT*);
+ return Null(HENT*);
+ }
+ return entry;
+ }
+#endif
+ if (!tb->tbl_array)
+ Newz(506,tb->tbl_array, tb->tbl_max + 1, HENT*);
+ do {
+ if (entry)
+ entry = entry->hent_next;
+ if (!entry) {
+ tb->tbl_riter++;
+ if (tb->tbl_riter > tb->tbl_max) {
+ tb->tbl_riter = -1;
+ break;
+ }
+ entry = tb->tbl_array[tb->tbl_riter];
+ }
+ } while (!entry);
+
+ tb->tbl_eiter = entry;
+ return entry;
+}
+
+char *
+hiterkey(entry,retlen)
+register HENT *entry;
+int *retlen;
+{
+ *retlen = entry->hent_klen;
+ return entry->hent_key;
+}
+
+STR *
+hiterval(tb,entry)
+register HASH *tb;
+register HENT *entry;
+{
+#ifdef SOME_DBM
+ datum key, content;
+
+ if (tb->tbl_dbm) {
+ key.dptr = entry->hent_key;
+ key.dsize = entry->hent_klen;
+#ifdef HAS_GDBM
+ content = gdbm_fetch(tb->tbl_dbm,key);
+#else
+ content = dbm_fetch(tb->tbl_dbm,key);
+#endif
+ if (!entry->hent_val)
+ entry->hent_val = Str_new(62,0);
+ str_nset(entry->hent_val,content.dptr,content.dsize);
+ }
+#endif
+ return entry->hent_val;
+}
+
+#ifdef SOME_DBM
+
+#ifndef O_CREAT
+# ifdef I_FCNTL
+# include <fcntl.h>
+# endif
+# ifdef I_SYS_FILE
+# include <sys/file.h>
+# endif
+#endif
+
+#ifndef O_RDONLY
+#define O_RDONLY 0
+#endif
+#ifndef O_RDWR
+#define O_RDWR 2
+#endif
+#ifndef O_CREAT
+#define O_CREAT 01000
+#endif
+
+#ifdef HAS_ODBM
+static int dbmrefcnt = 0;
+#endif
+
+bool
+hdbmopen(tb,fname,mode)
+register HASH *tb;
+char *fname;
+int mode;
+{
+ if (!tb)
+ return FALSE;
+#ifdef HAS_ODBM
+ if (tb->tbl_dbm) /* never really closed it */
+ return TRUE;
+#endif
+ if (tb->tbl_dbm) {
+ hdbmclose(tb);
+ tb->tbl_dbm = 0;
+ }
+ hclear(tb, FALSE); /* clear cache */
+#ifdef HAS_GDBM
+ if (mode >= 0)
+ tb->tbl_dbm = gdbm_open(fname, 0, GDBM_WRCREAT,mode, (void *) NULL);
+ if (!tb->tbl_dbm)
+ tb->tbl_dbm = gdbm_open(fname, 0, GDBM_WRITER, mode, (void *) NULL);
+ if (!tb->tbl_dbm)
+ tb->tbl_dbm = gdbm_open(fname, 0, GDBM_READER, mode, (void *) NULL);
+#else
+#ifdef HAS_NDBM
+ if (mode >= 0)
+ tb->tbl_dbm = dbm_open(fname, O_RDWR|O_CREAT, mode);
+ if (!tb->tbl_dbm)
+ tb->tbl_dbm = dbm_open(fname, O_RDWR, mode);
+ if (!tb->tbl_dbm)
+ tb->tbl_dbm = dbm_open(fname, O_RDONLY, mode);
+#else
+ if (dbmrefcnt++)
+ fatal("Old dbm can only open one database");
+ sprintf(buf,"%s.dir",fname);
+ if (stat(buf, &statbuf) < 0) {
+ if (mode < 0 || close(creat(buf,mode)) < 0)
+ return FALSE;
+ sprintf(buf,"%s.pag",fname);
+ if (close(creat(buf,mode)) < 0)
+ return FALSE;
+ }
+ tb->tbl_dbm = dbminit(fname) >= 0;
+#endif
+#endif
+ if (!tb->tbl_array && tb->tbl_dbm != 0)
+ Newz(507,tb->tbl_array, tb->tbl_max + 1, HENT*);
+ return tb->tbl_dbm != 0;
+}
+
+void
+hdbmclose(tb)
+register HASH *tb;
+{
+ if (tb && tb->tbl_dbm) {
+#ifdef HAS_GDBM
+ gdbm_close(tb->tbl_dbm);
+ tb->tbl_dbm = 0;
+#else
+#ifdef HAS_NDBM
+ dbm_close(tb->tbl_dbm);
+ tb->tbl_dbm = 0;
+#else
+ /* dbmrefcnt--; */ /* doesn't work, rats */
+#endif
+#endif
+ }
+ else if (dowarn)
+ warn("Close on unopened dbm file");
+}
+
+bool
+hdbmstore(tb,key,klen,str)
+register HASH *tb;
+char *key;
+unsigned int klen;
+register STR *str;
+{
+ datum dkey, dcontent;
+ int error;
+
+ if (!tb || !tb->tbl_dbm)
+ return FALSE;
+ dkey.dptr = key;
+ dkey.dsize = klen;
+ dcontent.dptr = str_get(str);
+ dcontent.dsize = str->str_cur;
+#ifdef HAS_GDBM
+ error = gdbm_store(tb->tbl_dbm, dkey, dcontent, GDBM_REPLACE);
+#else
+ error = dbm_store(tb->tbl_dbm, dkey, dcontent, DBM_REPLACE);
+#endif
+ if (error) {
+ if (errno == EPERM)
+ fatal("No write permission to dbm file");
+ warn("dbm store returned %d, errno %d, key \"%s\"",error,errno,key);
+#ifdef HAS_NDBM
+ dbm_clearerr(tb->tbl_dbm);
+#endif
+ }
+ return !error;
+}
+#endif /* SOME_DBM */
diff --git a/MultiSource/Benchmarks/MallocBench/perl/hash.h b/MultiSource/Benchmarks/MallocBench/perl/hash.h
new file mode 100644
index 00000000..2dade296
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/hash.h
@@ -0,0 +1,70 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:22:38 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#define FILLPCT 80 /* don't make greater than 99 */
+#define DBM_CACHE_MAX 63 /* cache 64 entries for dbm file */
+ /* (resident array acts as a write-thru cache)*/
+
+#define COEFFSIZE (16 * 8) /* size of coeff array */
+
+typedef struct hentry HENT;
+
+struct hentry {
+ HENT *hent_next;
+ char *hent_key;
+ STR *hent_val;
+ int hent_hash;
+ int hent_klen;
+};
+
+struct htbl {
+ HENT **tbl_array;
+ int tbl_max; /* subscript of last element of tbl_array */
+ int tbl_dosplit; /* how full to get before splitting */
+ int tbl_fill; /* how full tbl_array currently is */
+ int tbl_riter; /* current root of iterator */
+ HENT *tbl_eiter; /* current entry of iterator */
+ SPAT *tbl_spatroot; /* list of spats for this package */
+ char *tbl_name; /* name, if a symbol table */
+#ifdef SOME_DBM
+#ifdef HAS_GDBM
+ GDBM_FILE tbl_dbm;
+#else
+#ifdef HAS_NDBM
+ DBM *tbl_dbm;
+#else
+ int tbl_dbm;
+#endif
+#endif
+#endif
+ unsigned char tbl_coeffsize; /* is 0 for symbol tables */
+};
+
+STR *hfetch();
+bool hstore();
+STR *hdelete();
+HASH *hnew();
+void hclear();
+void hentfree();
+int hiterinit();
+HENT *hiternext();
+char *hiterkey();
+STR *hiterval();
+bool hdbmopen();
+void hdbmclose();
+bool hdbmstore();
diff --git a/MultiSource/Benchmarks/MallocBench/perl/malloc.c b/MultiSource/Benchmarks/MallocBench/perl/malloc.c
new file mode 100644
index 00000000..739b5860
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/malloc.c
@@ -0,0 +1,412 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/11 17:48:31 lwall
+ * patch1: Configure now figures out malloc ptr type
+ *
+ * Revision 4.0 91/03/20 01:28:52 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)malloc.c 4.3 (Berkeley) 9/16/83";
+
+#ifdef DEBUGGING
+#define RCHECK
+#endif
+/*
+ * malloc.c (Caltech) 2/21/82
+ * Chris Kingsley, kingsley@cit-20.
+ *
+ * This is a very fast storage allocator. It allocates blocks of a small
+ * number of different sizes, and keeps free lists of each size. Blocks that
+ * don't exactly fit are passed up to the next larger size. In this
+ * implementation, the available sizes are 2^n-4 (or 2^n-12) bytes long.
+ * This is designed for use in a program that uses vast quantities of memory,
+ * but bombs when it runs out.
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+static findbucket(), morecore();
+
+/* I don't much care whether these are defined in sys/types.h--LAW */
+
+#define u_char unsigned char
+#define u_int unsigned int
+#define u_short unsigned short
+
+/*
+ * The overhead on a block is at least 4 bytes. When free, this space
+ * contains a pointer to the next free block, and the bottom two bits must
+ * be zero. When in use, the first byte is set to MAGIC, and the second
+ * byte is the size index. The remaining bytes are for alignment.
+ * If range checking is enabled and the size of the block fits
+ * in two bytes, then the top two bytes hold the size of the requested block
+ * plus the range checking words, and the header word MINUS ONE.
+ */
+union overhead {
+ union overhead *ov_next; /* when free */
+#if ALIGNBYTES > 4
+ double strut; /* alignment problems */
+#endif
+ struct {
+ u_char ovu_magic; /* magic number */
+ u_char ovu_index; /* bucket # */
+#ifdef RCHECK
+ u_short ovu_size; /* actual block size */
+ u_int ovu_rmagic; /* range magic number */
+#endif
+ } ovu;
+#define ov_magic ovu.ovu_magic
+#define ov_index ovu.ovu_index
+#define ov_size ovu.ovu_size
+#define ov_rmagic ovu.ovu_rmagic
+};
+
+#define MAGIC 0xff /* magic # on accounting info */
+#define OLDMAGIC 0x7f /* same after a free() */
+#define RMAGIC 0x55555555 /* magic # on range info */
+#ifdef RCHECK
+#define RSLOP sizeof (u_int)
+#else
+#define RSLOP 0
+#endif
+
+/*
+ * nextf[i] is the pointer to the next free block of size 2^(i+3). The
+ * smallest allocatable block is 8 bytes. The overhead information
+ * precedes the data area returned to the user.
+ */
+#define NBUCKETS 30
+static union overhead *nextf[NBUCKETS];
+extern char *sbrk();
+
+#ifdef MSTATS
+/*
+ * nmalloc[i] is the difference between the number of mallocs and frees
+ * for a given block size.
+ */
+static u_int nmalloc[NBUCKETS];
+#include <stdio.h>
+#endif
+
+#ifdef debug
+#define ASSERT(p) if (!(p)) botch("p"); else
+static
+botch(s)
+ char *s;
+{
+
+ printf("assertion botched: %s\n", s);
+ abort();
+}
+#else
+#define ASSERT(p)
+#endif
+
+MALLOCPTRTYPE *
+malloc(nbytes)
+ register unsigned nbytes;
+{
+ register union overhead *p;
+ register int bucket = 0;
+ register unsigned shiftr;
+
+ /*
+ * Convert amount of memory requested into
+ * closest block size stored in hash buckets
+ * which satisfies request. Account for
+ * space used per block for accounting.
+ */
+ nbytes += sizeof (union overhead) + RSLOP;
+ nbytes = (nbytes + 3) &~ 3;
+ shiftr = (nbytes - 1) >> 2;
+ /* apart from this loop, this is O(1) */
+ while (shiftr >>= 1)
+ bucket++;
+ /*
+ * If nothing in hash bucket right now,
+ * request more memory from the system.
+ */
+ if (nextf[bucket] == NULL)
+ morecore(bucket);
+ if ((p = (union overhead *)nextf[bucket]) == NULL)
+ return (NULL);
+ /* remove from linked list */
+#ifdef RCHECK
+ if (*((int*)p) & (sizeof(union overhead) - 1))
+#ifndef I286
+ fprintf(stderr,"Corrupt malloc ptr 0x%x at 0x%x\n",*((int*)p),p);
+#else
+ fprintf(stderr,"Corrupt malloc ptr 0x%lx at 0x%lx\n",*((int*)p),p);
+#endif
+#endif
+ nextf[bucket] = p->ov_next;
+ p->ov_magic = MAGIC;
+ p->ov_index= bucket;
+#ifdef MSTATS
+ nmalloc[bucket]++;
+#endif
+#ifdef RCHECK
+ /*
+ * Record allocated size of block and
+ * bound space with magic numbers.
+ */
+ if (nbytes <= 0x10000)
+ p->ov_size = nbytes - 1;
+ p->ov_rmagic = RMAGIC;
+ *((u_int *)((caddr_t)p + nbytes - RSLOP)) = RMAGIC;
+#endif
+ return ((char *)(p + 1));
+}
+
+/*
+ * Allocate more memory to the indicated bucket.
+ */
+static
+morecore(bucket)
+ register int bucket;
+{
+ register union overhead *op;
+ register int rnu; /* 2^rnu bytes will be requested */
+ register int nblks; /* become nblks blocks of the desired size */
+ register int siz;
+
+ if (nextf[bucket])
+ return;
+ /*
+ * Insure memory is allocated
+ * on a page boundary. Should
+ * make getpageize call?
+ */
+ op = (union overhead *)sbrk(0);
+#ifndef I286
+ if ((int)op & 0x3ff)
+ (void)sbrk(1024 - ((int)op & 0x3ff));
+#else
+ /* The sbrk(0) call on the I286 always returns the next segment */
+#endif
+
+#ifndef I286
+ /* take 2k unless the block is bigger than that */
+ rnu = (bucket <= 8) ? 11 : bucket + 3;
+#else
+ /* take 16k unless the block is bigger than that
+ (80286s like large segments!) */
+ rnu = (bucket <= 11) ? 14 : bucket + 3;
+#endif
+ nblks = 1 << (rnu - (bucket + 3)); /* how many blocks to get */
+ if (rnu < bucket)
+ rnu = bucket;
+ op = (union overhead *)sbrk(1 << rnu);
+ /* no more room! */
+ if ((int)op == -1)
+ return;
+ /*
+ * Round up to minimum allocation size boundary
+ * and deduct from block count to reflect.
+ */
+#ifndef I286
+ if ((int)op & 7) {
+ op = (union overhead *)(((int)op + 8) &~ 7);
+ nblks--;
+ }
+#else
+ /* Again, this should always be ok on an 80286 */
+#endif
+ /*
+ * Add new memory allocated to that on
+ * free list for this hash bucket.
+ */
+ nextf[bucket] = op;
+ siz = 1 << (bucket + 3);
+ while (--nblks > 0) {
+ op->ov_next = (union overhead *)((caddr_t)op + siz);
+ op = (union overhead *)((caddr_t)op + siz);
+ }
+}
+
+int
+free(tcp)
+ void *tcp;
+{
+ char * cp = tcp;
+ register int size;
+ register union overhead *op;
+
+#ifdef IGNOREFREE
+ return;
+#else
+ if (cp == NULL)
+ return;
+ op = (union overhead *)((caddr_t)cp - sizeof (union overhead));
+#ifdef debug
+ ASSERT(op->ov_magic == MAGIC); /* make sure it was in use */
+#else
+ if (op->ov_magic != MAGIC) {
+ warn("%s free() ignored",
+ op->ov_magic == OLDMAGIC ? "Duplicate" : "Bad");
+ return; /* sanity */
+ }
+ op->ov_magic = OLDMAGIC;
+#endif
+#ifdef RCHECK
+ ASSERT(op->ov_rmagic == RMAGIC);
+ if (op->ov_index <= 13)
+ ASSERT(*(u_int *)((caddr_t)op + op->ov_size + 1 - RSLOP) == RMAGIC);
+#endif
+ ASSERT(op->ov_index < NBUCKETS);
+ size = op->ov_index;
+ op->ov_next = nextf[size];
+ nextf[size] = op;
+#ifdef MSTATS
+ nmalloc[size]--;
+#endif
+#endif
+}
+
+/*
+ * When a program attempts "storage compaction" as mentioned in the
+ * old malloc man page, it realloc's an already freed block. Usually
+ * this is the last block it freed; occasionally it might be farther
+ * back. We have to search all the free lists for the block in order
+ * to determine its bucket: 1st we make one pass thru the lists
+ * checking only the first block in each; if that fails we search
+ * ``reall_srchlen'' blocks in each list for a match (the variable
+ * is extern so the caller can modify it). If that fails we just copy
+ * however many bytes was given to realloc() and hope it's not huge.
+ */
+int reall_srchlen = 4; /* 4 should be plenty, -1 =>'s whole list */
+
+MALLOCPTRTYPE *
+realloc(tcp, nbytes)
+ void *tcp;
+ unsigned nbytes;
+{
+ char * cp = tcp;
+ register u_int onb;
+ union overhead *op;
+ char *res;
+ register int i;
+ int was_alloced = 0;
+
+ if (cp == NULL)
+ return (malloc(nbytes));
+ op = (union overhead *)((caddr_t)cp - sizeof (union overhead));
+ if (op->ov_magic == MAGIC) {
+ was_alloced++;
+ i = op->ov_index;
+ } else {
+ /*
+ * Already free, doing "compaction".
+ *
+ * Search for the old block of memory on the
+ * free list. First, check the most common
+ * case (last element free'd), then (this failing)
+ * the last ``reall_srchlen'' items free'd.
+ * If all lookups fail, then assume the size of
+ * the memory block being realloc'd is the
+ * smallest possible.
+ */
+ if ((i = findbucket(op, 1)) < 0 &&
+ (i = findbucket(op, reall_srchlen)) < 0)
+ i = 0;
+ }
+ onb = (1 << (i + 3)) - sizeof (*op) - RSLOP;
+ /* avoid the copy if same size block */
+ if (was_alloced &&
+ nbytes <= onb && nbytes > (onb >> 1) - sizeof(*op) - RSLOP) {
+#ifdef RCHECK
+ /*
+ * Record new allocated size of block and
+ * bound space with magic numbers.
+ */
+ if (op->ov_index <= 13) {
+ /*
+ * Convert amount of memory requested into
+ * closest block size stored in hash buckets
+ * which satisfies request. Account for
+ * space used per block for accounting.
+ */
+ nbytes += sizeof (union overhead) + RSLOP;
+ nbytes = (nbytes + 3) &~ 3;
+ op->ov_size = nbytes - 1;
+ *((u_int *)((caddr_t)op + nbytes - RSLOP)) = RMAGIC;
+ }
+#endif
+ return(cp);
+ }
+ if ((res = malloc(nbytes)) == NULL)
+ return (NULL);
+ if (cp != res) /* common optimization */
+ (void)bcopy(cp, res, (int)((nbytes < onb) ? nbytes : onb));
+ if (was_alloced)
+ free(cp);
+ return (res);
+}
+
+/*
+ * Search ``srchlen'' elements of each free list for a block whose
+ * header starts at ``freep''. If srchlen is -1 search the whole list.
+ * Return bucket number, or -1 if not found.
+ */
+static
+findbucket(freep, srchlen)
+ union overhead *freep;
+ int srchlen;
+{
+ register union overhead *p;
+ register int i, j;
+
+ for (i = 0; i < NBUCKETS; i++) {
+ j = 0;
+ for (p = nextf[i]; p && j != srchlen; p = p->ov_next) {
+ if (p == freep)
+ return (i);
+ j++;
+ }
+ }
+ return (-1);
+}
+
+#ifdef MSTATS
+/*
+ * mstats - print out statistics about malloc
+ *
+ * Prints two lines of numbers, one showing the length of the free list
+ * for each size category, the second showing the number of mallocs -
+ * frees for each size category.
+ */
+mstats(s)
+ char *s;
+{
+ register int i, j;
+ register union overhead *p;
+ int totfree = 0,
+ totused = 0;
+
+ fprintf(stderr, "Memory allocation statistics %s\nfree:\t", s);
+ for (i = 0; i < NBUCKETS; i++) {
+ for (j = 0, p = nextf[i]; p; p = p->ov_next, j++)
+ ;
+ fprintf(stderr, " %d", j);
+ totfree += j * (1 << (i + 3));
+ }
+ fprintf(stderr, "\nused:\t");
+ for (i = 0; i < NBUCKETS; i++) {
+ fprintf(stderr, " %d", nmalloc[i]);
+ totused += nmalloc[i] * (1 << (i + 3));
+ }
+ fprintf(stderr, "\n\tTotal in use: %d, total free: %d\n",
+ totused, totfree);
+}
+#endif
+#endif /* lint */
diff --git a/MultiSource/Benchmarks/MallocBench/perl/patch-malloc.c b/MultiSource/Benchmarks/MallocBench/perl/patch-malloc.c
new file mode 100644
index 00000000..32e1e40b
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/patch-malloc.c
@@ -0,0 +1,33 @@
+extern char *malloc();
+extern char *bZa(), *bZr(), *bZc();
+extern int free();
+
+char *
+malloc(n)
+int n;
+{
+ return bZa(n);
+}
+
+char *
+calloc(n)
+int n;
+{
+ /* return bZc(n);
+ */
+}
+
+free(p)
+char *p;
+{
+ bZf(p);
+}
+
+char *
+realloc(cp, nbytes)
+char *cp;
+int nbytes;
+{
+ return bZr(cp, nbytes);
+}
+
diff --git a/MultiSource/Benchmarks/MallocBench/perl/patchlevel.h b/MultiSource/Benchmarks/MallocBench/perl/patchlevel.h
new file mode 100644
index 00000000..558d48cd
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/patchlevel.h
@@ -0,0 +1 @@
+#define PATCHLEVEL 3
diff --git a/MultiSource/Benchmarks/MallocBench/perl/perl.c b/MultiSource/Benchmarks/MallocBench/perl/perl.c
new file mode 100644
index 00000000..6e90d9b3
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/perl.c
@@ -0,0 +1,1225 @@
+char rcsid[] = "$RCSfile$$Revision$$Date$\nPatch level: ###\n";
+/*
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/11 17:49:05 lwall
+ * patch1: fixed undefined environ problem
+ *
+ * Revision 4.0 91/03/20 01:37:44 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "perly.h"
+#ifdef MSDOS
+#include "patchlev.h"
+#else
+#include "patchlevel.h"
+#endif
+
+#ifdef IAMSUID
+#ifndef DOSUID
+#define DOSUID
+#endif
+#endif
+
+#ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
+#ifdef DOSUID
+#undef DOSUID
+#endif
+#endif
+
+static char* moreswitches();
+static char* cddir;
+static bool minus_c;
+static char patchlevel[6];
+static char *nrs = "\n";
+static int nrschar = '\n'; /* final char of rs, or 0777 if none */
+static int nrslen = 1;
+
+main(argc,argv,env)
+register int argc;
+register char **argv;
+register char **env;
+{
+ register STR *str;
+ register char *s;
+ char *index(), *strcpy(), *getenv();
+ bool dosearch = FALSE;
+#ifdef DOSUID
+ char *validarg = "";
+#endif
+
+#ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
+#ifdef IAMSUID
+#undef IAMSUID
+ fatal("suidperl is no longer needed since the kernel can now execute\n\
+setuid perl scripts securely.\n");
+#endif
+#endif
+
+#ifdef BWGC
+ {
+ extern gc_init();
+ gc_init();
+ }
+#endif BWGC
+
+ origargv = argv;
+ origargc = argc;
+ origenviron = environ;
+ uid = (int)getuid();
+ euid = (int)geteuid();
+ gid = (int)getgid();
+ egid = (int)getegid();
+ sprintf(patchlevel,"%3.3s%2.2d", index(rcsid,'4'), PATCHLEVEL);
+#ifdef MSDOS
+ /*
+ * There is no way we can refer to them from Perl so close them to save
+ * space. The other alternative would be to provide STDAUX and STDPRN
+ * filehandles.
+ */
+ (void)fclose(stdaux);
+ (void)fclose(stdprn);
+#endif
+ if (do_undump) {
+ origfilename = savestr(argv[0]);
+ do_undump = 0;
+ loop_ptr = -1; /* start label stack again */
+ goto just_doit;
+ }
+ (void)sprintf(index(rcsid,'#'), "%d\n", PATCHLEVEL);
+ linestr = Str_new(65,80);
+ str_nset(linestr,"",0);
+ str = str_make("",0); /* first used for -I flags */
+ curstash = defstash = hnew(0);
+ curstname = str_make("main",4);
+ stab_xhash(stabent("_main",TRUE)) = defstash;
+ defstash->tbl_name = "main";
+ incstab = hadd(aadd(stabent("INC",TRUE)));
+ incstab->str_pok |= SP_MULTI;
+ for (argc--,argv++; argc > 0; argc--,argv++) {
+ if (argv[0][0] != '-' || !argv[0][1])
+ break;
+#ifdef DOSUID
+ if (*validarg)
+ validarg = " PHOOEY ";
+ else
+ validarg = argv[0];
+#endif
+ s = argv[0]+1;
+ reswitch:
+ switch (*s) {
+ case '0':
+ case 'a':
+ case 'c':
+ case 'd':
+ case 'D':
+ case 'i':
+ case 'l':
+ case 'n':
+ case 'p':
+ case 'u':
+ case 'U':
+ case 'v':
+ case 'w':
+ if (s = moreswitches(s))
+ goto reswitch;
+ break;
+
+ case 'e':
+#ifdef TAINT
+ if (euid != uid || egid != gid)
+ fatal("No -e allowed in setuid scripts");
+#endif
+ if (!e_fp) {
+ e_tmpname = savestr(TMPPATH);
+ (void)mktemp(e_tmpname);
+ e_fp = fopen(e_tmpname,"w");
+ if (!e_fp)
+ fatal("Cannot open temporary file");
+ }
+ if (argv[1]) {
+ fputs(argv[1],e_fp);
+ argc--,argv++;
+ }
+ (void)putc('\n', e_fp);
+ break;
+ case 'I':
+#ifdef TAINT
+ if (euid != uid || egid != gid)
+ fatal("No -I allowed in setuid scripts");
+#endif
+ str_cat(str,"-");
+ str_cat(str,s);
+ str_cat(str," ");
+ if (*++s) {
+ (void)apush(stab_array(incstab),str_make(s,0));
+ }
+ else if (argv[1]) {
+ (void)apush(stab_array(incstab),str_make(argv[1],0));
+ str_cat(str,argv[1]);
+ argc--,argv++;
+ str_cat(str," ");
+ }
+ break;
+ case 'P':
+#ifdef TAINT
+ if (euid != uid || egid != gid)
+ fatal("No -P allowed in setuid scripts");
+#endif
+ preprocess = TRUE;
+ s++;
+ goto reswitch;
+ case 's':
+#ifdef TAINT
+ if (euid != uid || egid != gid)
+ fatal("No -s allowed in setuid scripts");
+#endif
+ doswitches = TRUE;
+ s++;
+ goto reswitch;
+ case 'S':
+ dosearch = TRUE;
+ s++;
+ goto reswitch;
+ case 'x':
+ doextract = TRUE;
+ s++;
+ if (*s)
+ cddir = savestr(s);
+ break;
+ case '-':
+ argc--,argv++;
+ goto switch_end;
+ case 0:
+ break;
+ default:
+ fatal("Unrecognized switch: -%s",s);
+ }
+ }
+ switch_end:
+ if (e_fp) {
+ (void)fclose(e_fp);
+ argc++,argv--;
+ argv[0] = e_tmpname;
+ }
+
+#ifdef MSDOS
+#define PERLLIB_SEP ';'
+#else
+#define PERLLIB_SEP ':'
+#endif
+#ifndef TAINT /* Can't allow arbitrary PERLLIB in setuid script */
+ {
+ char * s2 = getenv("PERLLIB");
+
+ if ( s2 ) {
+ /* Break at all separators */
+ while ( *s2 ) {
+ /* First, skip any consecutive separators */
+ while ( *s2 == PERLLIB_SEP ) {
+ /* Uncomment the next line for PATH semantics */
+ /* (void)apush(stab_array(incstab),str_make(".",1)); */
+ s2++;
+ }
+ if ( (s = index(s2,PERLLIB_SEP)) != Nullch ) {
+ (void)apush(stab_array(incstab),str_make(s2,(int)(s-s2)));
+ s2 = s+1;
+ } else {
+ (void)apush(stab_array(incstab),str_make(s2,0));
+ break;
+ }
+ }
+ }
+ }
+#endif /* TAINT */
+
+#ifndef PRIVLIB
+#define PRIVLIB "/usr/local/lib/perl"
+#endif
+ (void)apush(stab_array(incstab),str_make(PRIVLIB,0));
+ (void)apush(stab_array(incstab),str_make(".",1));
+
+ str_set(&str_no,No);
+ str_set(&str_yes,Yes);
+
+ /* open script */
+
+ if (argv[0] == Nullch)
+#ifdef MSDOS
+ {
+ if ( isatty(fileno(stdin)) )
+ moreswitches("v");
+ argv[0] = "-";
+ }
+#else
+ argv[0] = "-";
+#endif
+ if (dosearch && !index(argv[0], '/') && (s = getenv("PATH"))) {
+ char *xfound = Nullch, *xfailed = Nullch;
+ int len;
+
+ bufend = s + strlen(s);
+ while (*s) {
+#ifndef MSDOS
+ s = cpytill(tokenbuf,s,bufend,':',&len);
+#else
+ for (len = 0; *s && *s != ';'; tokenbuf[len++] = *s++);
+ tokenbuf[len] = '\0';
+#endif
+ if (*s)
+ s++;
+#ifndef MSDOS
+ if (len && tokenbuf[len-1] != '/')
+#else
+ if (len && tokenbuf[len-1] != '\\')
+#endif
+ (void)strcat(tokenbuf+len,"/");
+ (void)strcat(tokenbuf+len,argv[0]);
+#ifdef DEBUGGING
+ if (debug & 1)
+ fprintf(stderr,"Looking for %s\n",tokenbuf);
+#endif
+ if (stat(tokenbuf,&statbuf) < 0) /* not there? */
+ continue;
+ if (S_ISREG(statbuf.st_mode)
+ && cando(S_IRUSR,TRUE,&statbuf) && cando(S_IXUSR,TRUE,&statbuf)) {
+ xfound = tokenbuf; /* bingo! */
+ break;
+ }
+ if (!xfailed)
+ xfailed = savestr(tokenbuf);
+ }
+ if (!xfound)
+ fatal("Can't execute %s", xfailed ? xfailed : argv[0] );
+ if (xfailed)
+ Safefree(xfailed);
+ argv[0] = savestr(xfound);
+ }
+
+ fdpid = anew(Nullstab); /* for remembering popen pids by fd */
+ pidstatus = hnew(COEFFSIZE);/* for remembering status of dead pids */
+
+ origfilename = savestr(argv[0]);
+ curcmd->c_filestab = fstab(origfilename);
+ if (strEQ(origfilename,"-"))
+ argv[0] = "";
+ if (preprocess) {
+ str_cat(str,"-I");
+ str_cat(str,PRIVLIB);
+ (void)sprintf(buf, "\
+%ssed %s -e '/^[^#]/b' \
+ -e '/^#[ ]*include[ ]/b' \
+ -e '/^#[ ]*define[ ]/b' \
+ -e '/^#[ ]*if[ ]/b' \
+ -e '/^#[ ]*ifdef[ ]/b' \
+ -e '/^#[ ]*ifndef[ ]/b' \
+ -e '/^#[ ]*else/b' \
+ -e '/^#[ ]*endif/b' \
+ -e 's/^#.*//' \
+ %s | %s -C %s %s",
+#ifdef MSDOS
+ "",
+#else
+ "/bin/",
+#endif
+ (doextract ? "-e '1,/^#/d\n'" : ""),
+ argv[0], CPPSTDIN, str_get(str), CPPMINUS);
+#ifdef DEBUGGING
+ if (debug & 64) {
+ fputs(buf,stderr);
+ fputs("\n",stderr);
+ }
+#endif
+ doextract = FALSE;
+#ifdef IAMSUID /* actually, this is caught earlier */
+ if (euid != uid && !euid) /* if running suidperl */
+#ifdef HAS_SETEUID
+ (void)seteuid(uid); /* musn't stay setuid root */
+#else
+#ifdef HAS_SETREUID
+ (void)setreuid(-1, uid);
+#else
+ setuid(uid);
+#endif
+#endif
+#endif /* IAMSUID */
+ rsfp = mypopen(buf,"r");
+ }
+ else if (!*argv[0])
+ rsfp = stdin;
+ else
+ rsfp = fopen(argv[0],"r");
+ if (rsfp == Nullfp) {
+#ifdef DOSUID
+#ifndef IAMSUID /* in case script is not readable before setuid */
+ if (euid && stat(stab_val(curcmd->c_filestab)->str_ptr,&statbuf) >= 0 &&
+ statbuf.st_mode & (S_ISUID|S_ISGID)) {
+ (void)sprintf(buf, "%s/sperl%s", BIN, patchlevel);
+ execv(buf, origargv); /* try again */
+ fatal("Can't do setuid\n");
+ }
+#endif
+#endif
+ fatal("Can't open perl script \"%s\": %s\n",
+ stab_val(curcmd->c_filestab)->str_ptr, strerror(errno));
+ }
+ str_free(str); /* free -I directories */
+ str = Nullstr;
+
+ /* do we need to emulate setuid on scripts? */
+
+ /* This code is for those BSD systems that have setuid #! scripts disabled
+ * in the kernel because of a security problem. Merely defining DOSUID
+ * in perl will not fix that problem, but if you have disabled setuid
+ * scripts in the kernel, this will attempt to emulate setuid and setgid
+ * on scripts that have those now-otherwise-useless bits set. The setuid
+ * root version must be called suidperl or sperlN.NNN. If regular perl
+ * discovers that it has opened a setuid script, it calls suidperl with
+ * the same argv that it had. If suidperl finds that the script it has
+ * just opened is NOT setuid root, it sets the effective uid back to the
+ * uid. We don't just make perl setuid root because that loses the
+ * effective uid we had before invoking perl, if it was different from the
+ * uid.
+ *
+ * DOSUID must be defined in both perl and suidperl, and IAMSUID must
+ * be defined in suidperl only. suidperl must be setuid root. The
+ * Configure script will set this up for you if you want it.
+ *
+ * There is also the possibility of have a script which is running
+ * set-id due to a C wrapper. We want to do the TAINT checks
+ * on these set-id scripts, but don't want to have the overhead of
+ * them in normal perl, and can't use suidperl because it will lose
+ * the effective uid info, so we have an additional non-setuid root
+ * version called taintperl or tperlN.NNN that just does the TAINT checks.
+ */
+
+#ifdef DOSUID
+ if (fstat(fileno(rsfp),&statbuf) < 0) /* normal stat is insecure */
+ fatal("Can't stat script \"%s\"",origfilename);
+ if (statbuf.st_mode & (S_ISUID|S_ISGID)) {
+ int len;
+
+#ifdef IAMSUID
+#ifndef HAS_SETREUID
+ /* On this access check to make sure the directories are readable,
+ * there is actually a small window that the user could use to make
+ * filename point to an accessible directory. So there is a faint
+ * chance that someone could execute a setuid script down in a
+ * non-accessible directory. I don't know what to do about that.
+ * But I don't think it's too important. The manual lies when
+ * it says access() is useful in setuid programs.
+ */
+ if (access(stab_val(curcmd->c_filestab)->str_ptr,1)) /*double check*/
+ fatal("Permission denied");
+#else
+ /* If we can swap euid and uid, then we can determine access rights
+ * with a simple stat of the file, and then compare device and
+ * inode to make sure we did stat() on the same file we opened.
+ * Then we just have to make sure he or she can execute it.
+ */
+ {
+ struct stat tmpstatbuf;
+
+ if (setreuid(euid,uid) < 0 || getuid() != euid || geteuid() != uid)
+ fatal("Can't swap uid and euid"); /* really paranoid */
+ if (stat(stab_val(curcmd->c_filestab)->str_ptr,&tmpstatbuf) < 0)
+ fatal("Permission denied"); /* testing full pathname here */
+ if (tmpstatbuf.st_dev != statbuf.st_dev ||
+ tmpstatbuf.st_ino != statbuf.st_ino) {
+ (void)fclose(rsfp);
+ if (rsfp = mypopen("/bin/mail root","w")) { /* heh, heh */
+ fprintf(rsfp,
+"User %d tried to run dev %d ino %d in place of dev %d ino %d!\n\
+(Filename of set-id script was %s, uid %d gid %d.)\n\nSincerely,\nperl\n",
+ uid,tmpstatbuf.st_dev, tmpstatbuf.st_ino,
+ statbuf.st_dev, statbuf.st_ino,
+ stab_val(curcmd->c_filestab)->str_ptr,
+ statbuf.st_uid, statbuf.st_gid);
+ (void)mypclose(rsfp);
+ }
+ fatal("Permission denied\n");
+ }
+ if (setreuid(uid,euid) < 0 || getuid() != uid || geteuid() != euid)
+ fatal("Can't reswap uid and euid");
+ if (!cando(S_IXUSR,FALSE,&statbuf)) /* can real uid exec? */
+ fatal("Permission denied\n");
+ }
+#endif /* HAS_SETREUID */
+#endif /* IAMSUID */
+
+ if (!S_ISREG(statbuf.st_mode))
+ fatal("Permission denied");
+ if (statbuf.st_mode & S_IWOTH)
+ fatal("Setuid/gid script is writable by world");
+ doswitches = FALSE; /* -s is insecure in suid */
+ curcmd->c_line++;
+ if (fgets(tokenbuf,sizeof tokenbuf, rsfp) == Nullch ||
+ strnNE(tokenbuf,"#!",2) ) /* required even on Sys V */
+ fatal("No #! line");
+ s = tokenbuf+2;
+ if (*s == ' ') s++;
+ while (!isspace(*s)) s++;
+ if (strnNE(s-4,"perl",4) && strnNE(s-9,"perl",4)) /* sanity check */
+ fatal("Not a perl script");
+ while (*s == ' ' || *s == '\t') s++;
+ /*
+ * #! arg must be what we saw above. They can invoke it by
+ * mentioning suidperl explicitly, but they may not add any strange
+ * arguments beyond what #! says if they do invoke suidperl that way.
+ */
+ len = strlen(validarg);
+ if (strEQ(validarg," PHOOEY ") ||
+ strnNE(s,validarg,len) || !isspace(s[len]))
+ fatal("Args must match #! line");
+
+#ifndef IAMSUID
+ if (euid != uid && (statbuf.st_mode & S_ISUID) &&
+ euid == statbuf.st_uid)
+ if (!do_undump)
+ fatal("YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
+FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
+#endif /* IAMSUID */
+
+ if (euid) { /* oops, we're not the setuid root perl */
+ (void)fclose(rsfp);
+#ifndef IAMSUID
+ (void)sprintf(buf, "%s/sperl%s", BIN, patchlevel);
+ execv(buf, origargv); /* try again */
+#endif
+ fatal("Can't do setuid\n");
+ }
+
+ if (statbuf.st_mode & S_ISGID && statbuf.st_gid != egid)
+#ifdef HAS_SETEGID
+ (void)setegid(statbuf.st_gid);
+#else
+#ifdef HAS_SETREGID
+ (void)setregid((GIDTYPE)-1,statbuf.st_gid);
+#else
+ setgid(statbuf.st_gid);
+#endif
+#endif
+ if (statbuf.st_mode & S_ISUID) {
+ if (statbuf.st_uid != euid)
+#ifdef HAS_SETEUID
+ (void)seteuid(statbuf.st_uid); /* all that for this */
+#else
+#ifdef HAS_SETREUID
+ (void)setreuid((UIDTYPE)-1,statbuf.st_uid);
+#else
+ setuid(statbuf.st_uid);
+#endif
+#endif
+ }
+ else if (uid) /* oops, mustn't run as root */
+#ifdef HAS_SETEUID
+ (void)seteuid((UIDTYPE)uid);
+#else
+#ifdef HAS_SETREUID
+ (void)setreuid((UIDTYPE)-1,(UIDTYPE)uid);
+#else
+ setuid((UIDTYPE)uid);
+#endif
+#endif
+ uid = (int)getuid();
+ euid = (int)geteuid();
+ gid = (int)getgid();
+ egid = (int)getegid();
+ if (!cando(S_IXUSR,TRUE,&statbuf))
+ fatal("Permission denied\n"); /* they can't do this */
+ }
+#ifdef IAMSUID
+ else if (preprocess)
+ fatal("-P not allowed for setuid/setgid script\n");
+ else
+ fatal("Script is not setuid/setgid in suidperl\n");
+#else
+#ifndef TAINT /* we aren't taintperl or suidperl */
+ /* script has a wrapper--can't run suidperl or we lose euid */
+ else if (euid != uid || egid != gid) {
+ (void)fclose(rsfp);
+ (void)sprintf(buf, "%s/tperl%s", BIN, patchlevel);
+ execv(buf, origargv); /* try again */
+ fatal("Can't run setuid script with taint checks");
+ }
+#endif /* TAINT */
+#endif /* IAMSUID */
+#else /* !DOSUID */
+#ifndef TAINT /* we aren't taintperl or suidperl */
+ if (euid != uid || egid != gid) { /* (suidperl doesn't exist, in fact) */
+#ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
+ fstat(fileno(rsfp),&statbuf); /* may be either wrapped or real suid */
+ if ((euid != uid && euid == statbuf.st_uid && statbuf.st_mode & S_ISUID)
+ ||
+ (egid != gid && egid == statbuf.st_gid && statbuf.st_mode & S_ISGID)
+ )
+ if (!do_undump)
+ fatal("YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
+FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
+#endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
+ /* not set-id, must be wrapped */
+ (void)fclose(rsfp);
+ (void)sprintf(buf, "%s/tperl%s", BIN, patchlevel);
+ execv(buf, origargv); /* try again */
+ fatal("Can't run setuid script with taint checks");
+ }
+#endif /* TAINT */
+#endif /* DOSUID */
+
+#if !defined(IAMSUID) && !defined(TAINT)
+
+ /* skip forward in input to the real script? */
+
+ while (doextract) {
+ if ((s = str_gets(linestr, rsfp, 0)) == Nullch)
+ fatal("No Perl script found in input\n");
+ if (*s == '#' && s[1] == '!' && instr(s,"perl")) {
+ ungetc('\n',rsfp); /* to keep line count right */
+ doextract = FALSE;
+ if (s = instr(s,"perl -")) {
+ s += 6;
+ while (s = moreswitches(s)) ;
+ }
+ if (cddir && chdir(cddir) < 0)
+ fatal("Can't chdir to %s",cddir);
+ }
+ }
+#endif /* !defined(IAMSUID) && !defined(TAINT) */
+
+ defstab = stabent("_",TRUE);
+
+ if (perldb) {
+ debstash = hnew(0);
+ stab_xhash(stabent("_DB",TRUE)) = debstash;
+ curstash = debstash;
+ dbargs = stab_xarray(aadd((tmpstab = stabent("args",TRUE))));
+ tmpstab->str_pok |= SP_MULTI;
+ dbargs->ary_flags = 0;
+ subname = str_make("main",4);
+ DBstab = stabent("DB",TRUE);
+ DBstab->str_pok |= SP_MULTI;
+ DBline = stabent("dbline",TRUE);
+ DBline->str_pok |= SP_MULTI;
+ DBsub = hadd(tmpstab = stabent("sub",TRUE));
+ tmpstab->str_pok |= SP_MULTI;
+ DBsingle = stab_val((tmpstab = stabent("single",TRUE)));
+ tmpstab->str_pok |= SP_MULTI;
+ DBtrace = stab_val((tmpstab = stabent("trace",TRUE)));
+ tmpstab->str_pok |= SP_MULTI;
+ DBsignal = stab_val((tmpstab = stabent("signal",TRUE)));
+ tmpstab->str_pok |= SP_MULTI;
+ curstash = defstash;
+ }
+
+ /* init tokener */
+
+ bufend = bufptr = str_get(linestr);
+
+ savestack = anew(Nullstab); /* for saving non-local values */
+ stack = anew(Nullstab); /* for saving non-local values */
+ stack->ary_flags = 0; /* not a real array */
+ afill(stack,63); afill(stack,-1); /* preextend stack */
+ afill(savestack,63); afill(savestack,-1);
+
+ /* now parse the script */
+
+ error_count = 0;
+ if (yyparse() || error_count) {
+ if (minus_c)
+ fatal("%s had compilation errors.\n", origfilename);
+ else {
+ fatal("Execution of %s aborted due to compilation errors.\n",
+ origfilename);
+ }
+ }
+
+ New(50,loop_stack,128,struct loop);
+#ifdef DEBUGGING
+ if (debug) {
+ New(51,debname,128,char);
+ New(52,debdelim,128,char);
+ }
+#endif
+ curstash = defstash;
+
+ preprocess = FALSE;
+ if (e_fp) {
+ e_fp = Nullfp;
+ (void)UNLINK(e_tmpname);
+ }
+
+ /* initialize everything that won't change if we undump */
+
+ if (sigstab = stabent("SIG",allstabs)) {
+ sigstab->str_pok |= SP_MULTI;
+ (void)hadd(sigstab);
+ }
+
+ magicalize("!#?^~=-%.+&*()<>,\\/[|`':\004\t\024\027");
+ userinit(); /* in case linked C routines want magical variables */
+
+ amperstab = stabent("&",allstabs);
+ leftstab = stabent("`",allstabs);
+ rightstab = stabent("'",allstabs);
+ sawampersand = (amperstab || leftstab || rightstab);
+ if (tmpstab = stabent(":",allstabs))
+ str_set(STAB_STR(tmpstab),chopset);
+ if (tmpstab = stabent("\024",allstabs))
+ time(&basetime);
+
+ /* these aren't necessarily magical */
+ if (tmpstab = stabent(";",allstabs))
+ str_set(STAB_STR(tmpstab),"\034");
+ if (tmpstab = stabent("]",allstabs)) {
+ str = STAB_STR(tmpstab);
+ str_set(str,rcsid);
+ str->str_u.str_nval = atof(patchlevel);
+ str->str_nok = 1;
+ }
+ str_nset(stab_val(stabent("\"", TRUE)), " ", 1);
+
+ stdinstab = stabent("STDIN",TRUE);
+ stdinstab->str_pok |= SP_MULTI;
+ stab_io(stdinstab) = stio_new();
+ stab_io(stdinstab)->ifp = stdin;
+ tmpstab = stabent("stdin",TRUE);
+ stab_io(tmpstab) = stab_io(stdinstab);
+ tmpstab->str_pok |= SP_MULTI;
+
+ tmpstab = stabent("STDOUT",TRUE);
+ tmpstab->str_pok |= SP_MULTI;
+ stab_io(tmpstab) = stio_new();
+ stab_io(tmpstab)->ofp = stab_io(tmpstab)->ifp = stdout;
+ defoutstab = tmpstab;
+ tmpstab = stabent("stdout",TRUE);
+ stab_io(tmpstab) = stab_io(defoutstab);
+ tmpstab->str_pok |= SP_MULTI;
+
+ curoutstab = stabent("STDERR",TRUE);
+ curoutstab->str_pok |= SP_MULTI;
+ stab_io(curoutstab) = stio_new();
+ stab_io(curoutstab)->ofp = stab_io(curoutstab)->ifp = stderr;
+ tmpstab = stabent("stderr",TRUE);
+ stab_io(tmpstab) = stab_io(curoutstab);
+ tmpstab->str_pok |= SP_MULTI;
+ curoutstab = defoutstab; /* switch back to STDOUT */
+
+ statname = Str_new(66,0); /* last filename we did stat on */
+
+ /* now that script is parsed, we can modify record separator */
+
+ rs = nrs;
+ rslen = nrslen;
+ rschar = nrschar;
+ str_nset(stab_val(stabent("/", TRUE)), rs, rslen);
+
+ if (do_undump)
+ my_unexec();
+
+ just_doit: /* come here if running an undumped a.out */
+ argc--,argv++; /* skip name of script */
+ if (doswitches) {
+ for (; argc > 0 && **argv == '-'; argc--,argv++) {
+ if (argv[0][1] == '-') {
+ argc--,argv++;
+ break;
+ }
+ if (s = index(argv[0], '=')) {
+ *s++ = '\0';
+ str_set(stab_val(stabent(argv[0]+1,TRUE)),s);
+ }
+ else
+ str_numset(stab_val(stabent(argv[0]+1,TRUE)),(double)1.0);
+ }
+ }
+#ifdef TAINT
+ tainted = 1;
+#endif
+ if (tmpstab = stabent("0",allstabs)) {
+ str_set(stab_val(tmpstab),origfilename);
+ magicname("0", Nullch, 0);
+ }
+ if (tmpstab = stabent("\020",allstabs))
+ str_set(stab_val(tmpstab),origargv[0]);
+ if (argvstab = stabent("ARGV",allstabs)) {
+ argvstab->str_pok |= SP_MULTI;
+ (void)aadd(argvstab);
+ aclear(stab_array(argvstab));
+ for (; argc > 0; argc--,argv++) {
+ (void)apush(stab_array(argvstab),str_make(argv[0],0));
+ }
+ }
+#ifdef TAINT
+ (void) stabent("ENV",TRUE); /* must test PATH and IFS */
+#endif
+ if (envstab = stabent("ENV",allstabs)) {
+ envstab->str_pok |= SP_MULTI;
+ (void)hadd(envstab);
+ hclear(stab_hash(envstab), FALSE);
+ if (env != environ)
+ environ[0] = Nullch;
+ for (; *env; env++) {
+ if (!(s = index(*env,'=')))
+ continue;
+ *s++ = '\0';
+ str = str_make(s--,0);
+ str_magic(str, envstab, 'E', *env, s - *env);
+ (void)hstore(stab_hash(envstab), *env, s - *env, str, 0);
+ *s = '=';
+ }
+ }
+#ifdef TAINT
+ tainted = 0;
+#endif
+ if (tmpstab = stabent("$",allstabs))
+ str_numset(STAB_STR(tmpstab),(double)getpid());
+
+ if (dowarn) {
+ stab_check('A','Z');
+ stab_check('a','z');
+ }
+
+ if (setjmp(top_env)) /* sets goto_targ on longjump */
+ loop_ptr = -1; /* start label stack again */
+
+#ifdef DEBUGGING
+ if (debug & 1024)
+ dump_all();
+ if (debug)
+ fprintf(stderr,"\nEXECUTING...\n\n");
+#endif
+
+ if (minus_c) {
+ fprintf(stderr,"%s syntax OK\n", origfilename);
+ exit(0);
+ }
+
+ /* do it */
+
+ (void) cmd_exec(main_root,G_SCALAR,-1);
+
+ if (goto_targ)
+ fatal("Can't find label \"%s\"--aborting",goto_targ);
+ exit(0);
+ /* NOTREACHED */
+}
+
+void
+magicalize(list)
+register char *list;
+{
+ char sym[2];
+
+ sym[1] = '\0';
+ while (*sym = *list++)
+ magicname(sym, Nullch, 0);
+}
+
+void
+magicname(sym,name,namlen)
+char *sym;
+char *name;
+int namlen;
+{
+ register STAB *stab;
+
+ if (stab = stabent(sym,allstabs)) {
+ stab_flags(stab) = SF_VMAGIC;
+ str_magic(stab_val(stab), stab, 0, name, namlen);
+ }
+}
+
+/* this routine is in perl.c by virtue of being sort of an alternate main() */
+
+int
+do_eval(str,optype,stash,gimme,arglast)
+STR *str;
+int optype;
+HASH *stash;
+int gimme;
+int *arglast;
+{
+ STR **st = stack->ary_array;
+ int retval;
+ CMD *myroot = Nullcmd;
+ ARRAY *ar;
+ int i;
+ CMD * VOLATILE oldcurcmd = curcmd;
+ VOLATILE int oldtmps_base = tmps_base;
+ VOLATILE int oldsave = savestack->ary_fill;
+ VOLATILE int oldperldb = perldb;
+ SPAT * VOLATILE oldspat = curspat;
+ SPAT * VOLATILE oldlspat = lastspat;
+ static char *last_eval = Nullch;
+ static CMD *last_root = Nullcmd;
+ VOLATILE int sp = arglast[0];
+ char *specfilename;
+ char *tmpfilename;
+ int parsing = 1;
+
+ tmps_base = tmps_max;
+ if (curstash != stash) {
+ (void)savehptr(&curstash);
+ curstash = stash;
+ }
+ str_set(stab_val(stabent("@",TRUE)),"");
+ if (curcmd->c_line == 0) /* don't debug debugger... */
+ perldb = FALSE;
+ curcmd = &compiling;
+ if (optype == O_EVAL) { /* normal eval */
+ curcmd->c_filestab = fstab("(eval)");
+ curcmd->c_line = 1;
+ str_sset(linestr,str);
+ str_cat(linestr,";"); /* be kind to them */
+ }
+ else {
+ if (last_root && !in_eval) {
+ Safefree(last_eval);
+ last_eval = Nullch;
+ cmd_free(last_root);
+ last_root = Nullcmd;
+ }
+ specfilename = str_get(str);
+ str_set(linestr,"");
+ if (optype == O_REQUIRE && &str_undef !=
+ hfetch(stab_hash(incstab), specfilename, strlen(specfilename), 0)) {
+ curcmd = oldcurcmd;
+ tmps_base = oldtmps_base;
+ st[++sp] = &str_yes;
+ perldb = oldperldb;
+ return sp;
+ }
+ tmpfilename = savestr(specfilename);
+ if (index("/.", *tmpfilename))
+ rsfp = fopen(tmpfilename,"r");
+ else {
+ ar = stab_array(incstab);
+ for (i = 0; i <= ar->ary_fill; i++) {
+ (void)sprintf(buf, "%s/%s",
+ str_get(afetch(ar,i,TRUE)), specfilename);
+ rsfp = fopen(buf,"r");
+ if (rsfp) {
+ char *s = buf;
+
+ if (*s == '.' && s[1] == '/')
+ s += 2;
+ Safefree(tmpfilename);
+ tmpfilename = savestr(s);
+ break;
+ }
+ }
+ }
+ curcmd->c_filestab = fstab(tmpfilename);
+ Safefree(tmpfilename);
+ tmpfilename = Nullch;
+ if (!rsfp) {
+ curcmd = oldcurcmd;
+ tmps_base = oldtmps_base;
+ if (optype == O_REQUIRE) {
+ sprintf(tokenbuf,"Can't locate %s in @INC", specfilename);
+ if (instr(tokenbuf,".h "))
+ strcat(tokenbuf," (change .h to .ph maybe?)");
+ if (instr(tokenbuf,".ph "))
+ strcat(tokenbuf," (did you run h2ph?)");
+ fatal("%s",tokenbuf);
+ }
+ if (gimme != G_ARRAY)
+ st[++sp] = &str_undef;
+ perldb = oldperldb;
+ return sp;
+ }
+ curcmd->c_line = 0;
+ }
+ in_eval++;
+ oldoldbufptr = oldbufptr = bufptr = str_get(linestr);
+ bufend = bufptr + linestr->str_cur;
+ if (++loop_ptr >= loop_max) {
+ loop_max += 128;
+ Renew(loop_stack, loop_max, struct loop);
+ }
+ loop_stack[loop_ptr].loop_label = "_EVAL_";
+ loop_stack[loop_ptr].loop_sp = sp;
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Pushing label #%d _EVAL_)\n", loop_ptr);
+ }
+#endif
+ eval_root = Nullcmd;
+ if (setjmp(loop_stack[loop_ptr].loop_env)) {
+ retval = 1;
+ }
+ else {
+ error_count = 0;
+ if (rsfp) {
+ retval = yyparse();
+ retval |= error_count;
+ }
+ else if (last_root && *bufptr == *last_eval && strEQ(bufptr,last_eval)){
+ retval = 0;
+ eval_root = last_root; /* no point in reparsing */
+ }
+ else if (in_eval == 1) {
+ if (last_root) {
+ Safefree(last_eval);
+ last_eval = Nullch;
+ cmd_free(last_root);
+ }
+ last_root = Nullcmd;
+ last_eval = savestr(bufptr);
+ retval = yyparse();
+ retval |= error_count;
+ if (!retval)
+ last_root = eval_root;
+ if (!last_root) {
+ Safefree(last_eval);
+ last_eval = Nullch;
+ }
+ }
+ else
+ retval = yyparse();
+ }
+ myroot = eval_root; /* in case cmd_exec does another eval! */
+
+ if (retval) {
+ st = stack->ary_array;
+ sp = arglast[0];
+ if (gimme != G_ARRAY)
+ st[++sp] = &str_undef;
+ if (parsing) {
+#ifndef MANGLEDPARSE
+#ifdef DEBUGGING
+ if (debug & 128)
+ fprintf(stderr,"Freeing eval_root %lx\n",(long)eval_root);
+#endif
+ cmd_free(eval_root);
+#endif
+ if (eval_root == last_root)
+ last_root = Nullcmd;
+ eval_root = myroot = Nullcmd;
+ }
+ if (rsfp) {
+ fclose(rsfp);
+ rsfp = 0;
+ }
+ }
+ else {
+ parsing = 0;
+ sp = cmd_exec(eval_root,gimme,sp);
+ st = stack->ary_array;
+ for (i = arglast[0] + 1; i <= sp; i++)
+ st[i] = str_mortal(st[i]);
+ /* if we don't save result, free zaps it */
+ if (in_eval != 1 && myroot != last_root)
+ cmd_free(myroot);
+ }
+
+ perldb = oldperldb;
+ in_eval--;
+#ifdef DEBUGGING
+ if (debug & 4) {
+ char *tmps = loop_stack[loop_ptr].loop_label;
+ deb("(Popping label #%d %s)\n",loop_ptr,
+ tmps ? tmps : "" );
+ }
+#endif
+ loop_ptr--;
+ tmps_base = oldtmps_base;
+ curspat = oldspat;
+ lastspat = oldlspat;
+ if (savestack->ary_fill > oldsave) /* let them use local() */
+ restorelist(oldsave);
+
+ if (optype != O_EVAL) {
+ if (retval) {
+ if (optype == O_REQUIRE)
+ fatal("%s", str_get(stab_val(stabent("@",TRUE))));
+ }
+ else {
+ curcmd = oldcurcmd;
+ if (gimme == G_SCALAR ? str_true(st[sp]) : sp > arglast[0]) {
+ (void)hstore(stab_hash(incstab), specfilename,
+ strlen(specfilename), str_smake(stab_val(curcmd->c_filestab)),
+ 0 );
+ }
+ else if (optype == O_REQUIRE)
+ fatal("%s did not return a true value", specfilename);
+ }
+ }
+ curcmd = oldcurcmd;
+ return sp;
+}
+
+/* This routine handles any switches that can be given during run */
+
+static char *
+moreswitches(s)
+char *s;
+{
+ int numlen;
+
+ reswitch:
+ switch (*s) {
+ case '0':
+ nrschar = scanoct(s, 4, &numlen);
+ nrs = nsavestr("\n",1);
+ *nrs = nrschar;
+ if (nrschar > 0377) {
+ nrslen = 0;
+ nrs = "";
+ }
+ else if (!nrschar && numlen >= 2) {
+ nrslen = 2;
+ nrs = "\n\n";
+ nrschar = '\n';
+ }
+ return s + numlen;
+ case 'a':
+ minus_a = TRUE;
+ s++;
+ return s;
+ case 'c':
+ minus_c = TRUE;
+ s++;
+ return s;
+ case 'd':
+#ifdef TAINT
+ if (euid != uid || egid != gid)
+ fatal("No -d allowed in setuid scripts");
+#endif
+ perldb = TRUE;
+ s++;
+ return s;
+ case 'D':
+#ifdef DEBUGGING
+#ifdef TAINT
+ if (euid != uid || egid != gid)
+ fatal("No -D allowed in setuid scripts");
+#endif
+ debug = atoi(s+1) | 32768;
+#else
+ warn("Recompile perl with -DDEBUGGING to use -D switch\n");
+#endif
+ for (s++; isdigit(*s); s++) ;
+ return s;
+ case 'i':
+ inplace = savestr(s+1);
+ for (s = inplace; *s && !isspace(*s); s++) ;
+ *s = '\0';
+ break;
+ case 'I':
+#ifdef TAINT
+ if (euid != uid || egid != gid)
+ fatal("No -I allowed in setuid scripts");
+#endif
+ if (*++s) {
+ (void)apush(stab_array(incstab),str_make(s,0));
+ }
+ else
+ fatal("No space allowed after -I");
+ break;
+ case 'l':
+ minus_l = TRUE;
+ s++;
+ if (isdigit(*s)) {
+ ors = savestr("\n");
+ orslen = 1;
+ *ors = scanoct(s, 3 + (*s == '0'), &numlen);
+ s += numlen;
+ }
+ else {
+ ors = nsavestr(nrs,nrslen);
+ orslen = nrslen;
+ }
+ return s;
+ case 'n':
+ minus_n = TRUE;
+ s++;
+ return s;
+ case 'p':
+ minus_p = TRUE;
+ s++;
+ return s;
+ case 'u':
+ do_undump = TRUE;
+ s++;
+ return s;
+ case 'U':
+ unsafe = TRUE;
+ s++;
+ return s;
+ case 'v':
+ fputs("\nThis is perl, version 4.0\n\n",stdout);
+ fputs(rcsid,stdout);
+ fputs("\nCopyright (c) 1989, 1990, 1991, Larry Wall\n",stdout);
+#ifdef MSDOS
+ fputs("MS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n",
+ stdout);
+#ifdef OS2
+ fputs("OS/2 port Copyright (c) 1990, Raymond Chen, Kai Uwe Rommel\n",
+ stdout);
+#endif
+#endif
+ fputs("\n\
+Perl may be copied only under the terms of the GNU General Public License,\n\
+a copy of which can be found with the Perl 4.0 distribution kit.\n",stdout);
+#ifdef MSDOS
+ usage(origargv[0]);
+#endif
+ exit(0);
+ case 'w':
+ dowarn = TRUE;
+ s++;
+ return s;
+ case ' ':
+ case '\n':
+ case '\t':
+ break;
+ default:
+ fatal("Switch meaningless after -x: -%s",s);
+ }
+ return Nullch;
+}
+
+/* compliments of Tom Christiansen */
+
+/* unexec() can be found in the Gnu emacs distribution */
+
+my_unexec()
+{
+#ifdef UNEXEC
+ int status;
+ extern int etext;
+ static char dumpname[BUFSIZ];
+ static char perlpath[256];
+
+ sprintf (dumpname, "%s.perldump", origfilename);
+ sprintf (perlpath, "%s/perl", BIN);
+
+ status = unexec(dumpname, perlpath, &etext, sbrk(0), 0);
+ if (status)
+ fprintf(stderr, "unexec of %s into %s failed!\n", perlpath, dumpname);
+ exit(status);
+#else
+# ifndef SIGABRT
+# define SIGABRT SIGILL
+# endif
+# ifndef SIGILL
+# define SIGILL 6 /* blech */
+# endif
+ kill(getpid(),SIGABRT); /* for use with undump */
+#endif
+}
+
diff --git a/MultiSource/Benchmarks/MallocBench/perl/perl.h b/MultiSource/Benchmarks/MallocBench/perl/perl.h
new file mode 100644
index 00000000..3b7e6437
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/perl.h
@@ -0,0 +1,829 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/11 17:49:51 lwall
+ * patch1: hopefully straightened out some of the Xenix mess
+ *
+ * Revision 4.0 91/03/20 01:37:56 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#define VOIDWANT 1
+#include "config.h"
+
+#ifdef MSDOS
+/* This stuff now in the MS-DOS config.h file. */
+#else /* !MSDOS */
+
+/*
+ * The following symbols are defined if your operating system supports
+ * functions by that name. All Unixes I know of support them, thus they
+ * are not checked by the configuration script, but are directly defined
+ * here.
+ */
+#define HAS_ALARM
+#define HAS_CHOWN
+#define HAS_CHROOT
+#define HAS_FORK
+#define HAS_GETLOGIN
+#define HAS_GETPPID
+#define HAS_KILL
+#define HAS_LINK
+#define HAS_PIPE
+#define HAS_WAIT
+#define HAS_UMASK
+/*
+ * The following symbols are defined if your operating system supports
+ * password and group functions in general. All Unix systems do.
+ */
+#define HAS_GROUP
+#define HAS_PASSWD
+
+#endif /* !MSDOS */
+
+#if defined(HASVOLATILE) || defined(__STDC__)
+#define VOLATILE volatile
+#else
+#define VOLATILE
+#endif
+
+#ifdef IAMSUID
+# ifndef TAINT
+# define TAINT
+# endif
+#endif
+
+#ifndef HAS_VFORK
+# define vfork fork
+#endif
+
+#ifdef HAS_GETPGRP2
+# ifndef HAS_GETPGRP
+# define HAS_GETPGRP
+# endif
+# define getpgrp getpgrp2
+#endif
+
+#ifdef HAS_SETPGRP2
+# ifndef HAS_SETPGRP
+# define HAS_SETPGRP
+# endif
+# define setpgrp setpgrp2
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+#include <setjmp.h>
+#ifndef MSDOS
+#include <sys/param.h> /* if this needs types.h we're still wrong */
+#endif
+#ifdef __STDC__
+/* Use all the "standard" definitions */
+//#include <stdlib.h>
+#include <string.h>
+#endif /* __STDC__ */
+
+#if defined(HAS_MEMCMP) && defined(mips) && BYTEORDER == 0x1234
+#undef HAS_MEMCMP
+#endif
+
+#ifdef HAS_MEMCPY
+
+# ifndef __STDC__
+# ifndef memcpy
+extern char * memcpy(), *memset();
+extern int memcmp();
+# endif /* ndef memcpy */
+# endif /* ndef __STDC__ */
+
+#define bcopy(s1,s2,l) memcpy(s2,s1,l)
+#define bzero(s,l) memset(s,0,l)
+#endif /* HAS_MEMCPY */
+
+#ifndef HAS_BCMP /* prefer bcmp slightly 'cuz it doesn't order */
+#define bcmp(s1,s2,l) memcmp(s1,s2,l)
+#endif
+
+#ifndef _TYPES_ /* If types.h defines this it's easy. */
+#ifndef major /* Does everyone's types.h define this? */
+#include <sys/types.h>
+#endif
+#endif
+
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+
+#include <sys/stat.h>
+
+#ifdef I_TIME
+# include <time.h>
+#endif
+
+#ifdef I_SYS_TIME
+# ifdef SYSTIMEKERNEL
+# define KERNEL
+# endif
+# include <sys/time.h>
+# ifdef SYSTIMEKERNEL
+# undef KERNEL
+# endif
+#endif
+
+#ifndef MSDOS
+#include <sys/times.h>
+#endif
+
+#if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
+#undef HAS_STRERROR
+#endif
+
+#include <errno.h>
+#ifndef MSDOS
+#ifndef errno
+extern int errno; /* ANSI allows errno to be an lvalue expr */
+#endif
+#endif
+
+#ifndef strerror
+#ifdef HAS_STRERROR
+char *strerror();
+#else
+extern int sys_nerr;
+extern char *sys_errlist[];
+#define strerror(e) ((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
+#endif
+#endif
+
+#ifdef I_SYSIOCTL
+#ifndef _IOCTL_
+#include <sys/ioctl.h>
+#endif
+#endif
+
+#if defined(mc300) || defined(mc500) || defined(mc700) /* MASSCOMP */
+#ifdef HAS_SOCKETPAIR
+#undef HAS_SOCKETPAIR
+#endif
+#ifdef HAS_NDBM
+#undef HAS_NDBM
+#endif
+#endif
+
+#ifdef HAS_GDBM
+#ifdef I_GDBM
+#include <gdbm.h>
+#endif
+#define SOME_DBM
+#ifdef HAS_NDBM
+#undef HAS_NDBM
+#endif
+#ifdef HAS_ODBM
+#undef HAS_ODBM
+#endif
+#else
+#ifdef HAS_NDBM
+#include <ndbm.h>
+#define SOME_DBM
+#ifdef HAS_ODBM
+#undef HAS_ODBM
+#endif
+#else
+#ifdef HAS_ODBM
+#ifdef NULL
+#undef NULL /* suppress redefinition message */
+#endif
+#include <dbm.h>
+#ifdef NULL
+#undef NULL
+#endif
+#define NULL 0 /* silly thing is, we don't even use this */
+#define SOME_DBM
+#define dbm_fetch(db,dkey) fetch(dkey)
+#define dbm_delete(db,dkey) delete(dkey)
+#define dbm_store(db,dkey,dcontent,flags) store(dkey,dcontent)
+#define dbm_close(db) dbmclose()
+#define dbm_firstkey(db) firstkey()
+#endif /* HAS_ODBM */
+#endif /* HAS_NDBM */
+#endif /* HAS_GDBM */
+#ifdef SOME_DBM
+EXT char *dbmkey;
+EXT int dbmlen;
+#endif
+
+#if INTSIZE == 2
+#define htoni htons
+#define ntohi ntohs
+#else
+#define htoni htonl
+#define ntohi ntohl
+#endif
+
+#if defined(I_DIRENT)
+# include <dirent.h>
+# define DIRENT dirent
+#else
+# ifdef I_SYS_NDIR
+# include <sys/ndir.h>
+# define DIRENT direct
+# else
+# ifdef I_SYS_DIR
+# ifdef hp9000s500
+# include <ndir.h> /* may be wrong in the future */
+# else
+# include <sys/dir.h>
+# endif
+# define DIRENT direct
+# endif
+# endif
+#endif
+
+/*
+ * The following gobbledygook brought to you on behalf of __STDC__.
+ * (I could just use #ifndef __STDC__, but this is more bulletproof
+ * in the face of half-implementations.)
+ */
+
+#ifndef S_IFMT
+# ifdef _S_IFMT
+# define S_IFMT _S_IFMT
+# else
+# define S_IFMT 0170000
+# endif
+#endif
+
+#ifndef S_ISDIR
+# define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
+#endif
+
+#ifndef S_ISCHR
+# define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
+#endif
+
+#ifndef S_ISBLK
+# ifdef S_IFBLK
+# define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
+# else
+# define S_ISBLK(m) (0)
+# endif
+#endif
+
+#ifndef S_ISREG
+# define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
+#endif
+
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+# define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
+# else
+# define S_ISFIFO(m) (0)
+# endif
+#endif
+
+#ifndef S_ISLNK
+# ifdef _S_ISLNK
+# define S_ISLNK(m) _S_ISLNK(m)
+# else
+# ifdef _S_IFLNK
+# define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
+# else
+# ifdef S_IFLNK
+# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
+# else
+# define S_ISLNK(m) (0)
+# endif
+# endif
+# endif
+#endif
+
+#ifndef S_ISSOCK
+# ifdef _S_ISSOCK
+# define S_ISSOCK(m) _S_ISSOCK(m)
+# else
+# ifdef _S_IFSOCK
+# define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
+# else
+# ifdef S_IFSOCK
+# define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
+# else
+# define S_ISSOCK(m) (0)
+# endif
+# endif
+# endif
+#endif
+
+#ifndef S_IRUSR
+# ifdef S_IREAD
+# define S_IRUSR S_IREAD
+# define S_IWUSR S_IWRITE
+# define S_IXUSR S_IEXEC
+# else
+# define S_IRUSR 0400
+# define S_IWUSR 0200
+# define S_IXUSR 0100
+# endif
+# define S_IRGRP (S_IRUSR>>3)
+# define S_IWGRP (S_IWUSR>>3)
+# define S_IXGRP (S_IXUSR>>3)
+# define S_IROTH (S_IRUSR>>6)
+# define S_IWOTH (S_IWUSR>>6)
+# define S_IXOTH (S_IXUSR>>6)
+#endif
+
+#ifndef S_ISUID
+# define S_ISUID 04000
+#endif
+
+#ifndef S_ISGID
+# define S_ISGID 02000
+#endif
+
+typedef unsigned int STRLEN;
+
+typedef struct arg ARG;
+typedef struct cmd CMD;
+typedef struct formcmd FCMD;
+typedef struct scanpat SPAT;
+typedef struct stio STIO;
+typedef struct sub SUBR;
+typedef struct string STR;
+typedef struct atbl ARRAY;
+typedef struct htbl HASH;
+typedef struct regexp REGEXP;
+typedef struct stabptrs STBP;
+typedef struct stab STAB;
+typedef struct callsave CSV;
+
+#include "handy.h"
+#include "regexp.h"
+#include "str.h"
+#include "util.h"
+#include "form.h"
+#include "stab.h"
+#include "spat.h"
+#include "arg.h"
+#include "cmd.h"
+#include "array.h"
+#include "hash.h"
+
+#if defined(iAPX286) || defined(M_I286) || defined(I80286)
+# define I286
+#endif
+
+#ifndef __STDC__
+#ifdef CHARSPRINTF
+ char *sprintf();
+#else
+ int sprintf();
+#endif
+#endif
+
+EXT char *Yes INIT("1");
+EXT char *No INIT("");
+
+/* "gimme" values */
+
+/* Note: cmd.c assumes that it can use && to produce one of these values! */
+#define G_SCALAR 0
+#define G_ARRAY 1
+
+#ifdef CRIPPLED_CC
+int str_true();
+#else /* !CRIPPLED_CC */
+#define str_true(str) (Str = (str), \
+ (Str->str_pok ? \
+ ((*Str->str_ptr > '0' || \
+ Str->str_cur > 1 || \
+ (Str->str_cur && *Str->str_ptr != '0')) ? 1 : 0) \
+ : \
+ (Str->str_nok ? (Str->str_u.str_nval != 0.0) : 0 ) ))
+#endif /* CRIPPLED_CC */
+
+#ifdef DEBUGGING
+#define str_peek(str) (Str = (str), \
+ (Str->str_pok ? \
+ Str->str_ptr : \
+ (Str->str_nok ? \
+ (sprintf(tokenbuf,"num(%g)",Str->str_u.str_nval), \
+ (char*)tokenbuf) : \
+ "" )))
+#endif
+
+#ifdef CRIPPLED_CC
+char *str_get();
+#else
+#ifdef TAINT
+#define str_get(str) (Str = (str), tainted |= Str->str_tainted, \
+ (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
+#else
+#define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
+#endif /* TAINT */
+#endif /* CRIPPLED_CC */
+
+#ifdef CRIPPLED_CC
+double str_gnum();
+#else /* !CRIPPLED_CC */
+#ifdef TAINT
+#define str_gnum(str) (Str = (str), tainted |= Str->str_tainted, \
+ (Str->str_nok ? Str->str_u.str_nval : str_2num(Str)))
+#else /* !TAINT */
+#define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_u.str_nval : str_2num(Str)))
+#endif /* TAINT*/
+#endif /* CRIPPLED_CC */
+EXT STR *Str;
+
+#define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
+
+#ifndef MSDOS
+#define STR_GROW(str,len) if ((str)->str_len < (len)) str_grow(str,len)
+#define Str_Grow str_grow
+#else
+/* extra parentheses intentionally NOT placed around "len"! */
+#define STR_GROW(str,len) if ((str)->str_len < (unsigned long)len) \
+ str_grow(str,(unsigned long)len)
+#define Str_Grow(str,len) str_grow(str,(unsigned long)(len))
+#endif /* MSDOS */
+
+#ifndef BYTEORDER
+#define BYTEORDER 0x1234
+#endif
+
+#if defined(htonl) && !defined(HAS_HTONL)
+#define HAS_HTONL
+#endif
+#if defined(htons) && !defined(HAS_HTONS)
+#define HAS_HTONS
+#endif
+#if defined(ntohl) && !defined(HAS_NTOHL)
+#define HAS_NTOHL
+#endif
+#if defined(ntohs) && !defined(HAS_NTOHS)
+#define HAS_NTOHS
+#endif
+#ifndef HAS_HTONL
+#if (BYTEORDER & 0xffff) != 0x4321
+#define HAS_HTONS
+#define HAS_HTONL
+#define HAS_NTOHS
+#define HAS_NTOHL
+#define MYSWAP
+#define htons my_swap
+#define htonl my_htonl
+#define ntohs my_swap
+#define ntohl my_ntohl
+#endif
+#else
+#if (BYTEORDER & 0xffff) == 0x4321
+#undef HAS_HTONS
+#undef HAS_HTONL
+#undef HAS_NTOHS
+#undef HAS_NTOHL
+#endif
+#endif
+
+#ifdef CASTNEGFLOAT
+#define U_S(what) ((unsigned short)(what))
+#define U_I(what) ((unsigned int)(what))
+#define U_L(what) ((unsigned long)(what))
+#else
+unsigned long castulong();
+#define U_S(what) ((unsigned int)castulong(what))
+#define U_I(what) ((unsigned int)castulong(what))
+#define U_L(what) (castulong(what))
+#endif
+
+CMD *add_label();
+CMD *block_head();
+CMD *append_line();
+CMD *make_acmd();
+CMD *make_ccmd();
+CMD *make_icmd();
+CMD *invert();
+CMD *addcond();
+CMD *addloop();
+CMD *wopt();
+CMD *over();
+
+STAB *stabent();
+STAB *genstab();
+
+ARG *stab2arg();
+ARG *op_new();
+ARG *make_op();
+ARG *make_match();
+ARG *make_split();
+ARG *rcatmaybe();
+ARG *listish();
+ARG *maybelistish();
+ARG *localize();
+ARG *fixeval();
+ARG *jmaybe();
+ARG *l();
+ARG *fixl();
+ARG *mod_match();
+ARG *make_list();
+ARG *cmd_to_arg();
+ARG *addflags();
+ARG *hide_ary();
+ARG *cval_to_arg();
+
+STR *str_new();
+STR *stab_str();
+
+int do_each();
+int do_subr();
+int do_match();
+int do_unpack();
+int eval(); /* this evaluates expressions */
+int do_eval(); /* this evaluates eval operator */
+int do_assign();
+
+SUBR *make_sub();
+
+FCMD *load_format();
+
+char *scanpat();
+char *scansubst();
+char *scantrans();
+char *scanstr();
+char *scanident();
+char *str_append_till();
+char *str_gets();
+char *str_grow();
+
+bool do_open();
+bool do_close();
+bool do_print();
+bool do_aprint();
+bool do_exec();
+bool do_aexec();
+
+int do_subst();
+int cando();
+int ingroup();
+
+void str_replace();
+void str_inc();
+void str_dec();
+void str_free();
+void stab_clear();
+void do_join();
+void do_sprintf();
+void do_accept();
+void do_pipe();
+void do_vecset();
+void do_unshift();
+void do_execfree();
+void magicalize();
+void magicname();
+void savelist();
+void saveitem();
+void saveint();
+void savelong();
+void savesptr();
+void savehptr();
+void restorelist();
+void repeatcpy();
+HASH *savehash();
+ARRAY *saveary();
+
+EXT char **origargv;
+EXT int origargc;
+EXT char **origenviron;
+extern char **environ;
+
+EXT line_t subline INIT(0);
+EXT STR *subname INIT(Nullstr);
+EXT int arybase INIT(0);
+
+struct outrec {
+ long o_lines;
+ char *o_str;
+ int o_len;
+};
+
+EXT struct outrec outrec;
+EXT struct outrec toprec;
+
+EXT STAB *stdinstab INIT(Nullstab);
+EXT STAB *last_in_stab INIT(Nullstab);
+EXT STAB *defstab INIT(Nullstab);
+EXT STAB *argvstab INIT(Nullstab);
+EXT STAB *envstab INIT(Nullstab);
+EXT STAB *sigstab INIT(Nullstab);
+EXT STAB *defoutstab INIT(Nullstab);
+EXT STAB *curoutstab INIT(Nullstab);
+EXT STAB *argvoutstab INIT(Nullstab);
+EXT STAB *incstab INIT(Nullstab);
+EXT STAB *leftstab INIT(Nullstab);
+EXT STAB *amperstab INIT(Nullstab);
+EXT STAB *rightstab INIT(Nullstab);
+EXT STAB *DBstab INIT(Nullstab);
+EXT STAB *DBline INIT(Nullstab);
+EXT STAB *DBsub INIT(Nullstab);
+
+EXT HASH *defstash; /* main symbol table */
+EXT HASH *curstash; /* symbol table for current package */
+EXT HASH *debstash; /* symbol table for perldb package */
+
+EXT STR *curstname; /* name of current package */
+
+EXT STR *freestrroot INIT(Nullstr);
+EXT STR *lastretstr INIT(Nullstr);
+EXT STR *DBsingle INIT(Nullstr);
+EXT STR *DBtrace INIT(Nullstr);
+EXT STR *DBsignal INIT(Nullstr);
+
+EXT int lastspbase;
+EXT int lastsize;
+
+EXT char *hexdigit INIT("0123456789abcdef0123456789ABCDEF");
+EXT char *origfilename;
+EXT FILE * VOLATILE rsfp;
+EXT char buf[1024];
+EXT char *bufptr;
+EXT char *oldbufptr;
+EXT char *oldoldbufptr;
+EXT char *bufend;
+
+EXT STR *linestr INIT(Nullstr);
+
+EXT char *rs INIT("\n");
+EXT int rschar INIT('\n'); /* final char of rs, or 0777 if none */
+EXT int rslen INIT(1);
+EXT char *ofs INIT(Nullch);
+EXT int ofslen INIT(0);
+EXT char *ors INIT(Nullch);
+EXT int orslen INIT(0);
+EXT char *ofmt INIT(Nullch);
+EXT char *inplace INIT(Nullch);
+EXT char *nointrp INIT("");
+
+EXT bool preprocess INIT(FALSE);
+EXT bool minus_n INIT(FALSE);
+EXT bool minus_p INIT(FALSE);
+EXT bool minus_l INIT(FALSE);
+EXT bool minus_a INIT(FALSE);
+EXT bool doswitches INIT(FALSE);
+EXT bool dowarn INIT(FALSE);
+EXT bool doextract INIT(FALSE);
+EXT bool allstabs INIT(FALSE); /* init all customary symbols in symbol table?*/
+EXT bool sawampersand INIT(FALSE); /* must save all match strings */
+EXT bool sawstudy INIT(FALSE); /* do fbminstr on all strings */
+EXT bool sawi INIT(FALSE); /* study must assume case insensitive */
+EXT bool sawvec INIT(FALSE);
+EXT bool localizing INIT(FALSE); /* are we processing a local() list? */
+
+#ifdef CSH
+char *cshname INIT(CSH);
+int cshlen INIT(0);
+#endif /* CSH */
+
+#ifdef TAINT
+EXT bool tainted INIT(FALSE); /* using variables controlled by $< */
+#endif
+
+#ifndef MSDOS
+#define TMPPATH "/tmp/perl-eXXXXXX"
+#else
+#define TMPPATH "plXXXXXX"
+#endif /* MSDOS */
+EXT char *e_tmpname;
+EXT FILE *e_fp INIT(Nullfp);
+
+EXT char tokenbuf[256];
+EXT int expectterm INIT(TRUE); /* how to interpret ambiguous tokens */
+EXT VOLATILE int in_eval INIT(FALSE); /* trap fatal errors? */
+EXT int multiline INIT(0); /* $*--do strings hold >1 line? */
+EXT int forkprocess; /* so do_open |- can return proc# */
+EXT int do_undump INIT(0); /* -u or dump seen? */
+EXT int error_count INIT(0); /* how many errors so far, max 10 */
+EXT int multi_start INIT(0); /* 1st line of multi-line string */
+EXT int multi_end INIT(0); /* last line of multi-line string */
+EXT int multi_open INIT(0); /* delimiter of said string */
+EXT int multi_close INIT(0); /* delimiter of said string */
+
+FILE *popen();
+/* char *str_get(); */
+STR *interp();
+void free_arg();
+STIO *stio_new();
+
+EXT struct stat statbuf;
+EXT struct stat statcache;
+STAB *statstab INIT(Nullstab);
+STR *statname;
+#ifndef MSDOS
+EXT struct tms timesbuf;
+#endif
+EXT int uid;
+EXT int euid;
+EXT int gid;
+EXT int egid;
+UIDTYPE getuid();
+UIDTYPE geteuid();
+GIDTYPE getgid();
+GIDTYPE getegid();
+EXT int unsafe;
+
+#ifdef DEBUGGING
+EXT VOLATILE int debug INIT(0);
+EXT int dlevel INIT(0);
+EXT int dlmax INIT(128);
+EXT char *debname;
+EXT char *debdelim;
+#define YYDEBUG 1
+#endif
+EXT int perldb INIT(0);
+#define YYMAXDEPTH 300
+
+EXT line_t cmdline INIT(NOLINE);
+
+EXT STR str_undef;
+EXT STR str_no;
+EXT STR str_yes;
+
+/* runtime control stuff */
+
+EXT struct loop {
+ char *loop_label; /* what the loop was called, if anything */
+ int loop_sp; /* stack pointer to copy stuff down to */
+ jmp_buf loop_env;
+} *loop_stack;
+
+EXT int loop_ptr INIT(-1);
+EXT int loop_max INIT(128);
+
+EXT jmp_buf top_env;
+
+EXT char * VOLATILE goto_targ INIT(Nullch); /* cmd_exec gets strange when set */
+
+struct ufuncs {
+ int (*uf_val)();
+ int (*uf_set)();
+ int uf_index;
+};
+
+EXT ARRAY *stack; /* THE STACK */
+
+EXT ARRAY * VOLATILE savestack; /* to save non-local values on */
+
+EXT ARRAY *tosave; /* strings to save on recursive subroutine */
+
+EXT ARRAY *lineary; /* lines of script for debugger */
+EXT ARRAY *dbargs; /* args to call listed by caller function */
+
+EXT ARRAY *fdpid; /* keep fd-to-pid mappings for mypopen */
+EXT HASH *pidstatus; /* keep pid-to-status mappings for waitpid */
+
+EXT int *di; /* for tmp use in debuggers */
+EXT char *dc;
+EXT short *ds;
+
+/* Fix these up for __STDC__ */
+EXT long basetime INIT(0);
+char *mktemp();
+#ifndef __STDC__
+/* All of these are in stdlib.h or time.h for ANSI C */
+double atof();
+long time();
+struct tm *gmtime(), *localtime();
+char *index(), *rindex();
+char *strcpy(), *strcat();
+#endif /* ! __STDC__ */
+
+#ifdef EUNICE
+#define UNLINK unlnk
+int unlnk();
+#else
+#define UNLINK unlink
+#endif
+
+#ifndef HAS_SETREUID
+#ifdef HAS_SETRESUID
+#define setreuid(r,e) setresuid(r,e,-1)
+#define HAS_SETREUID
+#endif
+#endif
+#ifndef HAS_SETREGID
+#ifdef HAS_SETRESGID
+#define setregid(r,e) setresgid(r,e,-1)
+#define HAS_SETREGID
+#endif
+#endif
+/* work around botch in SunOS 4.0.1 and 4.0.2 */
+#ifndef fputs
+#define fputs(str,fp) fprintf(fp,"%s",str)
+#endif
diff --git a/MultiSource/Benchmarks/MallocBench/perl/perly.c b/MultiSource/Benchmarks/MallocBench/perl/perly.c
new file mode 100644
index 00000000..d92c4a41
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/perly.c
@@ -0,0 +1,3026 @@
+#ifndef lint
+static char const
+yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $";
+#endif
+#include <stdlib.h>
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYLEX yylex()
+#define YYEMPTY -1
+#define yyclearin (yychar=(YYEMPTY))
+#define yyerrok (yyerrflag=0)
+#define YYRECOVERING() (yyerrflag!=0)
+static int yygrowstack();
+#define YYPREFIX "yy"
+#line 15 "perly.y"
+#include "INTERN.h"
+#include "perl.h"
+
+STAB *scrstab;
+ARG *arg4; /* rarely used arguments to make_op() */
+ARG *arg5;
+
+#line 26 "perly.y"
+typedef union {
+ int ival;
+ char *cval;
+ ARG *arg;
+ CMD *cmdval;
+ struct compcmd compval;
+ STAB *stabval;
+ FCMD *formval;
+} YYSTYPE;
+#line 35 "y.tab.c"
+#define YYERRCODE 256
+#define WORD 257
+#define APPEND 258
+#define OPEN 259
+#define SSELECT 260
+#define LOOPEX 261
+#define USING 262
+#define FORMAT 263
+#define DO 264
+#define SHIFT 265
+#define PUSH 266
+#define POP 267
+#define LVALFUN 268
+#define WHILE 269
+#define UNTIL 270
+#define IF 271
+#define UNLESS 272
+#define ELSE 273
+#define ELSIF 274
+#define CONTINUE 275
+#define SPLIT 276
+#define FLIST 277
+#define FOR 278
+#define FILOP 279
+#define FILOP2 280
+#define FILOP3 281
+#define FILOP4 282
+#define FILOP22 283
+#define FILOP25 284
+#define FUNC0 285
+#define FUNC1 286
+#define FUNC2 287
+#define FUNC2x 288
+#define FUNC3 289
+#define FUNC4 290
+#define FUNC5 291
+#define HSHFUN 292
+#define HSHFUN3 293
+#define FLIST2 294
+#define SUB 295
+#define FILETEST 296
+#define LOCAL 297
+#define DELETE 298
+#define RELOP 299
+#define EQOP 300
+#define MULOP 301
+#define ADDOP 302
+#define PACKAGE 303
+#define AMPER 304
+#define FORMLIST 305
+#define REG 306
+#define ARYLEN 307
+#define ARY 308
+#define HSH 309
+#define STAR 310
+#define SUBST 311
+#define PATTERN 312
+#define RSTRING 313
+#define TRANS 314
+#define LISTOP 315
+#define DOTDOT 316
+#define OROR 317
+#define ANDAND 318
+#define UNIOP 319
+#define LS 320
+#define RS 321
+#define MATCH 322
+#define NMATCH 323
+#define UMINUS 324
+#define POW 325
+#define INC 326
+#define DEC 327
+const short yylhs[] = { -1,
+ 25, 0, 24, 24, 11, 11, 11, 4, 3, 5,
+ 5, 6, 6, 6, 6, 6, 9, 9, 9, 9,
+ 9, 9, 8, 8, 8, 8, 7, 7, 7, 7,
+ 7, 7, 7, 7, 10, 10, 20, 20, 23, 23,
+ 1, 1, 1, 2, 2, 26, 27, 14, 12, 12,
+ 15, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 21,
+ 21, 21, 21, 21, 17, 17, 18, 18, 19, 19,
+ 22,
+};
+const short yylen[] = { 2,
+ 0, 2, 3, 2, 0, 2, 5, 4, 0, 0,
+ 2, 1, 2, 1, 2, 3, 1, 1, 3, 3,
+ 3, 3, 5, 5, 3, 3, 6, 6, 4, 4,
+ 7, 6, 10, 2, 0, 1, 0, 1, 0, 2,
+ 1, 1, 1, 4, 3, 3, 3, 2, 3, 1,
+ 2, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 5, 3, 3, 1, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1, 4, 4,
+ 3, 2, 2, 2, 1, 1, 4, 1, 1, 4,
+ 6, 5, 4, 4, 5, 1, 1, 1, 1, 1,
+ 5, 5, 4, 4, 2, 5, 5, 4, 4, 2,
+ 1, 2, 1, 2, 1, 4, 7, 2, 4, 5,
+ 4, 2, 2, 3, 1, 5, 6, 6, 7, 9,
+ 5, 2, 4, 2, 4, 1, 1, 6, 5, 4,
+ 5, 4, 2, 1, 1, 3, 3, 4, 5, 5,
+ 6, 6, 7, 8, 4, 2, 6, 1, 1, 1,
+ 2, 2, 3, 3, 1, 1, 1, 1, 1, 1,
+ 1,
+};
+const short yydefred[] = { 1,
+ 0, 10, 0, 0, 0, 0, 0, 12, 41, 11,
+ 14, 0, 42, 43, 40, 0, 0, 0, 0, 17,
+ 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 106, 0, 98,
+ 96, 109, 108, 107, 110, 0, 0, 0, 0, 0,
+ 0, 0, 9, 15, 0, 0, 0, 13, 0, 0,
+ 0, 0, 169, 168, 34, 0, 45, 46, 47, 128,
+ 0, 0, 122, 0, 0, 94, 0, 177, 178, 0,
+ 144, 0, 0, 142, 153, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 132, 133, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 179, 180, 0, 166, 0, 0, 86, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 84, 85, 0, 0, 10, 0,
+ 0, 0, 0, 0, 4, 16, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 82, 83,
+ 44, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 29, 0, 30, 0, 25, 0,
+ 26, 0, 0, 0, 36, 0, 0, 134, 0, 0,
+ 0, 0, 0, 0, 156, 157, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 129, 0, 0, 0, 0, 126, 113, 0,
+ 118, 0, 145, 0, 143, 0, 0, 0, 0, 150,
+ 0, 152, 0, 0, 0, 131, 0, 0, 0, 0,
+ 0, 158, 0, 0, 0, 0, 0, 165, 0, 0,
+ 89, 0, 114, 0, 119, 0, 100, 97, 104, 103,
+ 0, 90, 0, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 130, 0, 0, 111, 116,
+ 141, 27, 28, 23, 24, 149, 0, 0, 0, 32,
+ 136, 0, 0, 0, 0, 159, 160, 0, 0, 0,
+ 0, 0, 151, 105, 112, 117, 102, 0, 0, 0,
+ 0, 148, 31, 0, 137, 0, 138, 0, 161, 162,
+ 0, 0, 167, 101, 7, 127, 0, 139, 0, 163,
+ 0, 0, 0, 164, 33, 140,
+};
+const short yydgoto[] = { 1,
+ 8, 9, 159, 77, 3, 10, 11, 78, 215, 216,
+ 165, 80, 81, 285, 287, 82, 194, 101, 136, 204,
+ 83, 84, 12, 85, 2, 13, 14,
+};
+const short yysindex[] = { 0,
+ 0, 0, -220, -25, -57, -229, -205, 0, 0, 0,
+ 0, 401, 0, 0, 0, -7, -232, -49, 29, 0,
+ 0, -37, 55, -148, 578, -32, 68, -5, 2372, -24,
+ -23, -22, -21, 74, 80, 16, 83, 81, 98, 105,
+ 107, 124, 130, 135, 157, 177, 178, 188, 189, -8,
+ 210, 213, 2488, 216, -141, -236, -52, 0, -33, 0,
+ 0, 0, 0, 0, 0, 2582, 2372, 2372, 2372, 2372,
+ 2372, 768, 0, 0, 2372, 2372, 50, 0, 163, -35,
+ 4611, -279, 0, 0, 0, -46, 0, 0, 0, 0,
+ 2657, 2773, 0, 223, -30, 0, -210, 0, 0, -231,
+ 0, -231, -231, 0, 0, 2372, -49, 2372, -49, 2372,
+ -49, 2372, -49, 2372, 2372, 277, 863, 0, 0, 937,
+ 2773, 2773, 2773, 2773, 2773, 278, 1057, 2372, 2372, 2372,
+ 2372, 2372, 0, 0, -237, 0, -237, 2372, 0, -210,
+ 2372, 211, 290, 293, 2372, 2372, 2372, 2372, 2372, 5249,
+ 291, -210, -279, -279, 0, 0, 245, 18, 0, -279,
+ -279, -49, 297, -49, 0, 0, 2372, 2372, 2372, 2372,
+ 2372, 2372, 2372, 1148, 1226, 2372, 2372, 2372, 2372, 2372,
+ 1342, 1436, 1511, 1627, 1721, 2372, 2372, 1796, 0, 0,
+ 0, 298, 4611, 294, 0, 2126, 300, 1915, 2009, 301,
+ 294, 302, 291, 303, 0, 87, 0, 125, 0, 142,
+ 0, 1838, 143, 2372, 0, 287, -39, 0, 306, 294,
+ 307, 307, 308, 319, 0, 0, 149, 2412, 2126, 2126,
+ 2126, 2126, 323, 307, 2412, 154, 2372, 2084, 2203, -38,
+ -17, -20, -15, 291, 291, 2372, 2297, 314, -114, 0,
+ 2372, 0, 291, 291, 291, 291, 4611, -210, -143, 2372,
+ -241, 2372, -168, 4611, 268, 208, 612, 528, 2372, 280,
+ 2372, 280, 2372, -149, 2372, -183, 2372, -183, 63, 63,
+ 2372, 63, 0, 2372, 350, 2372, 307, 0, 0, 155,
+ 0, 160, 0, 366, 0, -49, -49, -49, -49, 0,
+ 161, 0, 162, 2372, -49, 0, 368, 294, 307, 2773,
+ 2773, 0, 369, 166, 294, 307, 307, 0, 294, 370,
+ 0, -19, 0, 175, 0, 182, 0, 0, 0, 0,
+ -14, 0, 2372, 0, 183, 4611, 4611, 2372, 4611, 4611,
+ 4611, 4611, 4611, 4611, 291, 0, 4611, 307, 0, 0,
+ 0, 0, 0, 0, 0, 0, 371, -49, 347, 0,
+ 0, 372, 294, 373, 307, 0, 0, 376, 382, 294,
+ 307, 383, 0, 0, 0, 0, 0, -13, -49, 1549,
+ 384, 0, 0, 863, 0, 385, 0, 307, 0, 0,
+ 386, 294, 0, 0, 0, 0, 387, 0, 294, 0,
+ 388, -49, 389, 0, 0, 0,
+};
+const short yyrindex[] = { 0,
+ 0, 0, 89, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 150, 2949, 0, 3052, 0, 0, 4844, 0,
+ 0, 0, 0, 3064, 0, 0, 3134, 0, 0, 0,
+ 0, 0, 3194, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4914, 0, 0, 0, 3268, 0, 3379, 0,
+ 0, 0, 0, 0, 0, 4926, 4996, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 4,
+ 3521, 5008, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3439, 3268, 0, 4460, 0, 0, 0,
+ 0, 0, 0, 0, 0, 390, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 374, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4472,
+ 0, 0, 3513, 3595, 0, 0, 0, 0, 5065, 3268,
+ 3759, 4542, 5161, 5300, 0, 0, 3674, 0, 0, 5310,
+ 5378, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1268, 201, 0, 977, 394, 0, 0, 0, 0,
+ 0, 0, 44, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 377, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3840, 3921, 0, 0, 3686, 473, 0,
+ 0, 0, 45, 57, 66, 76, 3601, 4554, 4627, 0,
+ 4166, 0, 4225, 3765, 0, 3073, 5647, 5623, 0, 5545,
+ 0, 5596, 0, 4759, 0, 4307, 0, 4382, 3980, 4055,
+ 0, 4092, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 378, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4709, 4881, 0, 5673, 5683,
+ 5706, 5710, 5716, 5726, 397, 0, 207, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3143,
+ 0, 0, 0, 398, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+};
+const short yygindex[] = { 0,
+ 0, 0, 0, -18, 281, 0, 0, 0, 430, 59,
+ 0, 5939, 365, -178, 4783, 92, -56, -6, -97, 141,
+ 0, 0, 0, -58, 0, 0, 0,
+};
+#define YYTABLESIZE 6272
+const short yytable[] = { 88,
+ 5, 305, 91, 17, 171, 171, 96, 100, 171, 199,
+ 334, 107, 109, 111, 113, 106, 108, 110, 112, 133,
+ 143, 104, 294, 171, 171, 98, 171, 18, 171, 171,
+ 171, 135, 15, 5, 103, 197, 4, 233, 146, 234,
+ 5, 307, 5, 5, 18, 5, 189, 190, 205, 313,
+ 207, 19, 209, 86, 211, 117, 320, 148, 248, 5,
+ 146, 247, 18, 219, 220, 221, 222, 223, 224, 144,
+ 145, 134, 87, 73, 6, 328, 99, 330, 377, 394,
+ 186, 187, 7, 188, 38, 21, 327, 89, 2, 147,
+ 174, 175, 145, 200, 92, 201, 202, 22, 73, 73,
+ 73, 73, 38, 21, 329, 374, 19, 102, 93, 184,
+ 185, 186, 187, 114, 188, 22, 20, 174, 175, 115,
+ 121, 39, 120, 5, 19, 5, 5, 297, 39, 362,
+ 171, 39, 174, 39, 20, 368, 369, 122, 186, 187,
+ 372, 188, 4, 250, 123, 252, 124, 39, 5, 172,
+ 173, 174, 175, 186, 187, 172, 188, 174, 175, 153,
+ 154, 155, 156, 125, 142, 298, 160, 161, 171, 126,
+ 184, 185, 186, 187, 127, 188, 184, 185, 186, 187,
+ 6, 188, 299, 302, 386, 171, 171, 125, 7, 312,
+ 125, 391, 171, 125, 321, 349, 128, 171, 171, 16,
+ 350, 356, 358, 171, 286, 171, 367, 125, 125, 284,
+ 125, 39, 125, 401, 39, 375, 129, 130, 171, 90,
+ 403, 166, 376, 379, 98, 171, 171, 131, 132, 167,
+ 168, 169, 170, 167, 168, 169, 170, 352, 353, 354,
+ 355, 176, 125, 125, 176, 183, 360, 51, 133, 137,
+ 51, 98, 138, 364, 365, 141, 5, 5, 191, 5,
+ 5, 5, 198, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 125, 125, 99, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 383,
+ 134, 182, 99, 5, 5, 183, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 214, 183, 225, 5,
+ 395, 116, 162, 163, 164, 338, 5, 5, 176, 238,
+ 177, 181, 239, 237, 171, 246, 251, 284, 283, 118,
+ 288, 293, 295, 296, 39, 304, 306, 39, 39, 39,
+ 286, 310, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 182, 311, 318, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 405, 39, 39, 39, 188, 119, 97,
+ 346, 181, 39, 105, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 333, 384, 351, 39, 361, 366,
+ 373, 382, 385, 387, 39, 39, 389, 140, 125, 125,
+ 125, 125, 390, 393, 396, 398, 400, 402, 404, 406,
+ 37, 152, 35, 68, 176, 18, 37, 48, 35, 249,
+ 72, 79, 397, 76, 359, 75, 0, 0, 125, 125,
+ 125, 125, 0, 0, 0, 193, 196, 0, 0, 74,
+ 0, 0, 0, 0, 0, 125, 125, 125, 0, 125,
+ 125, 125, 125, 0, 125, 125, 125, 0, 212, 0,
+ 0, 0, 0, 0, 193, 193, 193, 193, 193, 193,
+ 0, 0, 228, 229, 230, 231, 232, 0, 0, 0,
+ 0, 0, 235, 0, 0, 39, 172, 173, 174, 175,
+ 0, 0, 39, 0, 0, 39, 0, 39, 0, 0,
+ 0, 0, 0, 73, 179, 180, 69, 184, 185, 186,
+ 187, 39, 188, 0, 0, 257, 258, 259, 261, 263,
+ 264, 265, 266, 267, 268, 270, 272, 274, 276, 278,
+ 279, 280, 282, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 183, 172, 173, 174, 175,
+ 0, 0, 0, 0, 0, 0, 0, 0, 172, 173,
+ 174, 175, 0, 178, 179, 180, 0, 184, 185, 186,
+ 187, 0, 188, 0, 0, 39, 0, 0, 39, 184,
+ 185, 186, 187, 0, 188, 0, 0, 0, 0, 0,
+ 68, 257, 0, 0, 0, 0, 0, 72, 0, 0,
+ 76, 182, 75, 0, 336, 0, 337, 0, 0, 0,
+ 0, 0, 0, 339, 0, 340, 0, 341, 0, 342,
+ 0, 343, 0, 0, 0, 344, 0, 0, 0, 183,
+ 347, 181, 0, 0, 0, 0, 20, 21, 0, 22,
+ 23, 24, 0, 0, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 0, 193, 193, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 0, 53, 54, 55, 0,
+ 73, 0, 380, 69, 56, 182, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 0, 0, 0, 67,
+ 0, 0, 0, 0, 0, 0, 70, 71, 39, 0,
+ 0, 39, 39, 39, 0, 181, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 0, 0, 0, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 0, 39, 39,
+ 39, 0, 0, 0, 0, 0, 39, 0, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39, 0, 0,
+ 0, 39, 0, 0, 0, 0, 0, 0, 39, 39,
+ 68, 0, 0, 0, 0, 0, 0, 72, 157, 0,
+ 76, 0, 75, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 172, 173, 174, 175,
+ 0, 0, 0, 0, 94, 0, 22, 23, 24, 0,
+ 0, 25, 26, 27, 28, 29, 0, 184, 185, 186,
+ 187, 0, 188, 34, 35, 0, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 0, 53, 54, 55, 0, 0, 0, 0,
+ 0, 56, 0, 95, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 69, 0, 68, 67, 0, 0, 0,
+ 0, 0, 72, 70, 71, 76, 0, 75, 0, 0,
+ 172, 173, 174, 175, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
+ 0, 184, 185, 186, 187, 0, 188, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,
+ 0, 0, 0, 0, 0, 0, 72, 218, 0, 76,
+ 0, 75, 0, 0, 0, 0, 0, 0, 69, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 181, 0, 0, 175, 0, 0,
+ 175, 0, 0, 0, 21, 0, 22, 23, 24, 0,
+ 0, 25, 26, 27, 28, 29, 0, 181, 0, 181,
+ 0, 0, 0, 34, 35, 0, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 69, 53, 54, 55, 0, 0, 0, 0,
+ 181, 56, 0, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 0, 0, 0, 67, 0, 0, 68,
+ 0, 0, 0, 70, 71, 0, 72, 226, 0, 76,
+ 181, 75, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21,
+ 0, 22, 23, 24, 0, 0, 25, 26, 27, 28,
+ 29, 0, 0, 0, 0, 0, 0, 0, 34, 35,
+ 0, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 0, 53, 54,
+ 55, 0, 0, 0, 0, 0, 56, 0, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 0, 0,
+ 68, 67, 69, 0, 0, 0, 0, 72, 70, 71,
+ 76, 0, 75, 195, 0, 22, 23, 24, 0, 0,
+ 25, 26, 27, 28, 29, 0, 0, 0, 260, 0,
+ 0, 0, 34, 35, 0, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 0, 53, 54, 55, 0, 0, 0, 0, 0,
+ 56, 0, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 0, 0, 0, 67, 0, 0, 68, 0,
+ 0, 0, 70, 71, 0, 72, 0, 0, 76, 0,
+ 75, 0, 0, 69, 0, 181, 181, 181, 181, 0,
+ 0, 0, 0, 0, 0, 0, 262, 0, 0, 0,
+ 0, 0, 181, 181, 181, 0, 181, 181, 181, 181,
+ 0, 181, 181, 181, 0, 181, 0, 0, 0, 0,
+ 0, 175, 0, 21, 0, 22, 23, 24, 0, 0,
+ 25, 26, 27, 28, 29, 0, 0, 0, 181, 0,
+ 181, 0, 34, 35, 0, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 69, 53, 54, 55, 0, 0, 0, 0, 0,
+ 56, 181, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 0, 0, 68, 67, 0, 0, 0, 0,
+ 0, 72, 70, 71, 76, 0, 75, 0, 0, 0,
+ 0, 181, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 269, 0, 21, 0, 22, 23, 24, 0,
+ 0, 25, 26, 27, 28, 29, 0, 0, 0, 0,
+ 0, 0, 0, 34, 35, 0, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 0, 53, 54, 55, 0, 0, 0, 0,
+ 0, 56, 0, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 0, 0, 0, 67, 69, 68, 0,
+ 0, 0, 0, 70, 71, 72, 0, 0, 76, 0,
+ 75, 0, 21, 0, 22, 23, 24, 0, 0, 25,
+ 26, 27, 28, 29, 0, 0, 271, 0, 0, 0,
+ 0, 34, 35, 0, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 0, 53, 54, 55, 0, 0, 0, 0, 0, 56,
+ 0, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 0, 0, 68, 67, 0, 0, 0, 0, 0,
+ 72, 70, 71, 76, 0, 75, 0, 0, 0, 0,
+ 0, 69, 0, 0, 0, 0, 181, 181, 181, 181,
+ 0, 273, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 181, 181, 181, 183, 181, 181, 181,
+ 181, 0, 181, 181, 181, 0, 0, 0, 21, 0,
+ 22, 23, 24, 0, 0, 25, 26, 27, 28, 29,
+ 0, 177, 0, 0, 0, 0, 0, 34, 35, 0,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 69, 53, 54, 55,
+ 0, 0, 182, 0, 0, 56, 0, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 0, 0, 68,
+ 67, 0, 0, 0, 0, 0, 72, 70, 71, 76,
+ 0, 75, 181, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 275, 0, 0,
+ 0, 0, 21, 0, 22, 23, 24, 0, 0, 25,
+ 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
+ 0, 34, 35, 0, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 0, 53, 54, 55, 0, 0, 0, 0, 0, 56,
+ 0, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 0, 69, 68, 67, 0, 0, 0, 0, 0,
+ 72, 70, 71, 76, 0, 75, 0, 21, 0, 22,
+ 23, 24, 0, 0, 25, 26, 27, 28, 29, 0,
+ 0, 277, 0, 0, 0, 0, 34, 35, 0, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 0, 53, 54, 55, 0,
+ 0, 0, 0, 0, 56, 0, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 0, 0, 68, 67,
+ 0, 0, 0, 0, 0, 72, 70, 71, 76, 0,
+ 75, 0, 0, 0, 0, 0, 69, 172, 173, 174,
+ 175, 0, 0, 0, 0, 0, 281, 0, 0, 0,
+ 0, 0, 0, 0, 178, 179, 180, 0, 184, 185,
+ 186, 187, 0, 188, 0, 183, 0, 0, 300, 0,
+ 0, 286, 0, 21, 0, 22, 23, 24, 0, 0,
+ 25, 26, 27, 28, 29, 0, 0, 0, 176, 0,
+ 177, 0, 34, 35, 0, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 69, 53, 54, 55, 0, 0, 0, 0, 0,
+ 56, 182, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 0, 0, 0, 67, 0, 68, 0, 0,
+ 0, 0, 70, 71, 72, 289, 0, 76, 0, 75,
+ 0, 181, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 21, 0, 22,
+ 23, 24, 0, 0, 25, 26, 27, 28, 29, 0,
+ 0, 0, 0, 0, 0, 0, 34, 35, 0, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 0, 53, 54, 55, 0,
+ 0, 0, 0, 0, 56, 0, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 0, 0, 0, 67,
+ 69, 68, 0, 0, 0, 0, 70, 71, 72, 291,
+ 0, 76, 21, 75, 22, 23, 24, 0, 0, 25,
+ 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
+ 0, 34, 35, 0, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 0, 53, 54, 55, 0, 0, 0, 0, 0, 56,
+ 0, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 0, 0, 0, 67, 0, 68, 0, 0, 0,
+ 0, 70, 71, 72, 323, 0, 76, 0, 75, 0,
+ 0, 0, 0, 0, 69, 0, 172, 173, 174, 175,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 178, 179, 180, 0, 184, 185, 186,
+ 187, 0, 188, 183, 0, 0, 0, 0, 0, 286,
+ 0, 21, 0, 22, 23, 24, 0, 0, 25, 26,
+ 27, 28, 29, 0, 0, 0, 176, 0, 177, 0,
+ 34, 35, 0, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 69,
+ 53, 54, 55, 0, 0, 0, 0, 0, 56, 182,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 0, 0, 0, 67, 0, 68, 0, 0, 0, 0,
+ 70, 71, 72, 325, 0, 76, 0, 75, 0, 181,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 21, 0, 22, 23, 24,
+ 0, 0, 25, 26, 27, 28, 29, 0, 0, 0,
+ 0, 0, 0, 0, 34, 35, 0, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 0, 53, 54, 55, 0, 0, 0,
+ 0, 0, 56, 0, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 0, 0, 0, 67, 69, 68,
+ 0, 0, 0, 0, 70, 71, 72, 332, 0, 76,
+ 21, 75, 22, 23, 24, 0, 0, 25, 26, 27,
+ 28, 29, 0, 0, 0, 0, 0, 0, 0, 34,
+ 35, 0, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 0, 53,
+ 54, 55, 0, 0, 0, 0, 0, 56, 0, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 0,
+ 0, 0, 67, 0, 68, 0, 0, 0, 0, 70,
+ 71, 72, 0, 0, 76, 0, 75, 0, 0, 0,
+ 0, 0, 69, 0, 172, 173, 174, 175, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 178, 179, 180, 0, 184, 185, 186, 187, 183,
+ 188, 0, 0, 0, 0, 284, 0, 0, 0, 21,
+ 0, 22, 23, 24, 0, 0, 25, 26, 27, 28,
+ 29, 0, 176, 0, 177, 0, 0, 0, 34, 35,
+ 0, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 69, 53, 54,
+ 55, 0, 0, 0, 0, 182, 56, 0, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 0, 0,
+ 68, 67, 0, 0, 0, 0, 0, 72, 70, 71,
+ 76, 0, 75, 0, 0, 181, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 21, 0, 22, 23, 24, 0, 0,
+ 25, 26, 27, 28, 29, 0, 0, 0, 0, 0,
+ 0, 0, 34, 35, 0, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 0, 53, 54, 55, 0, 0, 0, 0, 0,
+ 56, 0, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 0, 69, 68, 67, 0, 0, 0, 0,
+ 0, 72, 70, 71, 76, 0, 75, 0, 21, 0,
+ 22, 23, 24, 0, 0, 25, 26, 27, 28, 29,
+ 0, 0, 0, 0, 0, 0, 0, 34, 35, 0,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 0, 53, 54, 55,
+ 0, 0, 0, 0, 0, 56, 0, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 0, 0, 68,
+ 67, 0, 0, 0, 0, 0, 72, 70, 71, 76,
+ 0, 75, 0, 0, 0, 0, 0, 69, 0, 0,
+ 172, 173, 174, 175, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 178, 179, 180,
+ 0, 184, 185, 186, 187, 0, 188, 0, 0, 0,
+ 0, 0, 0, 0, 139, 0, 22, 23, 24, 0,
+ 0, 25, 26, 27, 28, 29, 0, 0, 0, 0,
+ 0, 0, 0, 34, 35, 0, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 69, 53, 54, 55, 0, 0, 0, 0,
+ 0, 56, 0, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 0, 0, 68, 67, 0, 0, 0,
+ 0, 0, 72, 70, 71, 76, 0, 75, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 149, 0,
+ 22, 23, 24, 0, 0, 25, 26, 27, 28, 29,
+ 0, 0, 0, 0, 0, 0, 0, 34, 35, 0,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 0, 53, 54, 55,
+ 0, 0, 0, 0, 0, 56, 0, 150, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 0, 69, 0,
+ 67, 0, 0, 0, 0, 0, 0, 70, 71, 0,
+ 0, 0, 0, 192, 0, 22, 23, 24, 0, 0,
+ 25, 26, 27, 28, 29, 0, 0, 0, 0, 0,
+ 0, 0, 34, 35, 0, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 0, 53, 54, 55, 0, 0, 0, 0, 0,
+ 56, 0, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 0, 0, 0, 67, 0, 0, 0, 0,
+ 0, 0, 70, 71, 0, 0, 121, 0, 0, 121,
+ 0, 0, 121, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 121, 121, 0, 121,
+ 0, 121, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
+ 0, 22, 23, 24, 0, 0, 25, 26, 27, 28,
+ 29, 121, 121, 0, 0, 0, 0, 0, 34, 35,
+ 0, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 0, 53, 54,
+ 55, 0, 121, 121, 0, 0, 56, 0, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 0, 146,
+ 0, 67, 146, 0, 0, 146, 0, 0, 70, 71,
+ 0, 147, 0, 0, 147, 0, 0, 147, 0, 146,
+ 146, 0, 146, 71, 146, 0, 71, 0, 0, 0,
+ 0, 147, 147, 0, 147, 0, 147, 0, 0, 0,
+ 71, 71, 0, 71, 0, 71, 0, 0, 0, 0,
+ 0, 0, 0, 0, 146, 146, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 147, 147, 0, 0,
+ 0, 0, 0, 0, 0, 71, 0, 0, 0, 0,
+ 0, 135, 0, 0, 135, 146, 146, 135, 0, 0,
+ 0, 0, 0, 74, 0, 0, 74, 147, 147, 0,
+ 0, 135, 135, 0, 135, 0, 135, 71, 0, 0,
+ 74, 74, 0, 74, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 121, 121, 121,
+ 121, 0, 0, 0, 0, 0, 135, 135, 0, 0,
+ 0, 155, 0, 0, 155, 74, 0, 155, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 121, 121, 121,
+ 121, 155, 155, 0, 155, 0, 155, 135, 135, 0,
+ 0, 0, 0, 0, 121, 121, 121, 74, 121, 121,
+ 121, 121, 0, 121, 121, 121, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 155, 155, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 95, 0, 0, 95, 0,
+ 0, 95, 0, 0, 0, 0, 0, 155, 155, 0,
+ 146, 146, 146, 146, 0, 95, 95, 0, 95, 0,
+ 95, 0, 147, 147, 147, 147, 0, 0, 0, 0,
+ 0, 71, 71, 71, 71, 0, 0, 0, 0, 0,
+ 146, 146, 146, 146, 0, 0, 0, 0, 0, 0,
+ 95, 95, 147, 147, 147, 147, 0, 146, 146, 146,
+ 0, 146, 146, 146, 146, 0, 146, 146, 146, 147,
+ 147, 147, 0, 147, 147, 147, 147, 0, 147, 147,
+ 147, 95, 95, 0, 0, 0, 0, 0, 71, 71,
+ 0, 0, 135, 135, 135, 135, 0, 0, 0, 0,
+ 0, 74, 74, 74, 74, 0, 99, 0, 0, 99,
+ 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 135, 135, 135, 135, 99, 99, 0, 99,
+ 0, 99, 0, 0, 0, 0, 0, 0, 0, 135,
+ 135, 135, 0, 135, 135, 135, 135, 0, 135, 135,
+ 135, 0, 155, 155, 155, 155, 0, 0, 74, 74,
+ 0, 99, 99, 0, 0, 0, 181, 0, 0, 181,
+ 0, 0, 181, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 155, 155, 155, 155, 181, 181, 0, 181,
+ 0, 181, 99, 99, 0, 0, 0, 0, 0, 155,
+ 155, 155, 0, 155, 155, 155, 155, 0, 155, 155,
+ 155, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 181, 181, 0, 0, 0, 95, 95, 95, 95,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 115, 0, 0, 115, 0, 0, 115, 0, 0, 0,
+ 0, 50, 181, 181, 50, 0, 95, 95, 95, 95,
+ 115, 115, 0, 115, 0, 115, 0, 0, 50, 50,
+ 0, 0, 0, 95, 95, 95, 0, 95, 95, 95,
+ 95, 0, 95, 95, 95, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 115, 115, 0, 0, 0,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 120, 0, 0, 120, 115, 115, 120, 0,
+ 0, 49, 0, 0, 49, 50, 0, 99, 99, 99,
+ 99, 0, 120, 120, 0, 120, 0, 120, 49, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 99, 99, 99,
+ 99, 0, 0, 0, 0, 0, 0, 120, 120, 0,
+ 0, 0, 0, 49, 99, 99, 99, 0, 99, 99,
+ 99, 99, 0, 99, 99, 99, 0, 181, 181, 181,
+ 181, 92, 0, 0, 92, 0, 0, 92, 120, 120,
+ 0, 0, 0, 91, 0, 49, 91, 0, 0, 91,
+ 0, 92, 92, 0, 92, 0, 92, 181, 181, 181,
+ 181, 0, 0, 91, 91, 0, 91, 0, 91, 0,
+ 0, 0, 0, 0, 181, 181, 181, 0, 181, 181,
+ 181, 181, 0, 181, 181, 181, 92, 92, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 91, 91,
+ 0, 115, 115, 115, 115, 0, 0, 0, 0, 50,
+ 50, 50, 50, 0, 0, 0, 171, 92, 92, 171,
+ 0, 0, 0, 0, 0, 52, 0, 0, 52, 91,
+ 91, 115, 115, 115, 115, 0, 171, 171, 0, 171,
+ 0, 171, 52, 52, 0, 0, 0, 0, 115, 115,
+ 115, 0, 115, 115, 115, 115, 0, 115, 115, 115,
+ 0, 0, 0, 0, 0, 0, 50, 50, 0, 0,
+ 0, 171, 171, 0, 0, 0, 0, 52, 0, 0,
+ 0, 0, 0, 120, 120, 120, 120, 0, 0, 49,
+ 49, 49, 49, 0, 0, 0, 0, 173, 0, 0,
+ 173, 0, 171, 171, 0, 0, 0, 0, 0, 52,
+ 0, 0, 0, 120, 120, 120, 120, 173, 173, 0,
+ 173, 0, 173, 0, 0, 0, 0, 0, 0, 0,
+ 120, 120, 120, 0, 120, 120, 120, 120, 0, 120,
+ 120, 120, 0, 0, 0, 0, 49, 49, 0, 0,
+ 0, 0, 173, 173, 0, 0, 0, 0, 0, 0,
+ 0, 0, 92, 92, 92, 92, 0, 0, 0, 0,
+ 0, 0, 0, 0, 91, 91, 91, 91, 174, 0,
+ 0, 174, 0, 173, 173, 0, 0, 0, 0, 0,
+ 0, 0, 92, 92, 92, 92, 0, 0, 174, 174,
+ 0, 174, 0, 174, 91, 91, 91, 91, 0, 92,
+ 92, 92, 0, 92, 92, 92, 92, 0, 92, 92,
+ 92, 91, 91, 91, 0, 91, 91, 91, 91, 0,
+ 91, 91, 91, 174, 174, 0, 0, 75, 0, 0,
+ 75, 0, 0, 75, 0, 0, 0, 171, 171, 171,
+ 171, 0, 0, 52, 52, 52, 52, 75, 75, 0,
+ 75, 0, 75, 0, 174, 174, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 171, 171, 171,
+ 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 75, 75, 171, 171, 171, 0, 171, 171,
+ 171, 171, 0, 171, 171, 171, 0, 0, 0, 0,
+ 52, 52, 76, 0, 0, 76, 0, 0, 76, 0,
+ 0, 0, 0, 75, 75, 0, 0, 0, 173, 173,
+ 173, 173, 76, 76, 0, 76, 0, 76, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
+ 0, 0, 61, 0, 0, 61, 0, 0, 173, 173,
+ 173, 173, 0, 0, 0, 0, 0, 76, 76, 61,
+ 61, 0, 61, 0, 61, 173, 173, 173, 0, 173,
+ 173, 173, 173, 0, 173, 173, 173, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 76, 76,
+ 0, 0, 0, 0, 61, 61, 0, 0, 0, 174,
+ 174, 174, 174, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 62, 0, 0, 62, 0, 0, 62,
+ 0, 0, 0, 0, 0, 61, 61, 0, 0, 174,
+ 174, 174, 174, 62, 62, 0, 62, 0, 62, 0,
+ 0, 0, 0, 0, 0, 0, 174, 174, 174, 0,
+ 174, 174, 174, 174, 0, 174, 174, 174, 75, 75,
+ 75, 75, 0, 0, 0, 0, 0, 0, 62, 62,
+ 0, 0, 63, 0, 0, 63, 0, 0, 63, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 75, 75,
+ 75, 75, 63, 63, 0, 63, 0, 63, 0, 62,
+ 62, 0, 0, 0, 0, 75, 75, 75, 0, 75,
+ 75, 75, 75, 0, 0, 75, 75, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 63, 63, 0,
+ 0, 0, 0, 76, 76, 76, 76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 0, 0, 64, 63, 63,
+ 64, 0, 0, 76, 76, 76, 76, 0, 0, 0,
+ 61, 61, 61, 61, 64, 64, 0, 64, 0, 64,
+ 76, 76, 76, 0, 76, 76, 76, 76, 0, 0,
+ 76, 76, 0, 0, 0, 0, 0, 0, 0, 0,
+ 61, 61, 61, 61, 0, 0, 0, 0, 0, 64,
+ 64, 0, 0, 0, 0, 0, 0, 61, 61, 61,
+ 0, 61, 61, 61, 61, 0, 0, 61, 61, 65,
+ 0, 0, 65, 0, 0, 65, 0, 0, 0, 0,
+ 64, 64, 0, 0, 62, 62, 62, 62, 0, 65,
+ 65, 0, 65, 0, 65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 62, 62, 62, 62, 0, 0,
+ 0, 0, 0, 0, 65, 65, 0, 0, 0, 0,
+ 0, 62, 62, 62, 0, 62, 62, 0, 0, 0,
+ 0, 62, 62, 63, 63, 63, 63, 93, 0, 0,
+ 93, 0, 0, 93, 0, 65, 65, 0, 0, 87,
+ 0, 0, 87, 0, 0, 87, 0, 93, 93, 0,
+ 93, 0, 93, 63, 63, 0, 63, 0, 0, 87,
+ 87, 0, 87, 0, 87, 0, 0, 0, 0, 0,
+ 63, 63, 63, 0, 63, 63, 0, 0, 0, 0,
+ 63, 63, 93, 93, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 87, 87, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 64, 64, 64, 64, 124,
+ 0, 0, 124, 93, 93, 124, 0, 0, 0, 0,
+ 0, 66, 0, 0, 66, 87, 87, 66, 0, 124,
+ 124, 0, 124, 0, 124, 64, 64, 0, 0, 0,
+ 0, 66, 66, 0, 66, 0, 66, 0, 0, 0,
+ 0, 0, 64, 64, 64, 0, 64, 64, 0, 0,
+ 0, 0, 64, 64, 124, 124, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 66, 66, 183, 0,
+ 65, 65, 65, 65, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 67, 124, 124, 67, 0, 0,
+ 67, 176, 0, 177, 0, 0, 0, 66, 66, 0,
+ 65, 65, 0, 0, 67, 67, 0, 67, 0, 67,
+ 0, 0, 0, 0, 0, 0, 0, 65, 65, 65,
+ 0, 65, 65, 0, 182, 0, 0, 65, 65, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
+ 67, 0, 0, 0, 0, 0, 0, 0, 93, 93,
+ 93, 93, 0, 0, 181, 0, 0, 0, 0, 0,
+ 87, 87, 87, 87, 0, 0, 0, 0, 0, 54,
+ 67, 67, 54, 0, 0, 0, 0, 0, 93, 93,
+ 0, 0, 0, 0, 0, 0, 54, 54, 0, 0,
+ 87, 87, 0, 0, 0, 93, 93, 93, 0, 0,
+ 0, 0, 0, 0, 0, 93, 93, 87, 87, 87,
+ 0, 0, 0, 0, 0, 0, 68, 87, 87, 68,
+ 0, 54, 68, 0, 0, 0, 0, 0, 0, 0,
+ 124, 124, 124, 124, 0, 0, 68, 68, 0, 68,
+ 0, 68, 66, 66, 66, 66, 0, 0, 0, 0,
+ 0, 0, 0, 54, 0, 0, 0, 0, 0, 0,
+ 124, 124, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 68, 68, 66, 0, 0, 0, 124, 124, 124,
+ 0, 0, 0, 0, 0, 0, 0, 124, 124, 66,
+ 66, 66, 0, 0, 0, 0, 0, 0, 0, 66,
+ 66, 154, 68, 68, 154, 0, 0, 154, 0, 0,
+ 0, 0, 0, 0, 0, 67, 67, 67, 67, 0,
+ 0, 154, 154, 0, 154, 0, 154, 0, 0, 172,
+ 173, 174, 175, 0, 0, 0, 0, 0, 0, 0,
+ 0, 55, 0, 0, 55, 0, 178, 179, 180, 0,
+ 184, 185, 186, 187, 0, 188, 154, 154, 55, 55,
+ 0, 0, 67, 67, 67, 0, 0, 0, 0, 0,
+ 0, 88, 67, 67, 88, 0, 0, 88, 0, 0,
+ 0, 0, 0, 170, 0, 0, 170, 154, 154, 170,
+ 0, 88, 88, 55, 88, 0, 88, 54, 54, 54,
+ 54, 0, 0, 170, 170, 0, 170, 0, 170, 0,
+ 0, 0, 0, 0, 301, 0, 0, 0, 0, 0,
+ 0, 0, 0, 308, 309, 55, 88, 88, 0, 0,
+ 0, 314, 315, 316, 317, 0, 319, 0, 170, 170,
+ 0, 0, 0, 0, 0, 0, 0, 68, 68, 68,
+ 68, 0, 0, 123, 54, 54, 123, 88, 88, 123,
+ 0, 0, 0, 0, 0, 77, 0, 0, 77, 170,
+ 170, 77, 0, 123, 123, 0, 123, 0, 123, 0,
+ 0, 0, 0, 0, 0, 77, 77, 0, 77, 348,
+ 77, 0, 0, 0, 68, 68, 68, 0, 0, 0,
+ 0, 0, 0, 357, 68, 68, 0, 0, 123, 123,
+ 0, 363, 0, 0, 0, 0, 0, 0, 370, 371,
+ 77, 77, 172, 0, 0, 172, 0, 0, 172, 0,
+ 0, 0, 154, 154, 154, 154, 0, 0, 0, 123,
+ 123, 0, 172, 172, 0, 172, 0, 172, 0, 0,
+ 381, 77, 77, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 154, 154, 154, 154, 0, 388, 0, 55,
+ 55, 55, 55, 392, 0, 0, 0, 172, 172, 154,
+ 154, 154, 0, 154, 154, 154, 154, 0, 154, 0,
+ 399, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 88, 88, 88, 88, 0, 0, 172, 172,
+ 0, 0, 0, 0, 170, 170, 170, 170, 80, 0,
+ 0, 80, 0, 0, 80, 0, 55, 55, 0, 0,
+ 0, 0, 88, 88, 88, 88, 0, 0, 80, 80,
+ 0, 80, 0, 80, 170, 170, 170, 170, 0, 88,
+ 88, 88, 0, 88, 88, 88, 88, 0, 88, 0,
+ 0, 170, 170, 170, 0, 170, 170, 170, 170, 0,
+ 170, 0, 0, 80, 80, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 123, 123, 123, 123, 0, 0,
+ 0, 0, 0, 0, 0, 0, 77, 77, 77, 77,
+ 0, 68, 0, 0, 80, 80, 0, 0, 72, 0,
+ 0, 76, 0, 75, 123, 123, 123, 123, 0, 0,
+ 0, 0, 0, 0, 0, 0, 77, 77, 77, 77,
+ 0, 123, 123, 123, 0, 123, 123, 123, 123, 0,
+ 123, 0, 0, 77, 77, 77, 0, 77, 77, 77,
+ 77, 0, 77, 172, 172, 172, 172, 81, 0, 146,
+ 81, 0, 0, 81, 0, 0, 0, 78, 0, 0,
+ 78, 0, 0, 78, 0, 0, 0, 81, 81, 0,
+ 81, 0, 81, 172, 172, 172, 172, 78, 78, 0,
+ 78, 145, 78, 0, 69, 0, 0, 0, 0, 0,
+ 172, 172, 172, 0, 172, 172, 172, 172, 0, 172,
+ 0, 0, 81, 81, 0, 0, 0, 0, 0, 0,
+ 0, 0, 78, 78, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 79, 0, 0, 79, 0,
+ 0, 79, 0, 81, 81, 0, 0, 0, 0, 80,
+ 80, 80, 80, 78, 78, 79, 79, 0, 79, 0,
+ 79, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,
+ 80, 80, 80, 0, 0, 0, 0, 0, 0, 0,
+ 79, 79, 0, 0, 0, 0, 80, 80, 80, 0,
+ 80, 80, 80, 80, 0, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 79, 79, 0, 0, 21, 0, 22, 23, 24,
+ 0, 0, 25, 26, 27, 28, 29, 0, 0, 0,
+ 0, 0, 0, 0, 34, 35, 0, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 0, 53, 54, 55, 0, 0, 0,
+ 0, 0, 56, 0, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 0, 0, 0, 67, 81, 81,
+ 81, 81, 0, 0, 0, 0, 0, 0, 78, 78,
+ 78, 78, 0, 0, 0, 70, 0, 0, 70, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 81, 81,
+ 81, 81, 70, 70, 0, 70, 0, 70, 78, 78,
+ 78, 78, 0, 0, 0, 81, 81, 81, 0, 81,
+ 81, 81, 81, 0, 81, 78, 78, 78, 0, 78,
+ 78, 78, 78, 0, 78, 0, 69, 70, 70, 69,
+ 0, 0, 0, 0, 0, 0, 79, 79, 79, 79,
+ 0, 0, 0, 69, 69, 0, 69, 0, 69, 0,
+ 0, 0, 0, 72, 0, 0, 72, 0, 70, 70,
+ 0, 0, 0, 0, 0, 0, 79, 79, 79, 79,
+ 72, 72, 0, 72, 0, 72, 0, 73, 69, 69,
+ 73, 0, 0, 79, 79, 79, 0, 79, 79, 79,
+ 79, 0, 79, 0, 73, 73, 0, 73, 0, 73,
+ 0, 0, 0, 60, 0, 72, 60, 0, 0, 69,
+ 69, 0, 0, 59, 0, 0, 59, 0, 0, 0,
+ 60, 60, 0, 0, 0, 0, 0, 0, 0, 73,
+ 59, 59, 0, 0, 0, 0, 58, 72, 0, 58,
+ 56, 0, 0, 56, 0, 0, 57, 0, 0, 57,
+ 0, 0, 0, 58, 58, 60, 53, 56, 56, 53,
+ 0, 73, 0, 57, 57, 59, 0, 0, 0, 0,
+ 0, 0, 0, 53, 53, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 60, 58, 0,
+ 0, 0, 56, 0, 0, 0, 0, 59, 57, 0,
+ 0, 0, 0, 70, 70, 70, 70, 0, 53, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 58, 0, 0, 0, 56, 0, 0, 0, 0, 0,
+ 57, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 70, 70, 70, 0, 69, 69, 69, 69, 0, 0,
+ 70, 70, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 72, 72, 72, 72, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 69, 69, 69, 0, 73, 73, 73, 73, 0,
+ 0, 69, 69, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 72, 72,
+ 72, 60, 60, 60, 60, 0, 0, 0, 72, 72,
+ 0, 59, 59, 59, 59, 0, 0, 0, 0, 0,
+ 0, 0, 73, 73, 0, 0, 0, 0, 0, 0,
+ 0, 0, 73, 73, 58, 58, 58, 58, 56, 56,
+ 56, 56, 0, 0, 57, 57, 57, 57, 0, 0,
+ 0, 0, 0, 0, 53, 53, 53, 53, 60, 60,
+ 0, 0, 0, 0, 151, 0, 0, 0, 59, 59,
+ 158, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 58, 58, 0, 0, 56, 56, 0, 0, 0,
+ 0, 57, 57, 0, 203, 0, 206, 0, 208, 0,
+ 210, 53, 53, 213, 0, 217, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 227, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 236,
+ 0, 0, 0, 240, 241, 242, 243, 244, 245, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 253, 254, 255, 256, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 290, 292, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 303, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 322, 324, 326, 0, 0,
+ 0, 0, 0, 0, 331, 0, 0, 0, 0, 335,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 345, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 203, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 378,
+};
+const short yycheck[] = { 18,
+ 0, 41, 40, 61, 44, 44, 25, 40, 44, 40,
+ 125, 30, 31, 32, 33, 40, 40, 40, 40, 257,
+ 257, 28, 201, 44, 44, 257, 44, 257, 44, 44,
+ 44, 40, 58, 33, 40, 92, 257, 135, 91, 137,
+ 40, 220, 263, 43, 41, 45, 326, 327, 107, 228,
+ 109, 257, 111, 61, 113, 40, 235, 91, 41, 59,
+ 91, 44, 59, 120, 121, 122, 123, 124, 125, 306,
+ 123, 309, 305, 123, 295, 93, 308, 93, 93, 93,
+ 322, 323, 303, 325, 41, 41, 125, 59, 0, 123,
+ 301, 302, 123, 100, 40, 102, 103, 41, 123, 123,
+ 123, 123, 59, 59, 125, 125, 41, 40, 257, 320,
+ 321, 322, 323, 40, 325, 59, 41, 301, 302, 40,
+ 40, 33, 40, 123, 59, 125, 126, 41, 40, 308,
+ 44, 43, 301, 45, 59, 314, 315, 40, 322, 323,
+ 319, 325, 257, 162, 40, 164, 40, 59, 263, 299,
+ 300, 301, 302, 322, 323, 299, 325, 301, 302, 68,
+ 69, 70, 71, 40, 306, 41, 75, 76, 44, 40,
+ 320, 321, 322, 323, 40, 325, 320, 321, 322, 323,
+ 295, 325, 41, 41, 363, 44, 44, 38, 303, 41,
+ 41, 370, 44, 44, 41, 41, 40, 44, 44, 257,
+ 41, 41, 41, 44, 44, 44, 41, 58, 59, 44,
+ 61, 123, 63, 392, 126, 41, 40, 40, 44, 257,
+ 399, 59, 41, 41, 257, 44, 44, 40, 40, 269,
+ 270, 271, 272, 269, 270, 271, 272, 296, 297, 298,
+ 299, 41, 93, 94, 44, 38, 305, 41, 257, 40,
+ 44, 257, 40, 310, 311, 40, 256, 257, 305, 259,
+ 260, 261, 40, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 124, 125, 308, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 358,
+ 309, 94, 308, 303, 304, 38, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 40, 38, 41, 319,
+ 379, 306, 273, 274, 275, 58, 326, 327, 61, 40,
+ 63, 124, 40, 123, 44, 91, 40, 44, 41, 257,
+ 41, 41, 41, 41, 256, 59, 41, 259, 260, 261,
+ 44, 44, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, 94, 44, 41, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 402, 296, 297, 298, 325, 306, 25,
+ 41, 124, 304, 29, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 91, 59, 41, 319, 41, 41,
+ 41, 41, 41, 41, 326, 327, 41, 53, 269, 270,
+ 271, 272, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 67, 59, 33, 41, 59, 59, 41, 41, 159,
+ 40, 12, 384, 43, 304, 45, -1, -1, 299, 300,
+ 301, 302, -1, -1, -1, 91, 92, -1, -1, 59,
+ -1, -1, -1, -1, -1, 316, 317, 318, -1, 320,
+ 321, 322, 323, -1, 325, 326, 327, -1, 114, -1,
+ -1, -1, -1, -1, 120, 121, 122, 123, 124, 125,
+ -1, -1, 128, 129, 130, 131, 132, -1, -1, -1,
+ -1, -1, 138, -1, -1, 33, 299, 300, 301, 302,
+ -1, -1, 40, -1, -1, 43, -1, 45, -1, -1,
+ -1, -1, -1, 123, 317, 318, 126, 320, 321, 322,
+ 323, 59, 325, -1, -1, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 38, 299, 300, 301, 302,
+ -1, -1, -1, -1, -1, -1, -1, -1, 299, 300,
+ 301, 302, -1, 316, 317, 318, -1, 320, 321, 322,
+ 323, -1, 325, -1, -1, 123, -1, -1, 126, 320,
+ 321, 322, 323, -1, 325, -1, -1, -1, -1, -1,
+ 33, 247, -1, -1, -1, -1, -1, 40, -1, -1,
+ 43, 94, 45, -1, 260, -1, 262, -1, -1, -1,
+ -1, -1, -1, 269, -1, 271, -1, 273, -1, 275,
+ -1, 277, -1, -1, -1, 281, -1, -1, -1, 38,
+ 286, 124, -1, -1, -1, -1, 256, 257, -1, 259,
+ 260, 261, -1, -1, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, -1, 310, 311, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, -1, 296, 297, 298, -1,
+ 123, -1, 338, 126, 304, 94, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, -1, -1, -1, 319,
+ -1, -1, -1, -1, -1, -1, 326, 327, 256, -1,
+ -1, 259, 260, 261, -1, 124, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, -1, -1, -1, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, -1, 296, 297,
+ 298, -1, -1, -1, -1, -1, 304, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, -1, -1,
+ -1, 319, -1, -1, -1, -1, -1, -1, 326, 327,
+ 33, -1, -1, -1, -1, -1, -1, 40, 41, -1,
+ 43, -1, 45, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 299, 300, 301, 302,
+ -1, -1, -1, -1, 257, -1, 259, 260, 261, -1,
+ -1, 264, 265, 266, 267, 268, -1, 320, 321, 322,
+ 323, -1, 325, 276, 277, -1, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, -1, 296, 297, 298, -1, -1, -1, -1,
+ -1, 304, -1, 306, 307, 308, 309, 310, 311, 312,
+ 313, 314, 315, 126, -1, 33, 319, -1, -1, -1,
+ -1, -1, 40, 326, 327, 43, -1, 45, -1, -1,
+ 299, 300, 301, 302, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 318,
+ -1, 320, 321, 322, 323, -1, 325, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
+ -1, -1, -1, -1, -1, -1, 40, 41, -1, 43,
+ -1, 45, -1, -1, -1, -1, -1, -1, 126, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 38, -1, -1, 41, -1, -1,
+ 44, -1, -1, -1, 257, -1, 259, 260, 261, -1,
+ -1, 264, 265, 266, 267, 268, -1, 61, -1, 63,
+ -1, -1, -1, 276, 277, -1, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 126, 296, 297, 298, -1, -1, -1, -1,
+ 94, 304, -1, 306, 307, 308, 309, 310, 311, 312,
+ 313, 314, 315, -1, -1, -1, 319, -1, -1, 33,
+ -1, -1, -1, 326, 327, -1, 40, 41, -1, 43,
+ 124, 45, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 256, 257,
+ -1, 259, 260, 261, -1, -1, 264, 265, 266, 267,
+ 268, -1, -1, -1, -1, -1, -1, -1, 276, 277,
+ -1, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, -1, 296, 297,
+ 298, -1, -1, -1, -1, -1, 304, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, -1, -1,
+ 33, 319, 126, -1, -1, -1, -1, 40, 326, 327,
+ 43, -1, 45, 257, -1, 259, 260, 261, -1, -1,
+ 264, 265, 266, 267, 268, -1, -1, -1, 61, -1,
+ -1, -1, 276, 277, -1, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, -1, 296, 297, 298, -1, -1, -1, -1, -1,
+ 304, -1, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, -1, -1, -1, 319, -1, -1, 33, -1,
+ -1, -1, 326, 327, -1, 40, -1, -1, 43, -1,
+ 45, -1, -1, 126, -1, 299, 300, 301, 302, -1,
+ -1, -1, -1, -1, -1, -1, 61, -1, -1, -1,
+ -1, -1, 316, 317, 318, -1, 320, 321, 322, 323,
+ -1, 325, 326, 327, -1, 38, -1, -1, -1, -1,
+ -1, 44, -1, 257, -1, 259, 260, 261, -1, -1,
+ 264, 265, 266, 267, 268, -1, -1, -1, 61, -1,
+ 63, -1, 276, 277, -1, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 126, 296, 297, 298, -1, -1, -1, -1, -1,
+ 304, 94, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, -1, -1, 33, 319, -1, -1, -1, -1,
+ -1, 40, 326, 327, 43, -1, 45, -1, -1, -1,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 61, -1, 257, -1, 259, 260, 261, -1,
+ -1, 264, 265, 266, 267, 268, -1, -1, -1, -1,
+ -1, -1, -1, 276, 277, -1, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, -1, 296, 297, 298, -1, -1, -1, -1,
+ -1, 304, -1, 306, 307, 308, 309, 310, 311, 312,
+ 313, 314, 315, -1, -1, -1, 319, 126, 33, -1,
+ -1, -1, -1, 326, 327, 40, -1, -1, 43, -1,
+ 45, -1, 257, -1, 259, 260, 261, -1, -1, 264,
+ 265, 266, 267, 268, -1, -1, 61, -1, -1, -1,
+ -1, 276, 277, -1, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ -1, 296, 297, 298, -1, -1, -1, -1, -1, 304,
+ -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, -1, -1, 33, 319, -1, -1, -1, -1, -1,
+ 40, 326, 327, 43, -1, 45, -1, -1, -1, -1,
+ -1, 126, -1, -1, -1, -1, 299, 300, 301, 302,
+ -1, 61, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 316, 317, 318, 38, 320, 321, 322,
+ 323, -1, 325, 326, 327, -1, -1, -1, 257, -1,
+ 259, 260, 261, -1, -1, 264, 265, 266, 267, 268,
+ -1, 63, -1, -1, -1, -1, -1, 276, 277, -1,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 126, 296, 297, 298,
+ -1, -1, 94, -1, -1, 304, -1, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, -1, -1, 33,
+ 319, -1, -1, -1, -1, -1, 40, 326, 327, 43,
+ -1, 45, 124, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 61, -1, -1,
+ -1, -1, 257, -1, 259, 260, 261, -1, -1, 264,
+ 265, 266, 267, 268, -1, -1, -1, -1, -1, -1,
+ -1, 276, 277, -1, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ -1, 296, 297, 298, -1, -1, -1, -1, -1, 304,
+ -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, -1, 126, 33, 319, -1, -1, -1, -1, -1,
+ 40, 326, 327, 43, -1, 45, -1, 257, -1, 259,
+ 260, 261, -1, -1, 264, 265, 266, 267, 268, -1,
+ -1, 61, -1, -1, -1, -1, 276, 277, -1, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, -1, 296, 297, 298, -1,
+ -1, -1, -1, -1, 304, -1, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, -1, -1, 33, 319,
+ -1, -1, -1, -1, -1, 40, 326, 327, 43, -1,
+ 45, -1, -1, -1, -1, -1, 126, 299, 300, 301,
+ 302, -1, -1, -1, -1, -1, 61, -1, -1, -1,
+ -1, -1, -1, -1, 316, 317, 318, -1, 320, 321,
+ 322, 323, -1, 325, -1, 38, -1, -1, 41, -1,
+ -1, 44, -1, 257, -1, 259, 260, 261, -1, -1,
+ 264, 265, 266, 267, 268, -1, -1, -1, 61, -1,
+ 63, -1, 276, 277, -1, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 126, 296, 297, 298, -1, -1, -1, -1, -1,
+ 304, 94, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, -1, -1, -1, 319, -1, 33, -1, -1,
+ -1, -1, 326, 327, 40, 41, -1, 43, -1, 45,
+ -1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 257, -1, 259,
+ 260, 261, -1, -1, 264, 265, 266, 267, 268, -1,
+ -1, -1, -1, -1, -1, -1, 276, 277, -1, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, -1, 296, 297, 298, -1,
+ -1, -1, -1, -1, 304, -1, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, -1, -1, -1, 319,
+ 126, 33, -1, -1, -1, -1, 326, 327, 40, 41,
+ -1, 43, 257, 45, 259, 260, 261, -1, -1, 264,
+ 265, 266, 267, 268, -1, -1, -1, -1, -1, -1,
+ -1, 276, 277, -1, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ -1, 296, 297, 298, -1, -1, -1, -1, -1, 304,
+ -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, -1, -1, -1, 319, -1, 33, -1, -1, -1,
+ -1, 326, 327, 40, 41, -1, 43, -1, 45, -1,
+ -1, -1, -1, -1, 126, -1, 299, 300, 301, 302,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 316, 317, 318, -1, 320, 321, 322,
+ 323, -1, 325, 38, -1, -1, -1, -1, -1, 44,
+ -1, 257, -1, 259, 260, 261, -1, -1, 264, 265,
+ 266, 267, 268, -1, -1, -1, 61, -1, 63, -1,
+ 276, 277, -1, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 126,
+ 296, 297, 298, -1, -1, -1, -1, -1, 304, 94,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ -1, -1, -1, 319, -1, 33, -1, -1, -1, -1,
+ 326, 327, 40, 41, -1, 43, -1, 45, -1, 124,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 257, -1, 259, 260, 261,
+ -1, -1, 264, 265, 266, 267, 268, -1, -1, -1,
+ -1, -1, -1, -1, 276, 277, -1, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, -1, 296, 297, 298, -1, -1, -1,
+ -1, -1, 304, -1, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, -1, -1, -1, 319, 126, 33,
+ -1, -1, -1, -1, 326, 327, 40, 41, -1, 43,
+ 257, 45, 259, 260, 261, -1, -1, 264, 265, 266,
+ 267, 268, -1, -1, -1, -1, -1, -1, -1, 276,
+ 277, -1, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, -1, 296,
+ 297, 298, -1, -1, -1, -1, -1, 304, -1, 306,
+ 307, 308, 309, 310, 311, 312, 313, 314, 315, -1,
+ -1, -1, 319, -1, 33, -1, -1, -1, -1, 326,
+ 327, 40, -1, -1, 43, -1, 45, -1, -1, -1,
+ -1, -1, 126, -1, 299, 300, 301, 302, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 316, 317, 318, -1, 320, 321, 322, 323, 38,
+ 325, -1, -1, -1, -1, 44, -1, -1, -1, 257,
+ -1, 259, 260, 261, -1, -1, 264, 265, 266, 267,
+ 268, -1, 61, -1, 63, -1, -1, -1, 276, 277,
+ -1, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 126, 296, 297,
+ 298, -1, -1, -1, -1, 94, 304, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, -1, -1,
+ 33, 319, -1, -1, -1, -1, -1, 40, 326, 327,
+ 43, -1, 45, -1, -1, 124, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 257, -1, 259, 260, 261, -1, -1,
+ 264, 265, 266, 267, 268, -1, -1, -1, -1, -1,
+ -1, -1, 276, 277, -1, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, -1, 296, 297, 298, -1, -1, -1, -1, -1,
+ 304, -1, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, -1, 126, 33, 319, -1, -1, -1, -1,
+ -1, 40, 326, 327, 43, -1, 45, -1, 257, -1,
+ 259, 260, 261, -1, -1, 264, 265, 266, 267, 268,
+ -1, -1, -1, -1, -1, -1, -1, 276, 277, -1,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, -1, 296, 297, 298,
+ -1, -1, -1, -1, -1, 304, -1, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, -1, -1, 33,
+ 319, -1, -1, -1, -1, -1, 40, 326, 327, 43,
+ -1, 45, -1, -1, -1, -1, -1, 126, -1, -1,
+ 299, 300, 301, 302, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 316, 317, 318,
+ -1, 320, 321, 322, 323, -1, 325, -1, -1, -1,
+ -1, -1, -1, -1, 257, -1, 259, 260, 261, -1,
+ -1, 264, 265, 266, 267, 268, -1, -1, -1, -1,
+ -1, -1, -1, 276, 277, -1, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 126, 296, 297, 298, -1, -1, -1, -1,
+ -1, 304, -1, 306, 307, 308, 309, 310, 311, 312,
+ 313, 314, 315, -1, -1, 33, 319, -1, -1, -1,
+ -1, -1, 40, 326, 327, 43, -1, 45, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 257, -1,
+ 259, 260, 261, -1, -1, 264, 265, 266, 267, 268,
+ -1, -1, -1, -1, -1, -1, -1, 276, 277, -1,
+ 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, -1, 296, 297, 298,
+ -1, -1, -1, -1, -1, 304, -1, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, -1, 126, -1,
+ 319, -1, -1, -1, -1, -1, -1, 326, 327, -1,
+ -1, -1, -1, 257, -1, 259, 260, 261, -1, -1,
+ 264, 265, 266, 267, 268, -1, -1, -1, -1, -1,
+ -1, -1, 276, 277, -1, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, -1, 296, 297, 298, -1, -1, -1, -1, -1,
+ 304, -1, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, -1, -1, -1, 319, -1, -1, -1, -1,
+ -1, -1, 326, 327, -1, -1, 38, -1, -1, 41,
+ -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 58, 59, -1, 61,
+ -1, 63, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 257,
+ -1, 259, 260, 261, -1, -1, 264, 265, 266, 267,
+ 268, 93, 94, -1, -1, -1, -1, -1, 276, 277,
+ -1, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, -1, 296, 297,
+ 298, -1, 124, 125, -1, -1, 304, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, -1, 38,
+ -1, 319, 41, -1, -1, 44, -1, -1, 326, 327,
+ -1, 38, -1, -1, 41, -1, -1, 44, -1, 58,
+ 59, -1, 61, 41, 63, -1, 44, -1, -1, -1,
+ -1, 58, 59, -1, 61, -1, 63, -1, -1, -1,
+ 58, 59, -1, 61, -1, 63, -1, -1, -1, -1,
+ -1, -1, -1, -1, 93, 94, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 93, 94, -1, -1,
+ -1, -1, -1, -1, -1, 93, -1, -1, -1, -1,
+ -1, 38, -1, -1, 41, 124, 125, 44, -1, -1,
+ -1, -1, -1, 41, -1, -1, 44, 124, 125, -1,
+ -1, 58, 59, -1, 61, -1, 63, 125, -1, -1,
+ 58, 59, -1, 61, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 269, 270, 271,
+ 272, -1, -1, -1, -1, -1, 93, 94, -1, -1,
+ -1, 38, -1, -1, 41, 93, -1, 44, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 299, 300, 301,
+ 302, 58, 59, -1, 61, -1, 63, 124, 125, -1,
+ -1, -1, -1, -1, 316, 317, 318, 125, 320, 321,
+ 322, 323, -1, 325, 326, 327, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 93, 94, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 38, -1, -1, 41, -1,
+ -1, 44, -1, -1, -1, -1, -1, 124, 125, -1,
+ 269, 270, 271, 272, -1, 58, 59, -1, 61, -1,
+ 63, -1, 269, 270, 271, 272, -1, -1, -1, -1,
+ -1, 269, 270, 271, 272, -1, -1, -1, -1, -1,
+ 299, 300, 301, 302, -1, -1, -1, -1, -1, -1,
+ 93, 94, 299, 300, 301, 302, -1, 316, 317, 318,
+ -1, 320, 321, 322, 323, -1, 325, 326, 327, 316,
+ 317, 318, -1, 320, 321, 322, 323, -1, 325, 326,
+ 327, 124, 125, -1, -1, -1, -1, -1, 326, 327,
+ -1, -1, 269, 270, 271, 272, -1, -1, -1, -1,
+ -1, 269, 270, 271, 272, -1, 38, -1, -1, 41,
+ -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 299, 300, 301, 302, 58, 59, -1, 61,
+ -1, 63, -1, -1, -1, -1, -1, -1, -1, 316,
+ 317, 318, -1, 320, 321, 322, 323, -1, 325, 326,
+ 327, -1, 269, 270, 271, 272, -1, -1, 326, 327,
+ -1, 93, 94, -1, -1, -1, 38, -1, -1, 41,
+ -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 299, 300, 301, 302, 58, 59, -1, 61,
+ -1, 63, 124, 125, -1, -1, -1, -1, -1, 316,
+ 317, 318, -1, 320, 321, 322, 323, -1, 325, 326,
+ 327, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 93, 94, -1, -1, -1, 269, 270, 271, 272,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 38, -1, -1, 41, -1, -1, 44, -1, -1, -1,
+ -1, 41, 124, 125, 44, -1, 299, 300, 301, 302,
+ 58, 59, -1, 61, -1, 63, -1, -1, 58, 59,
+ -1, -1, -1, 316, 317, 318, -1, 320, 321, 322,
+ 323, -1, 325, 326, 327, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 93, 94, -1, -1, -1,
+ -1, -1, -1, 93, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 38, -1, -1, 41, 124, 125, 44, -1,
+ -1, 41, -1, -1, 44, 125, -1, 269, 270, 271,
+ 272, -1, 58, 59, -1, 61, -1, 63, 58, 59,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 299, 300, 301,
+ 302, -1, -1, -1, -1, -1, -1, 93, 94, -1,
+ -1, -1, -1, 93, 316, 317, 318, -1, 320, 321,
+ 322, 323, -1, 325, 326, 327, -1, 269, 270, 271,
+ 272, 38, -1, -1, 41, -1, -1, 44, 124, 125,
+ -1, -1, -1, 38, -1, 125, 41, -1, -1, 44,
+ -1, 58, 59, -1, 61, -1, 63, 299, 300, 301,
+ 302, -1, -1, 58, 59, -1, 61, -1, 63, -1,
+ -1, -1, -1, -1, 316, 317, 318, -1, 320, 321,
+ 322, 323, -1, 325, 326, 327, 93, 94, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 93, 94,
+ -1, 269, 270, 271, 272, -1, -1, -1, -1, 269,
+ 270, 271, 272, -1, -1, -1, 38, 124, 125, 41,
+ -1, -1, -1, -1, -1, 41, -1, -1, 44, 124,
+ 125, 299, 300, 301, 302, -1, 58, 59, -1, 61,
+ -1, 63, 58, 59, -1, -1, -1, -1, 316, 317,
+ 318, -1, 320, 321, 322, 323, -1, 325, 326, 327,
+ -1, -1, -1, -1, -1, -1, 326, 327, -1, -1,
+ -1, 93, 94, -1, -1, -1, -1, 93, -1, -1,
+ -1, -1, -1, 269, 270, 271, 272, -1, -1, 269,
+ 270, 271, 272, -1, -1, -1, -1, 38, -1, -1,
+ 41, -1, 124, 125, -1, -1, -1, -1, -1, 125,
+ -1, -1, -1, 299, 300, 301, 302, 58, 59, -1,
+ 61, -1, 63, -1, -1, -1, -1, -1, -1, -1,
+ 316, 317, 318, -1, 320, 321, 322, 323, -1, 325,
+ 326, 327, -1, -1, -1, -1, 326, 327, -1, -1,
+ -1, -1, 93, 94, -1, -1, -1, -1, -1, -1,
+ -1, -1, 269, 270, 271, 272, -1, -1, -1, -1,
+ -1, -1, -1, -1, 269, 270, 271, 272, 38, -1,
+ -1, 41, -1, 124, 125, -1, -1, -1, -1, -1,
+ -1, -1, 299, 300, 301, 302, -1, -1, 58, 59,
+ -1, 61, -1, 63, 299, 300, 301, 302, -1, 316,
+ 317, 318, -1, 320, 321, 322, 323, -1, 325, 326,
+ 327, 316, 317, 318, -1, 320, 321, 322, 323, -1,
+ 325, 326, 327, 93, 94, -1, -1, 38, -1, -1,
+ 41, -1, -1, 44, -1, -1, -1, 269, 270, 271,
+ 272, -1, -1, 269, 270, 271, 272, 58, 59, -1,
+ 61, -1, 63, -1, 124, 125, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 299, 300, 301,
+ 302, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 93, 94, 316, 317, 318, -1, 320, 321,
+ 322, 323, -1, 325, 326, 327, -1, -1, -1, -1,
+ 326, 327, 38, -1, -1, 41, -1, -1, 44, -1,
+ -1, -1, -1, 124, 125, -1, -1, -1, 269, 270,
+ 271, 272, 58, 59, -1, 61, -1, 63, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 38,
+ -1, -1, 41, -1, -1, 44, -1, -1, 299, 300,
+ 301, 302, -1, -1, -1, -1, -1, 93, 94, 58,
+ 59, -1, 61, -1, 63, 316, 317, 318, -1, 320,
+ 321, 322, 323, -1, 325, 326, 327, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 124, 125,
+ -1, -1, -1, -1, 93, 94, -1, -1, -1, 269,
+ 270, 271, 272, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 38, -1, -1, 41, -1, -1, 44,
+ -1, -1, -1, -1, -1, 124, 125, -1, -1, 299,
+ 300, 301, 302, 58, 59, -1, 61, -1, 63, -1,
+ -1, -1, -1, -1, -1, -1, 316, 317, 318, -1,
+ 320, 321, 322, 323, -1, 325, 326, 327, 269, 270,
+ 271, 272, -1, -1, -1, -1, -1, -1, 93, 94,
+ -1, -1, 38, -1, -1, 41, -1, -1, 44, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 299, 300,
+ 301, 302, 58, 59, -1, 61, -1, 63, -1, 124,
+ 125, -1, -1, -1, -1, 316, 317, 318, -1, 320,
+ 321, 322, 323, -1, -1, 326, 327, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 93, 94, -1,
+ -1, -1, -1, 269, 270, 271, 272, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 38, -1, -1, 41, 124, 125,
+ 44, -1, -1, 299, 300, 301, 302, -1, -1, -1,
+ 269, 270, 271, 272, 58, 59, -1, 61, -1, 63,
+ 316, 317, 318, -1, 320, 321, 322, 323, -1, -1,
+ 326, 327, -1, -1, -1, -1, -1, -1, -1, -1,
+ 299, 300, 301, 302, -1, -1, -1, -1, -1, 93,
+ 94, -1, -1, -1, -1, -1, -1, 316, 317, 318,
+ -1, 320, 321, 322, 323, -1, -1, 326, 327, 38,
+ -1, -1, 41, -1, -1, 44, -1, -1, -1, -1,
+ 124, 125, -1, -1, 269, 270, 271, 272, -1, 58,
+ 59, -1, 61, -1, 63, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 299, 300, 301, 302, -1, -1,
+ -1, -1, -1, -1, 93, 94, -1, -1, -1, -1,
+ -1, 316, 317, 318, -1, 320, 321, -1, -1, -1,
+ -1, 326, 327, 269, 270, 271, 272, 38, -1, -1,
+ 41, -1, -1, 44, -1, 124, 125, -1, -1, 38,
+ -1, -1, 41, -1, -1, 44, -1, 58, 59, -1,
+ 61, -1, 63, 299, 300, -1, 302, -1, -1, 58,
+ 59, -1, 61, -1, 63, -1, -1, -1, -1, -1,
+ 316, 317, 318, -1, 320, 321, -1, -1, -1, -1,
+ 326, 327, 93, 94, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 93, 94, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 269, 270, 271, 272, 38,
+ -1, -1, 41, 124, 125, 44, -1, -1, -1, -1,
+ -1, 38, -1, -1, 41, 124, 125, 44, -1, 58,
+ 59, -1, 61, -1, 63, 299, 300, -1, -1, -1,
+ -1, 58, 59, -1, 61, -1, 63, -1, -1, -1,
+ -1, -1, 316, 317, 318, -1, 320, 321, -1, -1,
+ -1, -1, 326, 327, 93, 94, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 93, 94, 38, -1,
+ 269, 270, 271, 272, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 38, 124, 125, 41, -1, -1,
+ 44, 61, -1, 63, -1, -1, -1, 124, 125, -1,
+ 299, 300, -1, -1, 58, 59, -1, 61, -1, 63,
+ -1, -1, -1, -1, -1, -1, -1, 316, 317, 318,
+ -1, 320, 321, -1, 94, -1, -1, 326, 327, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
+ 94, -1, -1, -1, -1, -1, -1, -1, 269, 270,
+ 271, 272, -1, -1, 124, -1, -1, -1, -1, -1,
+ 269, 270, 271, 272, -1, -1, -1, -1, -1, 41,
+ 124, 125, 44, -1, -1, -1, -1, -1, 299, 300,
+ -1, -1, -1, -1, -1, -1, 58, 59, -1, -1,
+ 299, 300, -1, -1, -1, 316, 317, 318, -1, -1,
+ -1, -1, -1, -1, -1, 326, 327, 316, 317, 318,
+ -1, -1, -1, -1, -1, -1, 38, 326, 327, 41,
+ -1, 93, 44, -1, -1, -1, -1, -1, -1, -1,
+ 269, 270, 271, 272, -1, -1, 58, 59, -1, 61,
+ -1, 63, 269, 270, 271, 272, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, -1, -1, -1, -1,
+ 299, 300, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 93, 94, 300, -1, -1, -1, 316, 317, 318,
+ -1, -1, -1, -1, -1, -1, -1, 326, 327, 316,
+ 317, 318, -1, -1, -1, -1, -1, -1, -1, 326,
+ 327, 38, 124, 125, 41, -1, -1, 44, -1, -1,
+ -1, -1, -1, -1, -1, 269, 270, 271, 272, -1,
+ -1, 58, 59, -1, 61, -1, 63, -1, -1, 299,
+ 300, 301, 302, -1, -1, -1, -1, -1, -1, -1,
+ -1, 41, -1, -1, 44, -1, 316, 317, 318, -1,
+ 320, 321, 322, 323, -1, 325, 93, 94, 58, 59,
+ -1, -1, 316, 317, 318, -1, -1, -1, -1, -1,
+ -1, 38, 326, 327, 41, -1, -1, 44, -1, -1,
+ -1, -1, -1, 38, -1, -1, 41, 124, 125, 44,
+ -1, 58, 59, 93, 61, -1, 63, 269, 270, 271,
+ 272, -1, -1, 58, 59, -1, 61, -1, 63, -1,
+ -1, -1, -1, -1, 212, -1, -1, -1, -1, -1,
+ -1, -1, -1, 221, 222, 125, 93, 94, -1, -1,
+ -1, 229, 230, 231, 232, -1, 234, -1, 93, 94,
+ -1, -1, -1, -1, -1, -1, -1, 269, 270, 271,
+ 272, -1, -1, 38, 326, 327, 41, 124, 125, 44,
+ -1, -1, -1, -1, -1, 38, -1, -1, 41, 124,
+ 125, 44, -1, 58, 59, -1, 61, -1, 63, -1,
+ -1, -1, -1, -1, -1, 58, 59, -1, 61, 287,
+ 63, -1, -1, -1, 316, 317, 318, -1, -1, -1,
+ -1, -1, -1, 301, 326, 327, -1, -1, 93, 94,
+ -1, 309, -1, -1, -1, -1, -1, -1, 316, 317,
+ 93, 94, 38, -1, -1, 41, -1, -1, 44, -1,
+ -1, -1, 269, 270, 271, 272, -1, -1, -1, 124,
+ 125, -1, 58, 59, -1, 61, -1, 63, -1, -1,
+ 348, 124, 125, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 299, 300, 301, 302, -1, 365, -1, 269,
+ 270, 271, 272, 371, -1, -1, -1, 93, 94, 316,
+ 317, 318, -1, 320, 321, 322, 323, -1, 325, -1,
+ 388, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 269, 270, 271, 272, -1, -1, 124, 125,
+ -1, -1, -1, -1, 269, 270, 271, 272, 38, -1,
+ -1, 41, -1, -1, 44, -1, 326, 327, -1, -1,
+ -1, -1, 299, 300, 301, 302, -1, -1, 58, 59,
+ -1, 61, -1, 63, 299, 300, 301, 302, -1, 316,
+ 317, 318, -1, 320, 321, 322, 323, -1, 325, -1,
+ -1, 316, 317, 318, -1, 320, 321, 322, 323, -1,
+ 325, -1, -1, 93, 94, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 269, 270, 271, 272, -1, -1,
+ -1, -1, -1, -1, -1, -1, 269, 270, 271, 272,
+ -1, 33, -1, -1, 124, 125, -1, -1, 40, -1,
+ -1, 43, -1, 45, 299, 300, 301, 302, -1, -1,
+ -1, -1, -1, -1, -1, -1, 299, 300, 301, 302,
+ -1, 316, 317, 318, -1, 320, 321, 322, 323, -1,
+ 325, -1, -1, 316, 317, 318, -1, 320, 321, 322,
+ 323, -1, 325, 269, 270, 271, 272, 38, -1, 91,
+ 41, -1, -1, 44, -1, -1, -1, 38, -1, -1,
+ 41, -1, -1, 44, -1, -1, -1, 58, 59, -1,
+ 61, -1, 63, 299, 300, 301, 302, 58, 59, -1,
+ 61, 123, 63, -1, 126, -1, -1, -1, -1, -1,
+ 316, 317, 318, -1, 320, 321, 322, 323, -1, 325,
+ -1, -1, 93, 94, -1, -1, -1, -1, -1, -1,
+ -1, -1, 93, 94, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 38, -1, -1, 41, -1,
+ -1, 44, -1, 124, 125, -1, -1, -1, -1, 269,
+ 270, 271, 272, 124, 125, 58, 59, -1, 61, -1,
+ 63, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 299,
+ 300, 301, 302, -1, -1, -1, -1, -1, -1, -1,
+ 93, 94, -1, -1, -1, -1, 316, 317, 318, -1,
+ 320, 321, 322, 323, -1, 325, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 124, 125, -1, -1, 257, -1, 259, 260, 261,
+ -1, -1, 264, 265, 266, 267, 268, -1, -1, -1,
+ -1, -1, -1, -1, 276, 277, -1, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, -1, 296, 297, 298, -1, -1, -1,
+ -1, -1, 304, -1, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, -1, -1, -1, 319, 269, 270,
+ 271, 272, -1, -1, -1, -1, -1, -1, 269, 270,
+ 271, 272, -1, -1, -1, 41, -1, -1, 44, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 299, 300,
+ 301, 302, 58, 59, -1, 61, -1, 63, 299, 300,
+ 301, 302, -1, -1, -1, 316, 317, 318, -1, 320,
+ 321, 322, 323, -1, 325, 316, 317, 318, -1, 320,
+ 321, 322, 323, -1, 325, -1, 41, 93, 94, 44,
+ -1, -1, -1, -1, -1, -1, 269, 270, 271, 272,
+ -1, -1, -1, 58, 59, -1, 61, -1, 63, -1,
+ -1, -1, -1, 41, -1, -1, 44, -1, 124, 125,
+ -1, -1, -1, -1, -1, -1, 299, 300, 301, 302,
+ 58, 59, -1, 61, -1, 63, -1, 41, 93, 94,
+ 44, -1, -1, 316, 317, 318, -1, 320, 321, 322,
+ 323, -1, 325, -1, 58, 59, -1, 61, -1, 63,
+ -1, -1, -1, 41, -1, 93, 44, -1, -1, 124,
+ 125, -1, -1, 41, -1, -1, 44, -1, -1, -1,
+ 58, 59, -1, -1, -1, -1, -1, -1, -1, 93,
+ 58, 59, -1, -1, -1, -1, 41, 125, -1, 44,
+ 41, -1, -1, 44, -1, -1, 41, -1, -1, 44,
+ -1, -1, -1, 58, 59, 93, 41, 58, 59, 44,
+ -1, 125, -1, 58, 59, 93, -1, -1, -1, -1,
+ -1, -1, -1, 58, 59, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 125, 93, -1,
+ -1, -1, 93, -1, -1, -1, -1, 125, 93, -1,
+ -1, -1, -1, 269, 270, 271, 272, -1, 93, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 125, -1, -1, -1, 125, -1, -1, -1, -1, -1,
+ 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 316, 317, 318, -1, 269, 270, 271, 272, -1, -1,
+ 326, 327, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 269, 270, 271, 272, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 316, 317, 318, -1, 269, 270, 271, 272, -1,
+ -1, 326, 327, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 316, 317,
+ 318, 269, 270, 271, 272, -1, -1, -1, 326, 327,
+ -1, 269, 270, 271, 272, -1, -1, -1, -1, -1,
+ -1, -1, 316, 317, -1, -1, -1, -1, -1, -1,
+ -1, -1, 326, 327, 269, 270, 271, 272, 269, 270,
+ 271, 272, -1, -1, 269, 270, 271, 272, -1, -1,
+ -1, -1, -1, -1, 269, 270, 271, 272, 326, 327,
+ -1, -1, -1, -1, 66, -1, -1, -1, 326, 327,
+ 72, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 326, 327, -1, -1, 326, 327, -1, -1, -1,
+ -1, 326, 327, -1, 106, -1, 108, -1, 110, -1,
+ 112, 326, 327, 115, -1, 117, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 127, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 141,
+ -1, -1, -1, 145, 146, 147, 148, 149, 150, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 167, 168, 169, 170, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 198, 199, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 214, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 237, 238, 239, -1, -1,
+ -1, -1, -1, -1, 246, -1, -1, -1, -1, 251,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 284, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 304, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 333,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 327
+#if YYDEBUG
+const char * const yyname[] = {
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"'!'",0,0,0,0,"'&'",0,"'('","')'",0,"'+'","','","'-'",0,0,0,0,0,0,0,0,0,0,0,0,
+"':'","';'",0,"'='",0,"'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,"'['",0,"']'","'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"'{'","'|'","'}'","'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"WORD","APPEND","OPEN","SSELECT",
+"LOOPEX","USING","FORMAT","DO","SHIFT","PUSH","POP","LVALFUN","WHILE","UNTIL",
+"IF","UNLESS","ELSE","ELSIF","CONTINUE","SPLIT","FLIST","FOR","FILOP","FILOP2",
+"FILOP3","FILOP4","FILOP22","FILOP25","FUNC0","FUNC1","FUNC2","FUNC2x","FUNC3",
+"FUNC4","FUNC5","HSHFUN","HSHFUN3","FLIST2","SUB","FILETEST","LOCAL","DELETE",
+"RELOP","EQOP","MULOP","ADDOP","PACKAGE","AMPER","FORMLIST","REG","ARYLEN",
+"ARY","HSH","STAR","SUBST","PATTERN","RSTRING","TRANS","LISTOP","DOTDOT","OROR",
+"ANDAND","UNIOP","LS","RS","MATCH","NMATCH","UMINUS","POW","INC","DEC",
+};
+const char * const yyrule[] = {
+"$accept : prog",
+"$$1 :",
+"prog : $$1 lineseq",
+"compblock : block CONTINUE block",
+"compblock : block else",
+"else :",
+"else : ELSE block",
+"else : ELSIF '(' expr ')' compblock",
+"block : '{' remember lineseq '}'",
+"remember :",
+"lineseq :",
+"lineseq : lineseq line",
+"line : decl",
+"line : label cond",
+"line : loop",
+"line : label ';'",
+"line : label sideff ';'",
+"sideff : error",
+"sideff : expr",
+"sideff : expr IF expr",
+"sideff : expr UNLESS expr",
+"sideff : expr WHILE expr",
+"sideff : expr UNTIL expr",
+"cond : IF '(' expr ')' compblock",
+"cond : UNLESS '(' expr ')' compblock",
+"cond : IF block compblock",
+"cond : UNLESS block compblock",
+"loop : label WHILE '(' texpr ')' compblock",
+"loop : label UNTIL '(' expr ')' compblock",
+"loop : label WHILE block compblock",
+"loop : label UNTIL block compblock",
+"loop : label FOR REG '(' expr ')' compblock",
+"loop : label FOR '(' expr ')' compblock",
+"loop : label FOR '(' nexpr ';' texpr ';' nexpr ')' block",
+"loop : label compblock",
+"nexpr :",
+"nexpr : sideff",
+"texpr :",
+"texpr : expr",
+"label :",
+"label : WORD ':'",
+"decl : format",
+"decl : subrout",
+"decl : package",
+"format : FORMAT WORD '=' FORMLIST",
+"format : FORMAT '=' FORMLIST",
+"subrout : SUB WORD block",
+"package : PACKAGE WORD ';'",
+"cexpr : ',' expr",
+"expr : expr ',' sexpr",
+"expr : sexpr",
+"csexpr : ',' sexpr",
+"sexpr : sexpr '=' sexpr",
+"sexpr : sexpr POW '=' sexpr",
+"sexpr : sexpr MULOP '=' sexpr",
+"sexpr : sexpr ADDOP '=' sexpr",
+"sexpr : sexpr LS '=' sexpr",
+"sexpr : sexpr RS '=' sexpr",
+"sexpr : sexpr '&' '=' sexpr",
+"sexpr : sexpr '^' '=' sexpr",
+"sexpr : sexpr '|' '=' sexpr",
+"sexpr : sexpr POW sexpr",
+"sexpr : sexpr MULOP sexpr",
+"sexpr : sexpr ADDOP sexpr",
+"sexpr : sexpr LS sexpr",
+"sexpr : sexpr RS sexpr",
+"sexpr : sexpr RELOP sexpr",
+"sexpr : sexpr EQOP sexpr",
+"sexpr : sexpr '&' sexpr",
+"sexpr : sexpr '^' sexpr",
+"sexpr : sexpr '|' sexpr",
+"sexpr : sexpr DOTDOT sexpr",
+"sexpr : sexpr ANDAND sexpr",
+"sexpr : sexpr OROR sexpr",
+"sexpr : sexpr '?' sexpr ':' sexpr",
+"sexpr : sexpr MATCH sexpr",
+"sexpr : sexpr NMATCH sexpr",
+"sexpr : term",
+"term : '-' term",
+"term : '+' term",
+"term : '!' term",
+"term : '~' term",
+"term : term INC",
+"term : term DEC",
+"term : INC term",
+"term : DEC term",
+"term : FILETEST WORD",
+"term : FILETEST sexpr",
+"term : FILETEST",
+"term : LOCAL '(' expr ')'",
+"term : '(' expr ',' ')'",
+"term : '(' expr ')'",
+"term : '(' ')'",
+"term : DO sexpr",
+"term : DO block",
+"term : REG",
+"term : STAR",
+"term : REG '[' expr ']'",
+"term : HSH",
+"term : ARY",
+"term : REG '{' expr '}'",
+"term : '(' expr ')' '[' expr ']'",
+"term : '(' ')' '[' expr ']'",
+"term : ARY '[' expr ']'",
+"term : ARY '{' expr '}'",
+"term : DELETE REG '{' expr '}'",
+"term : ARYLEN",
+"term : RSTRING",
+"term : PATTERN",
+"term : SUBST",
+"term : TRANS",
+"term : DO WORD '(' expr ')'",
+"term : AMPER WORD '(' expr ')'",
+"term : DO WORD '(' ')'",
+"term : AMPER WORD '(' ')'",
+"term : AMPER WORD",
+"term : DO REG '(' expr ')'",
+"term : AMPER REG '(' expr ')'",
+"term : DO REG '(' ')'",
+"term : AMPER REG '(' ')'",
+"term : AMPER REG",
+"term : LOOPEX",
+"term : LOOPEX WORD",
+"term : UNIOP",
+"term : UNIOP sexpr",
+"term : SSELECT",
+"term : SSELECT '(' handle ')'",
+"term : SSELECT '(' sexpr csexpr csexpr csexpr ')'",
+"term : OPEN WORD",
+"term : OPEN '(' WORD ')'",
+"term : OPEN '(' handle cexpr ')'",
+"term : FILOP '(' handle ')'",
+"term : FILOP WORD",
+"term : FILOP REG",
+"term : FILOP '(' ')'",
+"term : FILOP",
+"term : FILOP2 '(' handle cexpr ')'",
+"term : FILOP3 '(' handle csexpr cexpr ')'",
+"term : FILOP22 '(' handle ',' handle ')'",
+"term : FILOP4 '(' handle csexpr csexpr cexpr ')'",
+"term : FILOP25 '(' handle ',' handle csexpr csexpr cexpr ')'",
+"term : PUSH '(' aryword cexpr ')'",
+"term : POP aryword",
+"term : POP '(' aryword ')'",
+"term : SHIFT aryword",
+"term : SHIFT '(' aryword ')'",
+"term : SHIFT",
+"term : SPLIT",
+"term : SPLIT '(' sexpr csexpr csexpr ')'",
+"term : SPLIT '(' sexpr csexpr ')'",
+"term : SPLIT '(' sexpr ')'",
+"term : FLIST2 '(' sexpr cexpr ')'",
+"term : FLIST '(' expr ')'",
+"term : LVALFUN sexpr",
+"term : LVALFUN",
+"term : FUNC0",
+"term : FUNC0 '(' ')'",
+"term : FUNC1 '(' ')'",
+"term : FUNC1 '(' expr ')'",
+"term : FUNC2 '(' sexpr cexpr ')'",
+"term : FUNC2x '(' sexpr csexpr ')'",
+"term : FUNC2x '(' sexpr csexpr cexpr ')'",
+"term : FUNC3 '(' sexpr csexpr cexpr ')'",
+"term : FUNC4 '(' sexpr csexpr csexpr cexpr ')'",
+"term : FUNC5 '(' sexpr csexpr csexpr csexpr cexpr ')'",
+"term : HSHFUN '(' hshword ')'",
+"term : HSHFUN hshword",
+"term : HSHFUN3 '(' hshword csexpr cexpr ')'",
+"term : bareword",
+"term : listop",
+"listop : LISTOP",
+"listop : LISTOP expr",
+"listop : LISTOP WORD",
+"listop : LISTOP WORD expr",
+"listop : LISTOP REG expr",
+"handle : WORD",
+"handle : sexpr",
+"aryword : WORD",
+"aryword : ARY",
+"hshword : WORD",
+"hshword : HSH",
+"bareword : WORD",
+};
+#endif
+#if YYDEBUG
+#include <stdio.h>
+#endif
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+#define YYINITSTACKSIZE 200
+int yydebug;
+int yynerrs;
+int yyerrflag;
+int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
+YYSTYPE yyval;
+YYSTYPE yylval;
+short *yyss;
+short *yysslim;
+YYSTYPE *yyvs;
+int yystacksize;
+#line 792 "perly.y"
+ /* PROGRAM */
+#line 1787 "y.tab.c"
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack()
+{
+ int newsize, i;
+ short *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = yystacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return -1;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+ i = yyssp - yyss;
+ newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
+ (short *)malloc(newsize * sizeof *newss);
+ if (newss == NULL)
+ return -1;
+ yyss = newss;
+ yyssp = newss + i;
+ newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
+ (YYSTYPE *)malloc(newsize * sizeof *newvs);
+ if (newvs == NULL)
+ return -1;
+ yyvs = newvs;
+ yyvsp = newvs + i;
+ yystacksize = newsize;
+ yysslim = yyss + newsize - 1;
+ return 0;
+}
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+#ifndef YYPARSE_PARAM
+#if defined(__cplusplus) || __STDC__
+#define YYPARSE_PARAM_ARG void
+#define YYPARSE_PARAM_DECL
+#else /* ! ANSI-C/C++ */
+#define YYPARSE_PARAM_ARG
+#define YYPARSE_PARAM_DECL
+#endif /* ANSI-C/C++ */
+#else /* YYPARSE_PARAM */
+#ifndef YYPARSE_PARAM_TYPE
+#define YYPARSE_PARAM_TYPE void *
+#endif
+#if defined(__cplusplus) || __STDC__
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#else /* ! ANSI-C/C++ */
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;
+#endif /* ANSI-C/C++ */
+#endif /* ! YYPARSE_PARAM */
+
+int
+yyparse (YYPARSE_PARAM_ARG)
+ YYPARSE_PARAM_DECL
+{
+ register int yym, yyn, yystate;
+#if YYDEBUG
+ register const char *yys;
+
+ if ((yys = getenv("YYDEBUG")))
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = (-1);
+
+ if (yyss == NULL && yygrowstack()) goto yyoverflow;
+ yyssp = yyss;
+ yyvsp = yyvs;
+ *yyssp = yystate = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate])) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yyssp >= yysslim && yygrowstack())
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate = yytable[yyn];
+ *++yyvsp = yylval;
+ yychar = (-1);
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+#if defined(lint) || defined(__GNUC__)
+ goto yynewerror;
+#endif
+yynewerror:
+ yyerror("syntax error");
+#if defined(lint) || defined(__GNUC__)
+ goto yyerrlab;
+#endif
+yyerrlab:
+ ++yynerrs;
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+#endif
+ if (yyssp >= yysslim && yygrowstack())
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate = yytable[yyn];
+ *++yyvsp = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yyssp);
+#endif
+ if (yyssp <= yyss) goto yyabort;
+ --yyssp;
+ --yyvsp;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = (-1);
+ goto yyloop;
+ }
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ yyval = yyvsp[1-yym];
+ switch (yyn)
+ {
+case 1:
+#line 81 "perly.y"
+{
+#if defined(YYDEBUG) && defined(DEBUGGING)
+ yydebug = (debug & 1);
+#endif
+ }
+break;
+case 2:
+#line 87 "perly.y"
+{ if (in_eval)
+ eval_root = block_head(yyvsp[0].cmdval);
+ else
+ main_root = block_head(yyvsp[0].cmdval); }
+break;
+case 3:
+#line 94 "perly.y"
+{ yyval.compval.comp_true = yyvsp[-2].cmdval; yyval.compval.comp_alt = yyvsp[0].cmdval; }
+break;
+case 4:
+#line 96 "perly.y"
+{ yyval.compval.comp_true = yyvsp[-1].cmdval; yyval.compval.comp_alt = yyvsp[0].cmdval; }
+break;
+case 5:
+#line 100 "perly.y"
+{ yyval.cmdval = Nullcmd; }
+break;
+case 6:
+#line 102 "perly.y"
+{ yyval.cmdval = yyvsp[0].cmdval; }
+break;
+case 7:
+#line 104 "perly.y"
+{ cmdline = yyvsp[-4].ival;
+ yyval.cmdval = make_ccmd(C_ELSIF,yyvsp[-2].arg,yyvsp[0].compval); }
+break;
+case 8:
+#line 109 "perly.y"
+{ yyval.cmdval = block_head(yyvsp[-1].cmdval);
+ if (savestack->ary_fill > yyvsp[-2].ival)
+ restorelist(yyvsp[-2].ival); }
+break;
+case 9:
+#line 115 "perly.y"
+{ yyval.ival = savestack->ary_fill; }
+break;
+case 10:
+#line 119 "perly.y"
+{ yyval.cmdval = Nullcmd; }
+break;
+case 11:
+#line 121 "perly.y"
+{ yyval.cmdval = append_line(yyvsp[-1].cmdval,yyvsp[0].cmdval); }
+break;
+case 12:
+#line 125 "perly.y"
+{ yyval.cmdval = Nullcmd; }
+break;
+case 13:
+#line 127 "perly.y"
+{ yyval.cmdval = add_label(yyvsp[-1].cval,yyvsp[0].cmdval); }
+break;
+case 15:
+#line 130 "perly.y"
+{ if (yyvsp[-1].cval != Nullch) {
+ yyval.cmdval = add_label(yyvsp[-1].cval, make_acmd(C_EXPR, Nullstab,
+ Nullarg, Nullarg) );
+ }
+ else {
+ yyval.cmdval = Nullcmd;
+ cmdline = NOLINE;
+ } }
+break;
+case 16:
+#line 139 "perly.y"
+{ yyval.cmdval = add_label(yyvsp[-2].cval,yyvsp[-1].cmdval); }
+break;
+case 17:
+#line 143 "perly.y"
+{ yyval.cmdval = Nullcmd; }
+break;
+case 18:
+#line 145 "perly.y"
+{ yyval.cmdval = make_acmd(C_EXPR, Nullstab, yyvsp[0].arg, Nullarg); }
+break;
+case 19:
+#line 147 "perly.y"
+{ yyval.cmdval = addcond(
+ make_acmd(C_EXPR, Nullstab, Nullarg, yyvsp[-2].arg), yyvsp[0].arg); }
+break;
+case 20:
+#line 150 "perly.y"
+{ yyval.cmdval = addcond(invert(
+ make_acmd(C_EXPR, Nullstab, Nullarg, yyvsp[-2].arg)), yyvsp[0].arg); }
+break;
+case 21:
+#line 153 "perly.y"
+{ yyval.cmdval = addloop(
+ make_acmd(C_EXPR, Nullstab, Nullarg, yyvsp[-2].arg), yyvsp[0].arg); }
+break;
+case 22:
+#line 156 "perly.y"
+{ yyval.cmdval = addloop(invert(
+ make_acmd(C_EXPR, Nullstab, Nullarg, yyvsp[-2].arg)), yyvsp[0].arg); }
+break;
+case 23:
+#line 161 "perly.y"
+{ cmdline = yyvsp[-4].ival;
+ yyval.cmdval = make_icmd(C_IF,yyvsp[-2].arg,yyvsp[0].compval); }
+break;
+case 24:
+#line 164 "perly.y"
+{ cmdline = yyvsp[-4].ival;
+ yyval.cmdval = invert(make_icmd(C_IF,yyvsp[-2].arg,yyvsp[0].compval)); }
+break;
+case 25:
+#line 167 "perly.y"
+{ cmdline = yyvsp[-2].ival;
+ yyval.cmdval = make_ccmd(C_IF,cmd_to_arg(yyvsp[-1].cmdval),yyvsp[0].compval); }
+break;
+case 26:
+#line 170 "perly.y"
+{ cmdline = yyvsp[-2].ival;
+ yyval.cmdval = invert(make_ccmd(C_IF,cmd_to_arg(yyvsp[-1].cmdval),yyvsp[0].compval)); }
+break;
+case 27:
+#line 175 "perly.y"
+{ cmdline = yyvsp[-4].ival;
+ yyval.cmdval = wopt(add_label(yyvsp[-5].cval,
+ make_ccmd(C_WHILE,yyvsp[-2].arg,yyvsp[0].compval) )); }
+break;
+case 28:
+#line 179 "perly.y"
+{ cmdline = yyvsp[-4].ival;
+ yyval.cmdval = wopt(add_label(yyvsp[-5].cval,
+ invert(make_ccmd(C_WHILE,yyvsp[-2].arg,yyvsp[0].compval)) )); }
+break;
+case 29:
+#line 183 "perly.y"
+{ cmdline = yyvsp[-2].ival;
+ yyval.cmdval = wopt(add_label(yyvsp[-3].cval,
+ make_ccmd(C_WHILE, cmd_to_arg(yyvsp[-1].cmdval),yyvsp[0].compval) )); }
+break;
+case 30:
+#line 187 "perly.y"
+{ cmdline = yyvsp[-2].ival;
+ yyval.cmdval = wopt(add_label(yyvsp[-3].cval,
+ invert(make_ccmd(C_WHILE, cmd_to_arg(yyvsp[-1].cmdval),yyvsp[0].compval)) )); }
+break;
+case 31:
+#line 191 "perly.y"
+{ cmdline = yyvsp[-5].ival;
+ /*
+ * The following gobbledygook catches EXPRs that
+ * aren't explicit array refs and translates
+ * foreach VAR (EXPR) {
+ * into
+ * @ary = EXPR;
+ * foreach VAR (@ary) {
+ * where @ary is a hidden array made by genstab().
+ * (Note that @ary may become a local array if
+ * it is determined that it might be called
+ * recursively. See cmd_tosave().)
+ */
+ if (yyvsp[-2].arg->arg_type != O_ARRAY) {
+ scrstab = aadd(genstab());
+ yyval.cmdval = append_line(
+ make_acmd(C_EXPR, Nullstab,
+ l(make_op(O_ASSIGN,2,
+ listish(make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,scrstab),
+ Nullarg,Nullarg )),
+ listish(make_list(yyvsp[-2].arg)),
+ Nullarg)),
+ Nullarg),
+ wopt(over(yyvsp[-4].stabval,add_label(yyvsp[-6].cval,
+ make_ccmd(C_WHILE,
+ make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,scrstab),
+ Nullarg,Nullarg ),
+ yyvsp[0].compval)))));
+ yyval.cmdval->c_line = yyvsp[-5].ival;
+ yyval.cmdval->c_head->c_line = yyvsp[-5].ival;
+ }
+ else {
+ yyval.cmdval = wopt(over(yyvsp[-4].stabval,add_label(yyvsp[-6].cval,
+ make_ccmd(C_WHILE,yyvsp[-2].arg,yyvsp[0].compval) )));
+ }
+ }
+break;
+case 32:
+#line 230 "perly.y"
+{ cmdline = yyvsp[-4].ival;
+ if (yyvsp[-2].arg->arg_type != O_ARRAY) {
+ scrstab = aadd(genstab());
+ yyval.cmdval = append_line(
+ make_acmd(C_EXPR, Nullstab,
+ l(make_op(O_ASSIGN,2,
+ listish(make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,scrstab),
+ Nullarg,Nullarg )),
+ listish(make_list(yyvsp[-2].arg)),
+ Nullarg)),
+ Nullarg),
+ wopt(over(defstab,add_label(yyvsp[-5].cval,
+ make_ccmd(C_WHILE,
+ make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,scrstab),
+ Nullarg,Nullarg ),
+ yyvsp[0].compval)))));
+ yyval.cmdval->c_line = yyvsp[-4].ival;
+ yyval.cmdval->c_head->c_line = yyvsp[-4].ival;
+ }
+ else { /* lisp, anyone? */
+ yyval.cmdval = wopt(over(defstab,add_label(yyvsp[-5].cval,
+ make_ccmd(C_WHILE,yyvsp[-2].arg,yyvsp[0].compval) )));
+ }
+ }
+break;
+case 33:
+#line 258 "perly.y"
+{ yyval.compval.comp_true = yyvsp[0].cmdval;
+ yyval.compval.comp_alt = yyvsp[-2].cmdval;
+ cmdline = yyvsp[-8].ival;
+ yyval.cmdval = append_line(yyvsp[-6].cmdval,wopt(add_label(yyvsp[-9].cval,
+ make_ccmd(C_WHILE,yyvsp[-4].arg,yyval.compval) ))); }
+break;
+case 34:
+#line 264 "perly.y"
+{ yyval.cmdval = add_label(yyvsp[-1].cval,make_ccmd(C_BLOCK,Nullarg,yyvsp[0].compval)); }
+break;
+case 35:
+#line 268 "perly.y"
+{ yyval.cmdval = Nullcmd; }
+break;
+case 37:
+#line 273 "perly.y"
+{ (void)scanstr("1"); yyval.arg = yylval.arg; }
+break;
+case 39:
+#line 278 "perly.y"
+{ yyval.cval = Nullch; }
+break;
+case 41:
+#line 283 "perly.y"
+{ yyval.ival = 0; }
+break;
+case 42:
+#line 285 "perly.y"
+{ yyval.ival = 0; }
+break;
+case 43:
+#line 287 "perly.y"
+{ yyval.ival = 0; }
+break;
+case 44:
+#line 291 "perly.y"
+{ if (strEQ(yyvsp[-2].cval,"stdout"))
+ make_form(stabent("STDOUT",TRUE),yyvsp[0].formval);
+ else if (strEQ(yyvsp[-2].cval,"stderr"))
+ make_form(stabent("STDERR",TRUE),yyvsp[0].formval);
+ else
+ make_form(stabent(yyvsp[-2].cval,TRUE),yyvsp[0].formval);
+ Safefree(yyvsp[-2].cval); yyvsp[-2].cval = Nullch; }
+break;
+case 45:
+#line 299 "perly.y"
+{ make_form(stabent("STDOUT",TRUE),yyvsp[0].formval); }
+break;
+case 46:
+#line 303 "perly.y"
+{ make_sub(yyvsp[-1].cval,yyvsp[0].cmdval); }
+break;
+case 47:
+#line 307 "perly.y"
+{ char tmpbuf[256];
+ STAB *tmpstab;
+
+ savehptr(&curstash);
+ saveitem(curstname);
+ str_set(curstname,yyvsp[-1].cval);
+ sprintf(tmpbuf,"'_%s",yyvsp[-1].cval);
+ tmpstab = stabent(tmpbuf,TRUE);
+ if (!stab_xhash(tmpstab))
+ stab_xhash(tmpstab) = hnew(0);
+ curstash = stab_xhash(tmpstab);
+ if (!curstash->tbl_name)
+ curstash->tbl_name = savestr(yyvsp[-1].cval);
+ curstash->tbl_coeffsize = 0;
+ Safefree(yyvsp[-1].cval); yyvsp[-1].cval = Nullch;
+ cmdline = NOLINE;
+ }
+break;
+case 48:
+#line 327 "perly.y"
+{ yyval.arg = yyvsp[0].arg; }
+break;
+case 49:
+#line 331 "perly.y"
+{ yyval.arg = make_op(O_COMMA, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 51:
+#line 336 "perly.y"
+{ yyval.arg = yyvsp[0].arg; }
+break;
+case 52:
+#line 340 "perly.y"
+{ yyvsp[-2].arg = listish(yyvsp[-2].arg);
+ if (yyvsp[-2].arg->arg_type == O_ASSIGN && yyvsp[-2].arg->arg_len == 1)
+ yyvsp[-2].arg->arg_type = O_ITEM; /* a local() */
+ if (yyvsp[-2].arg->arg_type == O_LIST)
+ yyvsp[0].arg = listish(yyvsp[0].arg);
+ yyval.arg = l(make_op(O_ASSIGN, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg)); }
+break;
+case 53:
+#line 347 "perly.y"
+{ yyval.arg = l(make_op(O_POW, 2, yyvsp[-3].arg, yyvsp[0].arg, Nullarg)); }
+break;
+case 54:
+#line 349 "perly.y"
+{ yyval.arg = l(make_op(yyvsp[-2].ival, 2, yyvsp[-3].arg, yyvsp[0].arg, Nullarg)); }
+break;
+case 55:
+#line 351 "perly.y"
+{ yyval.arg = rcatmaybe(l(make_op(yyvsp[-2].ival, 2, yyvsp[-3].arg, yyvsp[0].arg, Nullarg)));}
+break;
+case 56:
+#line 353 "perly.y"
+{ yyval.arg = l(make_op(O_LEFT_SHIFT, 2, yyvsp[-3].arg, yyvsp[0].arg, Nullarg)); }
+break;
+case 57:
+#line 355 "perly.y"
+{ yyval.arg = l(make_op(O_RIGHT_SHIFT, 2, yyvsp[-3].arg, yyvsp[0].arg, Nullarg)); }
+break;
+case 58:
+#line 357 "perly.y"
+{ yyval.arg = l(make_op(O_BIT_AND, 2, yyvsp[-3].arg, yyvsp[0].arg, Nullarg)); }
+break;
+case 59:
+#line 359 "perly.y"
+{ yyval.arg = l(make_op(O_XOR, 2, yyvsp[-3].arg, yyvsp[0].arg, Nullarg)); }
+break;
+case 60:
+#line 361 "perly.y"
+{ yyval.arg = l(make_op(O_BIT_OR, 2, yyvsp[-3].arg, yyvsp[0].arg, Nullarg)); }
+break;
+case 61:
+#line 365 "perly.y"
+{ yyval.arg = make_op(O_POW, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 62:
+#line 367 "perly.y"
+{ if (yyvsp[-1].ival == O_REPEAT)
+ yyvsp[-2].arg = listish(yyvsp[-2].arg);
+ yyval.arg = make_op(yyvsp[-1].ival, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg);
+ if (yyvsp[-1].ival == O_REPEAT) {
+ if (yyval.arg[1].arg_type != A_EXPR ||
+ yyval.arg[1].arg_ptr.arg_arg->arg_type != O_LIST)
+ yyval.arg[1].arg_flags &= ~AF_ARYOK;
+ } }
+break;
+case 63:
+#line 376 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 64:
+#line 378 "perly.y"
+{ yyval.arg = make_op(O_LEFT_SHIFT, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 65:
+#line 380 "perly.y"
+{ yyval.arg = make_op(O_RIGHT_SHIFT, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 66:
+#line 382 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 67:
+#line 384 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 68:
+#line 386 "perly.y"
+{ yyval.arg = make_op(O_BIT_AND, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 69:
+#line 388 "perly.y"
+{ yyval.arg = make_op(O_XOR, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 70:
+#line 390 "perly.y"
+{ yyval.arg = make_op(O_BIT_OR, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 71:
+#line 392 "perly.y"
+{ arg4 = Nullarg;
+ yyval.arg = make_op(O_F_OR_R, 4, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 72:
+#line 395 "perly.y"
+{ yyval.arg = make_op(O_AND, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 73:
+#line 397 "perly.y"
+{ yyval.arg = make_op(O_OR, 2, yyvsp[-2].arg, yyvsp[0].arg, Nullarg); }
+break;
+case 74:
+#line 399 "perly.y"
+{ yyval.arg = make_op(O_COND_EXPR, 3, yyvsp[-4].arg, yyvsp[-2].arg, yyvsp[0].arg); }
+break;
+case 75:
+#line 401 "perly.y"
+{ yyval.arg = mod_match(O_MATCH, yyvsp[-2].arg, yyvsp[0].arg); }
+break;
+case 76:
+#line 403 "perly.y"
+{ yyval.arg = mod_match(O_NMATCH, yyvsp[-2].arg, yyvsp[0].arg); }
+break;
+case 77:
+#line 405 "perly.y"
+{ yyval.arg = yyvsp[0].arg; }
+break;
+case 78:
+#line 409 "perly.y"
+{ yyval.arg = make_op(O_NEGATE, 1, yyvsp[0].arg, Nullarg, Nullarg); }
+break;
+case 79:
+#line 411 "perly.y"
+{ yyval.arg = yyvsp[0].arg; }
+break;
+case 80:
+#line 413 "perly.y"
+{ yyval.arg = make_op(O_NOT, 1, yyvsp[0].arg, Nullarg, Nullarg); }
+break;
+case 81:
+#line 415 "perly.y"
+{ yyval.arg = make_op(O_COMPLEMENT, 1, yyvsp[0].arg, Nullarg, Nullarg);}
+break;
+case 82:
+#line 417 "perly.y"
+{ yyval.arg = addflags(1, AF_POST|AF_UP,
+ l(make_op(O_ITEM,1,yyvsp[-1].arg,Nullarg,Nullarg))); }
+break;
+case 83:
+#line 420 "perly.y"
+{ yyval.arg = addflags(1, AF_POST,
+ l(make_op(O_ITEM,1,yyvsp[-1].arg,Nullarg,Nullarg))); }
+break;
+case 84:
+#line 423 "perly.y"
+{ yyval.arg = addflags(1, AF_PRE|AF_UP,
+ l(make_op(O_ITEM,1,yyvsp[0].arg,Nullarg,Nullarg))); }
+break;
+case 85:
+#line 426 "perly.y"
+{ yyval.arg = addflags(1, AF_PRE,
+ l(make_op(O_ITEM,1,yyvsp[0].arg,Nullarg,Nullarg))); }
+break;
+case 86:
+#line 429 "perly.y"
+{ opargs[yyvsp[-1].ival] = 0; /* force it special */
+ yyval.arg = make_op(yyvsp[-1].ival, 1,
+ stab2arg(A_STAB,stabent(yyvsp[0].cval,TRUE)),
+ Nullarg, Nullarg);
+ }
+break;
+case 87:
+#line 435 "perly.y"
+{ opargs[yyvsp[-1].ival] = 1;
+ yyval.arg = make_op(yyvsp[-1].ival, 1, yyvsp[0].arg, Nullarg, Nullarg); }
+break;
+case 88:
+#line 438 "perly.y"
+{ opargs[yyvsp[0].ival] = (yyvsp[0].ival != O_FTTTY);
+ yyval.arg = make_op(yyvsp[0].ival, 1,
+ stab2arg(A_STAB,
+ yyvsp[0].ival == O_FTTTY?stabent("STDIN",TRUE):defstab),
+ Nullarg, Nullarg); }
+break;
+case 89:
+#line 444 "perly.y"
+{ yyval.arg = l(localize(make_op(O_ASSIGN, 1,
+ localize(listish(make_list(yyvsp[-1].arg))),
+ Nullarg,Nullarg))); }
+break;
+case 90:
+#line 448 "perly.y"
+{ yyval.arg = make_list(yyvsp[-2].arg); }
+break;
+case 91:
+#line 450 "perly.y"
+{ yyval.arg = make_list(yyvsp[-1].arg); }
+break;
+case 92:
+#line 452 "perly.y"
+{ yyval.arg = make_list(Nullarg); }
+break;
+case 93:
+#line 454 "perly.y"
+{ yyval.arg = make_op(O_DOFILE,2,yyvsp[0].arg,Nullarg,Nullarg);
+ allstabs = TRUE;}
+break;
+case 94:
+#line 457 "perly.y"
+{ yyval.arg = cmd_to_arg(yyvsp[0].cmdval); }
+break;
+case 95:
+#line 459 "perly.y"
+{ yyval.arg = stab2arg(A_STAB,yyvsp[0].stabval); }
+break;
+case 96:
+#line 461 "perly.y"
+{ yyval.arg = stab2arg(A_STAR,yyvsp[0].stabval); }
+break;
+case 97:
+#line 463 "perly.y"
+{ yyval.arg = make_op(O_AELEM, 2,
+ stab2arg(A_STAB,aadd(yyvsp[-3].stabval)), yyvsp[-1].arg, Nullarg); }
+break;
+case 98:
+#line 466 "perly.y"
+{ yyval.arg = make_op(O_HASH, 1,
+ stab2arg(A_STAB,yyvsp[0].stabval),
+ Nullarg, Nullarg); }
+break;
+case 99:
+#line 470 "perly.y"
+{ yyval.arg = make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,yyvsp[0].stabval),
+ Nullarg, Nullarg); }
+break;
+case 100:
+#line 474 "perly.y"
+{ yyval.arg = make_op(O_HELEM, 2,
+ stab2arg(A_STAB,hadd(yyvsp[-3].stabval)),
+ jmaybe(yyvsp[-1].arg),
+ Nullarg); }
+break;
+case 101:
+#line 479 "perly.y"
+{ yyval.arg = make_op(O_LSLICE, 3,
+ Nullarg,
+ listish(make_list(yyvsp[-1].arg)),
+ listish(make_list(yyvsp[-4].arg))); }
+break;
+case 102:
+#line 484 "perly.y"
+{ yyval.arg = make_op(O_LSLICE, 3,
+ Nullarg,
+ listish(make_list(yyvsp[-1].arg)),
+ Nullarg); }
+break;
+case 103:
+#line 489 "perly.y"
+{ yyval.arg = make_op(O_ASLICE, 2,
+ stab2arg(A_STAB,aadd(yyvsp[-3].stabval)),
+ listish(make_list(yyvsp[-1].arg)),
+ Nullarg); }
+break;
+case 104:
+#line 494 "perly.y"
+{ yyval.arg = make_op(O_HSLICE, 2,
+ stab2arg(A_STAB,hadd(yyvsp[-3].stabval)),
+ listish(make_list(yyvsp[-1].arg)),
+ Nullarg); }
+break;
+case 105:
+#line 499 "perly.y"
+{ yyval.arg = make_op(O_DELETE, 2,
+ stab2arg(A_STAB,hadd(yyvsp[-3].stabval)),
+ jmaybe(yyvsp[-1].arg),
+ Nullarg); }
+break;
+case 106:
+#line 504 "perly.y"
+{ yyval.arg = stab2arg(A_ARYLEN,yyvsp[0].stabval); }
+break;
+case 107:
+#line 506 "perly.y"
+{ yyval.arg = yyvsp[0].arg; }
+break;
+case 108:
+#line 508 "perly.y"
+{ yyval.arg = yyvsp[0].arg; }
+break;
+case 109:
+#line 510 "perly.y"
+{ yyval.arg = yyvsp[0].arg; }
+break;
+case 110:
+#line 512 "perly.y"
+{ yyval.arg = yyvsp[0].arg; }
+break;
+case 111:
+#line 514 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yyvsp[-3].cval,TRUE)),
+ make_list(yyvsp[-1].arg),
+ Nullarg); Safefree(yyvsp[-3].cval); yyvsp[-3].cval = Nullch;
+ yyval.arg->arg_flags |= AF_DEPR; }
+break;
+case 112:
+#line 520 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yyvsp[-3].cval,TRUE)),
+ make_list(yyvsp[-1].arg),
+ Nullarg); Safefree(yyvsp[-3].cval); yyvsp[-3].cval = Nullch; }
+break;
+case 113:
+#line 525 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yyvsp[-2].cval,TRUE)),
+ make_list(Nullarg),
+ Nullarg);
+ yyval.arg->arg_flags |= AF_DEPR; }
+break;
+case 114:
+#line 531 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yyvsp[-2].cval,TRUE)),
+ make_list(Nullarg),
+ Nullarg); }
+break;
+case 115:
+#line 536 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yyvsp[0].cval,TRUE)),
+ Nullarg,
+ Nullarg); }
+break;
+case 116:
+#line 541 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yyvsp[-3].stabval),
+ make_list(yyvsp[-1].arg),
+ Nullarg);
+ yyval.arg->arg_flags |= AF_DEPR; }
+break;
+case 117:
+#line 547 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yyvsp[-3].stabval),
+ make_list(yyvsp[-1].arg),
+ Nullarg); }
+break;
+case 118:
+#line 552 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yyvsp[-2].stabval),
+ make_list(Nullarg),
+ Nullarg);
+ yyval.arg->arg_flags |= AF_DEPR; }
+break;
+case 119:
+#line 558 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yyvsp[-2].stabval),
+ make_list(Nullarg),
+ Nullarg); }
+break;
+case 120:
+#line 563 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yyvsp[0].stabval),
+ Nullarg,
+ Nullarg); }
+break;
+case 121:
+#line 568 "perly.y"
+{ yyval.arg = make_op(yyvsp[0].ival,0,Nullarg,Nullarg,Nullarg); }
+break;
+case 122:
+#line 570 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival,1,cval_to_arg(yyvsp[0].cval),
+ Nullarg,Nullarg); }
+break;
+case 123:
+#line 573 "perly.y"
+{ yyval.arg = make_op(yyvsp[0].ival,0,Nullarg,Nullarg,Nullarg); }
+break;
+case 124:
+#line 575 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival,1,yyvsp[0].arg,Nullarg,Nullarg); }
+break;
+case 125:
+#line 577 "perly.y"
+{ yyval.arg = make_op(O_SELECT, 0, Nullarg, Nullarg, Nullarg);}
+break;
+case 126:
+#line 579 "perly.y"
+{ yyval.arg = make_op(O_SELECT, 1, yyvsp[-1].arg, Nullarg, Nullarg); }
+break;
+case 127:
+#line 581 "perly.y"
+{ arg4 = yyvsp[-1].arg;
+ yyval.arg = make_op(O_SSELECT, 4, yyvsp[-4].arg, yyvsp[-3].arg, yyvsp[-2].arg); }
+break;
+case 128:
+#line 584 "perly.y"
+{ yyval.arg = make_op(O_OPEN, 2,
+ stab2arg(A_WORD,stabent(yyvsp[0].cval,TRUE)),
+ stab2arg(A_STAB,stabent(yyvsp[0].cval,TRUE)),
+ Nullarg); }
+break;
+case 129:
+#line 589 "perly.y"
+{ yyval.arg = make_op(O_OPEN, 2,
+ stab2arg(A_WORD,stabent(yyvsp[-1].cval,TRUE)),
+ stab2arg(A_STAB,stabent(yyvsp[-1].cval,TRUE)),
+ Nullarg); }
+break;
+case 130:
+#line 594 "perly.y"
+{ yyval.arg = make_op(O_OPEN, 2,
+ yyvsp[-2].arg,
+ yyvsp[-1].arg, Nullarg); }
+break;
+case 131:
+#line 598 "perly.y"
+{ yyval.arg = make_op(yyvsp[-3].ival, 1,
+ yyvsp[-1].arg,
+ Nullarg, Nullarg); }
+break;
+case 132:
+#line 602 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival, 1,
+ stab2arg(A_WORD,stabent(yyvsp[0].cval,TRUE)),
+ Nullarg, Nullarg);
+ Safefree(yyvsp[0].cval); yyvsp[0].cval = Nullch; }
+break;
+case 133:
+#line 607 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival, 1,
+ stab2arg(A_STAB,yyvsp[0].stabval),
+ Nullarg, Nullarg); }
+break;
+case 134:
+#line 611 "perly.y"
+{ yyval.arg = make_op(yyvsp[-2].ival, 1,
+ stab2arg(A_WORD,Nullstab),
+ Nullarg, Nullarg); }
+break;
+case 135:
+#line 615 "perly.y"
+{ yyval.arg = make_op(yyvsp[0].ival, 0,
+ Nullarg, Nullarg, Nullarg); }
+break;
+case 136:
+#line 618 "perly.y"
+{ yyval.arg = make_op(yyvsp[-4].ival, 2, yyvsp[-2].arg, yyvsp[-1].arg, Nullarg); }
+break;
+case 137:
+#line 620 "perly.y"
+{ yyval.arg = make_op(yyvsp[-5].ival, 3, yyvsp[-3].arg, yyvsp[-2].arg, make_list(yyvsp[-1].arg)); }
+break;
+case 138:
+#line 622 "perly.y"
+{ yyval.arg = make_op(yyvsp[-5].ival, 2, yyvsp[-3].arg, yyvsp[-1].arg, Nullarg); }
+break;
+case 139:
+#line 624 "perly.y"
+{ arg4 = yyvsp[-1].arg; yyval.arg = make_op(yyvsp[-6].ival, 4, yyvsp[-4].arg, yyvsp[-3].arg, yyvsp[-2].arg); }
+break;
+case 140:
+#line 626 "perly.y"
+{ arg4 = yyvsp[-2].arg; arg5 = yyvsp[-1].arg;
+ yyval.arg = make_op(yyvsp[-8].ival, 5, yyvsp[-6].arg, yyvsp[-4].arg, yyvsp[-3].arg); }
+break;
+case 141:
+#line 629 "perly.y"
+{ yyval.arg = make_op(yyvsp[-4].ival, 2,
+ yyvsp[-2].arg,
+ make_list(yyvsp[-1].arg),
+ Nullarg); }
+break;
+case 142:
+#line 634 "perly.y"
+{ yyval.arg = make_op(O_POP, 1, yyvsp[0].arg, Nullarg, Nullarg); }
+break;
+case 143:
+#line 636 "perly.y"
+{ yyval.arg = make_op(O_POP, 1, yyvsp[-1].arg, Nullarg, Nullarg); }
+break;
+case 144:
+#line 638 "perly.y"
+{ yyval.arg = make_op(O_SHIFT, 1, yyvsp[0].arg, Nullarg, Nullarg); }
+break;
+case 145:
+#line 640 "perly.y"
+{ yyval.arg = make_op(O_SHIFT, 1, yyvsp[-1].arg, Nullarg, Nullarg); }
+break;
+case 146:
+#line 642 "perly.y"
+{ yyval.arg = make_op(O_SHIFT, 1,
+ stab2arg(A_STAB,
+ aadd(stabent(subline ? "_" : "ARGV", TRUE))),
+ Nullarg, Nullarg); }
+break;
+case 147:
+#line 647 "perly.y"
+{ static char p[]="/\\s+/";
+ char *oldend = bufend;
+ ARG *oldarg = yylval.arg;
+
+ bufend=p+5;
+ (void)scanpat(p);
+ bufend=oldend;
+ yyval.arg = make_split(defstab,yylval.arg,Nullarg);
+ yylval.arg = oldarg; }
+break;
+case 148:
+#line 657 "perly.y"
+{ yyval.arg = mod_match(O_MATCH, yyvsp[-2].arg,
+ make_split(defstab,yyvsp[-3].arg,yyvsp[-1].arg));}
+break;
+case 149:
+#line 660 "perly.y"
+{ yyval.arg = mod_match(O_MATCH, yyvsp[-1].arg,
+ make_split(defstab,yyvsp[-2].arg,Nullarg) ); }
+break;
+case 150:
+#line 663 "perly.y"
+{ yyval.arg = mod_match(O_MATCH,
+ stab2arg(A_STAB,defstab),
+ make_split(defstab,yyvsp[-1].arg,Nullarg) ); }
+break;
+case 151:
+#line 667 "perly.y"
+{ yyval.arg = make_op(yyvsp[-4].ival, 2,
+ yyvsp[-2].arg,
+ listish(make_list(yyvsp[-1].arg)),
+ Nullarg); }
+break;
+case 152:
+#line 672 "perly.y"
+{ yyval.arg = make_op(yyvsp[-3].ival, 1,
+ make_list(yyvsp[-1].arg),
+ Nullarg,
+ Nullarg); }
+break;
+case 153:
+#line 677 "perly.y"
+{ yyval.arg = l(make_op(yyvsp[-1].ival, 1, fixl(yyvsp[-1].ival,yyvsp[0].arg),
+ Nullarg, Nullarg)); }
+break;
+case 154:
+#line 680 "perly.y"
+{ yyval.arg = l(make_op(yyvsp[0].ival, 1,
+ stab2arg(A_STAB,defstab),
+ Nullarg, Nullarg)); }
+break;
+case 155:
+#line 684 "perly.y"
+{ yyval.arg = make_op(yyvsp[0].ival, 0, Nullarg, Nullarg, Nullarg); }
+break;
+case 156:
+#line 686 "perly.y"
+{ yyval.arg = make_op(yyvsp[-2].ival, 0, Nullarg, Nullarg, Nullarg); }
+break;
+case 157:
+#line 688 "perly.y"
+{ yyval.arg = make_op(yyvsp[-2].ival, 0, Nullarg, Nullarg, Nullarg); }
+break;
+case 158:
+#line 690 "perly.y"
+{ yyval.arg = make_op(yyvsp[-3].ival, 1, yyvsp[-1].arg, Nullarg, Nullarg); }
+break;
+case 159:
+#line 692 "perly.y"
+{ yyval.arg = make_op(yyvsp[-4].ival, 2, yyvsp[-2].arg, yyvsp[-1].arg, Nullarg);
+ if (yyvsp[-4].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE)
+ fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); }
+break;
+case 160:
+#line 696 "perly.y"
+{ yyval.arg = make_op(yyvsp[-4].ival, 2, yyvsp[-2].arg, yyvsp[-1].arg, Nullarg);
+ if (yyvsp[-4].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE)
+ fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); }
+break;
+case 161:
+#line 700 "perly.y"
+{ yyval.arg = make_op(yyvsp[-5].ival, 3, yyvsp[-3].arg, yyvsp[-2].arg, yyvsp[-1].arg);
+ if (yyvsp[-5].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE)
+ fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); }
+break;
+case 162:
+#line 704 "perly.y"
+{ yyval.arg = make_op(yyvsp[-5].ival, 3, yyvsp[-3].arg, yyvsp[-2].arg, yyvsp[-1].arg); }
+break;
+case 163:
+#line 706 "perly.y"
+{ arg4 = yyvsp[-1].arg;
+ yyval.arg = make_op(yyvsp[-6].ival, 4, yyvsp[-4].arg, yyvsp[-3].arg, yyvsp[-2].arg); }
+break;
+case 164:
+#line 709 "perly.y"
+{ arg4 = yyvsp[-2].arg; arg5 = yyvsp[-1].arg;
+ yyval.arg = make_op(yyvsp[-7].ival, 5, yyvsp[-5].arg, yyvsp[-4].arg, yyvsp[-3].arg); }
+break;
+case 165:
+#line 712 "perly.y"
+{ yyval.arg = make_op(yyvsp[-3].ival, 1,
+ yyvsp[-1].arg,
+ Nullarg,
+ Nullarg); }
+break;
+case 166:
+#line 717 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival, 1,
+ yyvsp[0].arg,
+ Nullarg,
+ Nullarg); }
+break;
+case 167:
+#line 722 "perly.y"
+{ yyval.arg = make_op(yyvsp[-5].ival, 3, yyvsp[-3].arg, yyvsp[-2].arg, yyvsp[-1].arg); }
+break;
+case 170:
+#line 728 "perly.y"
+{ yyval.arg = make_op(yyvsp[0].ival,2,
+ stab2arg(A_WORD,Nullstab),
+ stab2arg(A_STAB,defstab),
+ Nullarg); }
+break;
+case 171:
+#line 733 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival,2,
+ stab2arg(A_WORD,Nullstab),
+ maybelistish(yyvsp[-1].ival,make_list(yyvsp[0].arg)),
+ Nullarg); }
+break;
+case 172:
+#line 738 "perly.y"
+{ yyval.arg = make_op(yyvsp[-1].ival,2,
+ stab2arg(A_WORD,stabent(yyvsp[0].cval,TRUE)),
+ stab2arg(A_STAB,defstab),
+ Nullarg); }
+break;
+case 173:
+#line 743 "perly.y"
+{ yyval.arg = make_op(yyvsp[-2].ival,2,
+ stab2arg(A_WORD,stabent(yyvsp[-1].cval,TRUE)),
+ maybelistish(yyvsp[-2].ival,make_list(yyvsp[0].arg)),
+ Nullarg); Safefree(yyvsp[-1].cval); yyvsp[-1].cval = Nullch; }
+break;
+case 174:
+#line 748 "perly.y"
+{ yyval.arg = make_op(yyvsp[-2].ival,2,
+ stab2arg(A_STAB,yyvsp[-1].stabval),
+ maybelistish(yyvsp[-2].ival,make_list(yyvsp[0].arg)),
+ Nullarg); }
+break;
+case 175:
+#line 755 "perly.y"
+{ yyval.arg = stab2arg(A_WORD,stabent(yyvsp[0].cval,TRUE));
+ Safefree(yyvsp[0].cval); yyvsp[0].cval = Nullch;}
+break;
+case 177:
+#line 761 "perly.y"
+{ yyval.arg = stab2arg(A_WORD,aadd(stabent(yyvsp[0].cval,TRUE)));
+ Safefree(yyvsp[0].cval); yyvsp[0].cval = Nullch; }
+break;
+case 178:
+#line 764 "perly.y"
+{ yyval.arg = stab2arg(A_STAB,yyvsp[0].stabval); }
+break;
+case 179:
+#line 768 "perly.y"
+{ yyval.arg = stab2arg(A_WORD,hadd(stabent(yyvsp[0].cval,TRUE)));
+ Safefree(yyvsp[0].cval); yyvsp[0].cval = Nullch; }
+break;
+case 180:
+#line 771 "perly.y"
+{ yyval.arg = stab2arg(A_STAB,yyvsp[0].stabval); }
+break;
+case 181:
+#line 780 "perly.y"
+{ char *s;
+ yyval.arg = op_new(1);
+ yyval.arg->arg_type = O_ITEM;
+ yyval.arg[1].arg_type = A_SINGLE;
+ yyval.arg[1].arg_ptr.arg_str = str_make(yyvsp[0].cval,0);
+ for (s = yyvsp[0].cval; *s && islower(*s); s++) ;
+ if (dowarn && !*s)
+ warn(
+ "\"%s\" may clash with future reserved word",
+ yyvsp[0].cval );
+ }
+break;
+#line 2971 "y.tab.c"
+ }
+ yyssp -= yym;
+ yystate = *yyssp;
+ yyvsp -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yyssp = YYFINAL;
+ *++yyvsp = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
+#endif
+ if (yyssp >= yysslim && yygrowstack())
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate;
+ *++yyvsp = yyval;
+ goto yyloop;
+yyoverflow:
+ yyerror("yacc stack overflow");
+yyabort:
+ return (1);
+yyaccept:
+ return (0);
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/perly.h b/MultiSource/Benchmarks/MallocBench/perl/perly.h
new file mode 100644
index 00000000..2a7ef7ea
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/perly.h
@@ -0,0 +1,86 @@
+#ifndef YYERRCODE
+#define YYERRCODE 256
+#endif
+
+#define WORD 257
+#define APPEND 258
+#define OPEN 259
+#define SSELECT 260
+#define LOOPEX 261
+#define USING 262
+#define FORMAT 263
+#define DO 264
+#define SHIFT 265
+#define PUSH 266
+#define POP 267
+#define LVALFUN 268
+#define WHILE 269
+#define UNTIL 270
+#define IF 271
+#define UNLESS 272
+#define ELSE 273
+#define ELSIF 274
+#define CONTINUE 275
+#define SPLIT 276
+#define FLIST 277
+#define FOR 278
+#define FILOP 279
+#define FILOP2 280
+#define FILOP3 281
+#define FILOP4 282
+#define FILOP22 283
+#define FILOP25 284
+#define FUNC0 285
+#define FUNC1 286
+#define FUNC2 287
+#define FUNC2x 288
+#define FUNC3 289
+#define FUNC4 290
+#define FUNC5 291
+#define HSHFUN 292
+#define HSHFUN3 293
+#define FLIST2 294
+#define SUB 295
+#define FILETEST 296
+#define LOCAL 297
+#define DELETE 298
+#define RELOP 299
+#define EQOP 300
+#define MULOP 301
+#define ADDOP 302
+#define PACKAGE 303
+#define AMPER 304
+#define FORMLIST 305
+#define REG 306
+#define ARYLEN 307
+#define ARY 308
+#define HSH 309
+#define STAR 310
+#define SUBST 311
+#define PATTERN 312
+#define RSTRING 313
+#define TRANS 314
+#define LISTOP 315
+#define DOTDOT 316
+#define OROR 317
+#define ANDAND 318
+#define UNIOP 319
+#define LS 320
+#define RS 321
+#define MATCH 322
+#define NMATCH 323
+#define UMINUS 324
+#define POW 325
+#define INC 326
+#define DEC 327
+typedef union {
+ int ival;
+ char *cval;
+ ARG *arg;
+ CMD *cmdval;
+ struct compcmd compval;
+ STAB *stabval;
+ FCMD *formval;
+} YYSTYPE;
+extern YYSTYPE yylval;
+extern YYSTYPE yylval;
diff --git a/MultiSource/Benchmarks/MallocBench/perl/regcomp.c b/MultiSource/Benchmarks/MallocBench/perl/regcomp.c
new file mode 100644
index 00000000..1c1df207
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/regcomp.c
@@ -0,0 +1,1407 @@
+/* NOTE: this is derived from Henry Spencer's regexp code, and should not
+ * confused with the original package (see point 3 below). Thanks, Henry!
+ */
+
+/* Additional note: this code is very heavily munged from Henry's version
+ * in places. In some spots I've traded clarity for efficiency, so don't
+ * blame Henry for some of the lack of readability.
+ */
+
+/* $RCSfile$$Revision$$Date$
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/12 09:04:45 lwall
+ * patch1: random cleanup in cpp namespace
+ *
+ * Revision 4.0 91/03/20 01:39:01 lwall
+ * 4.0 baseline.
+ *
+ */
+
+/*
+ * regcomp and regexec -- regsub and regerror are not used in perl
+ *
+ * Copyright (c) 1986 by University of Toronto.
+ * Written by Henry Spencer. Not derived from licensed software.
+ *
+ * Permission is granted to anyone to use this software for any
+ * purpose on any computer system, and to redistribute it freely,
+ * subject to the following restrictions:
+ *
+ * 1. The author is not responsible for the consequences of use of
+ * this software, no matter how awful, even if they arise
+ * from defects in it.
+ *
+ * 2. The origin of this software must not be misrepresented, either
+ * by explicit claim or by omission.
+ *
+ * 3. Altered versions must be plainly marked as such, and must not
+ * be misrepresented as being the original software.
+ *
+ *
+ **** Alterations to Henry's code are...
+ ****
+ **** Copyright (c) 1989, 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.
+ *
+ * Beware that some of this code is subtly aware of the way operator
+ * precedence is structured in regular expressions. Serious changes in
+ * regular-expression syntax might require a total rethink.
+ */
+#include "EXTERN.h"
+#include "perl.h"
+#include "INTERN.h"
+#include "regcomp.h"
+
+#ifdef MSDOS
+# if defined(BUGGY_MSC6)
+ /* MSC 6.00A breaks on op/regexp.t test 85 unless we turn this off */
+ # pragma optimize("a",off)
+ /* But MSC 6.00A is happy with 'w', for aliases only across function calls*/
+ # pragma optimize("w",on )
+# endif /* BUGGY_MSC6 */
+#endif /* MSDOS */
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+#define ISMULT1(c) ((c) == '*' || (c) == '+' || (c) == '?')
+#define ISMULT2(s) ((*s) == '*' || (*s) == '+' || (*s) == '?' || \
+ ((*s) == '{' && regcurly(s)))
+#define META "^$.[()|?+*\\"
+
+#ifdef SPSTART
+#undef SPSTART /* dratted cpp namespace... */
+#endif
+/*
+ * Flags to be passed up and down.
+ */
+#define HASWIDTH 01 /* Known never to match null string. */
+#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */
+#define SPSTART 04 /* Starts with * or +. */
+#define WORST 0 /* Worst case. */
+
+/*
+ * Global work variables for regcomp().
+ */
+static char *regprecomp; /* uncompiled string. */
+static char *regparse; /* Input-scan pointer. */
+static char *regxend; /* End of input for compile */
+static int regnpar; /* () count. */
+static char *regcode; /* Code-emit pointer; &regdummy = don't. */
+static long regsize; /* Code size. */
+static int regfold;
+static int regsawbracket; /* Did we do {d,d} trick? */
+
+/*
+ * Forward declarations for regcomp()'s friends.
+ */
+STATIC int regcurly();
+STATIC char *reg();
+STATIC char *regbranch();
+STATIC char *regpiece();
+STATIC char *regatom();
+STATIC char *regclass();
+STATIC char *regnode();
+STATIC char *reganode();
+STATIC void regc();
+STATIC void reginsert();
+STATIC void regtail();
+STATIC void regoptail();
+
+/*
+ - regcomp - compile a regular expression into internal code
+ *
+ * We can't allocate space until we know how big the compiled form will be,
+ * but we can't compile it (and thus know how big it is) until we've got a
+ * place to put the code. So we cheat: we compile it twice, once with code
+ * generation turned off and size counting turned on, and once "for real".
+ * This also means that we don't allocate space until we are sure that the
+ * thing really will compile successfully, and we never have to move the
+ * code and thus invalidate pointers into it. (Note that it has to be in
+ * one piece because free() must be able to free it all.) [NB: not true in perl]
+ *
+ * Beware that the optimization-preparation code in here knows about some
+ * of the structure of the compiled regexp. [I'll say.]
+ */
+regexp *
+regcomp(exp,xend,fold)
+char *exp;
+char *xend;
+int fold;
+{
+ register regexp *r;
+ register char *scan;
+ register STR *longish;
+ STR *longest;
+ register int len;
+ register char *first;
+ int flags;
+ int backish;
+ int backest;
+ int curback;
+ extern char *safemalloc();
+ extern char *savestr();
+ int sawplus = 0;
+
+ if (exp == NULL)
+ fatal("NULL regexp argument");
+
+ /* First pass: determine size, legality. */
+ regfold = fold;
+ regparse = exp;
+ regxend = xend;
+ regprecomp = nsavestr(exp,xend-exp);
+ regsawbracket = 0;
+ regnpar = 1;
+ regsize = 0L;
+ regcode = &regdummy;
+ regc(MAGIC);
+ if (reg(0, &flags) == NULL) {
+ Safefree(regprecomp);
+ regprecomp = Nullch;
+ return(NULL);
+ }
+
+ /* Small enough for pointer-storage convention? */
+ if (regsize >= 32767L) /* Probably could be 65535L. */
+ FAIL("regexp too big");
+
+ /* Allocate space. */
+ Newc(1001, r, sizeof(regexp) + (unsigned)regsize, char, regexp);
+ if (r == NULL)
+ FAIL("regexp out of space");
+
+ /* Second pass: emit code. */
+ if (regsawbracket)
+ bcopy(regprecomp,exp,xend-exp);
+ r->precomp = regprecomp;
+ r->subbase = NULL;
+ regparse = exp;
+ regnpar = 1;
+ regcode = r->program;
+ regc(MAGIC);
+ if (reg(0, &flags) == NULL)
+ return(NULL);
+
+ /* Dig out information for optimizations. */
+ r->regstart = Nullstr; /* Worst-case defaults. */
+ r->reganch = 0;
+ r->regmust = Nullstr;
+ r->regback = -1;
+ r->regstclass = Nullch;
+ scan = r->program+1; /* First BRANCH. */
+ if (OP(regnext(scan)) == END) {/* Only one top-level choice. */
+ scan = NEXTOPER(scan);
+
+ first = scan;
+ while (OP(first) == OPEN ||
+ (OP(first) == BRANCH && OP(regnext(first)) != BRANCH) ||
+ (OP(first) == PLUS) ||
+ (OP(first) == CURLY && ARG1(first) > 0) ) {
+ if (OP(first) == PLUS)
+ sawplus = 2;
+ else
+ first += regarglen[OP(first)];
+ first = NEXTOPER(first);
+ }
+
+ /* Starting-point info. */
+ if (OP(first) == EXACTLY) {
+ r->regstart =
+ str_make(OPERAND(first)+1,*OPERAND(first));
+ if (r->regstart->str_cur > !(sawstudy|fold))
+ fbmcompile(r->regstart,fold);
+ }
+ else if ((exp = index(simple,OP(first))) && exp > simple)
+ r->regstclass = first;
+ else if (OP(first) == BOUND || OP(first) == NBOUND)
+ r->regstclass = first;
+ else if (OP(first) == BOL ||
+ (OP(first) == STAR && OP(NEXTOPER(first)) == ANY) )
+ r->reganch = 1; /* kinda turn .* into ^.* */
+ r->reganch |= sawplus;
+
+#ifdef DEBUGGING
+ if (debug & 512)
+ fprintf(stderr,"first %d next %d offset %d\n",
+ OP(first), OP(NEXTOPER(first)), first - scan);
+#endif
+ /*
+ * If there's something expensive in the r.e., find the
+ * longest literal string that must appear and make it the
+ * regmust. Resolve ties in favor of later strings, since
+ * the regstart check works with the beginning of the r.e.
+ * and avoiding duplication strengthens checking. Not a
+ * strong reason, but sufficient in the absence of others.
+ * [Now we resolve ties in favor of the earlier string if
+ * it happens that curback has been invalidated, since the
+ * earlier string may buy us something the later one won't.]
+ */
+ longish = str_make("",0);
+ longest = str_make("",0);
+ len = 0;
+ curback = 0;
+ backish = 0;
+ backest = 0;
+ while (OP(scan) != END) {
+ if (OP(scan) == BRANCH) {
+ if (OP(regnext(scan)) == BRANCH) {
+ curback = -30000;
+ while (OP(scan) == BRANCH)
+ scan = regnext(scan);
+ }
+ else /* single branch is ok */
+ scan = NEXTOPER(scan);
+ }
+ if (OP(scan) == EXACTLY) {
+ char *t;
+
+ first = scan;
+ while (OP(t = regnext(scan)) == CLOSE)
+ scan = t;
+ if (curback - backish == len) {
+ str_ncat(longish, OPERAND(first)+1,
+ *OPERAND(first));
+ len += *OPERAND(first);
+ curback += *OPERAND(first);
+ first = regnext(scan);
+ }
+ else if (*OPERAND(first) >= len + (curback >= 0)) {
+ len = *OPERAND(first);
+ str_nset(longish, OPERAND(first)+1,len);
+ backish = curback;
+ curback += len;
+ first = regnext(scan);
+ }
+ else
+ curback += *OPERAND(first);
+ }
+ else if (index(varies,OP(scan))) {
+ curback = -30000;
+ len = 0;
+ if (longish->str_cur > longest->str_cur) {
+ str_sset(longest,longish);
+ backest = backish;
+ }
+ str_nset(longish,"",0);
+ }
+ else if (index(simple,OP(scan))) {
+ curback++;
+ len = 0;
+ if (longish->str_cur > longest->str_cur) {
+ str_sset(longest,longish);
+ backest = backish;
+ }
+ str_nset(longish,"",0);
+ }
+ scan = regnext(scan);
+ }
+
+ /* Prefer earlier on tie, unless we can tail match latter */
+
+ if (longish->str_cur + (OP(first) == EOL) > longest->str_cur) {
+ str_sset(longest,longish);
+ backest = backish;
+ }
+ else
+ str_nset(longish,"",0);
+ if (longest->str_cur
+ &&
+ (!r->regstart
+ ||
+ !fbminstr(r->regstart->str_ptr,
+ r->regstart->str_ptr + r->regstart->str_cur,
+ longest)
+ )
+ )
+ {
+ r->regmust = longest;
+ if (backest < 0)
+ backest = -1;
+ r->regback = backest;
+ if (longest->str_cur
+ > !(sawstudy || fold || OP(first) == EOL) )
+ fbmcompile(r->regmust,fold);
+ r->regmust->str_u.str_useful = 100;
+ if (OP(first) == EOL && longish->str_cur)
+ r->regmust->str_pok |= SP_TAIL;
+ }
+ else {
+ str_free(longest);
+ longest = Nullstr;
+ }
+ str_free(longish);
+ }
+
+ r->do_folding = fold;
+ r->nparens = regnpar - 1;
+ New(1002, r->startp, regnpar, char*);
+ New(1002, r->endp, regnpar, char*);
+#ifdef DEBUGGING
+ if (debug & 512)
+ regdump(r);
+#endif
+ return(r);
+}
+
+/*
+ - reg - regular expression, i.e. main body or parenthesized thing
+ *
+ * Caller must absorb opening parenthesis.
+ *
+ * Combining parenthesis handling with the base level of regular expression
+ * is a trifle forced, but the need to tie the tails of the branches to what
+ * follows makes it hard to avoid.
+ */
+static char *
+reg(paren, flagp)
+int paren; /* Parenthesized? */
+int *flagp;
+{
+ register char *ret;
+ register char *br;
+ register char *ender;
+ register int parno;
+ int flags;
+
+ *flagp = HASWIDTH; /* Tentatively. */
+
+ /* Make an OPEN node, if parenthesized. */
+ if (paren) {
+ parno = regnpar;
+ regnpar++;
+ ret = reganode(OPEN, parno);
+ } else
+ ret = NULL;
+
+ /* Pick up the branches, linking them together. */
+ br = regbranch(&flags);
+ if (br == NULL)
+ return(NULL);
+ if (ret != NULL)
+ regtail(ret, br); /* OPEN -> first. */
+ else
+ ret = br;
+ if (!(flags&HASWIDTH))
+ *flagp &= ~HASWIDTH;
+ *flagp |= flags&SPSTART;
+ while (*regparse == '|') {
+ regparse++;
+ br = regbranch(&flags);
+ if (br == NULL)
+ return(NULL);
+ regtail(ret, br); /* BRANCH -> BRANCH. */
+ if (!(flags&HASWIDTH))
+ *flagp &= ~HASWIDTH;
+ *flagp |= flags&SPSTART;
+ }
+
+ /* Make a closing node, and hook it on the end. */
+ if (paren)
+ ender = reganode(CLOSE, parno);
+ else
+ ender = regnode(END);
+ regtail(ret, ender);
+
+ /* Hook the tails of the branches to the closing node. */
+ for (br = ret; br != NULL; br = regnext(br))
+ regoptail(br, ender);
+
+ /* Check for proper termination. */
+ if (paren && *regparse++ != ')') {
+ FAIL("unmatched () in regexp");
+ } else if (!paren && regparse < regxend) {
+ if (*regparse == ')') {
+ FAIL("unmatched () in regexp");
+ } else
+ FAIL("junk on end of regexp"); /* "Can't happen". */
+ /* NOTREACHED */
+ }
+
+ return(ret);
+}
+
+/*
+ - regbranch - one alternative of an | operator
+ *
+ * Implements the concatenation operator.
+ */
+static char *
+regbranch(flagp)
+int *flagp;
+{
+ register char *ret;
+ register char *chain;
+ register char *latest;
+ int flags;
+
+ *flagp = WORST; /* Tentatively. */
+
+ ret = regnode(BRANCH);
+ chain = NULL;
+ while (regparse < regxend && *regparse != '|' && *regparse != ')') {
+ latest = regpiece(&flags);
+ if (latest == NULL)
+ return(NULL);
+ *flagp |= flags&HASWIDTH;
+ if (chain == NULL) /* First piece. */
+ *flagp |= flags&SPSTART;
+ else
+ regtail(chain, latest);
+ chain = latest;
+ }
+ if (chain == NULL) /* Loop ran zero times. */
+ (void) regnode(NOTHING);
+
+ return(ret);
+}
+
+/*
+ - regpiece - something followed by possible [*+?]
+ *
+ * Note that the branching code sequences used for ? and the general cases
+ * of * and + are somewhat optimized: they use the same NOTHING node as
+ * both the endmarker for their branch list and the body of the last branch.
+ * It might seem that this node could be dispensed with entirely, but the
+ * endmarker role is not redundant.
+ */
+static char *
+regpiece(flagp)
+int *flagp;
+{
+ register char *ret;
+ register char op;
+ register char *next;
+ int flags;
+ char *origparse = regparse;
+ int orignpar = regnpar;
+ char *max;
+ int iter;
+ char ch;
+
+ ret = regatom(&flags);
+ if (ret == NULL)
+ return(NULL);
+
+ op = *regparse;
+
+ /* Here's a total kludge: if after the atom there's a {\d+,?\d*}
+ * then we decrement the first number by one and reset our
+ * parsing back to the beginning of the same atom. If the first number
+ * is down to 0, decrement the second number instead and fake up
+ * a ? after it. Given the way this compiler doesn't keep track
+ * of offsets on the first pass, this is the only way to replicate
+ * a piece of code. Sigh.
+ */
+ if (op == '{' && regcurly(regparse)) {
+ next = regparse + 1;
+ max = Nullch;
+ while (isdigit(*next) || *next == ',') {
+ if (*next == ',') {
+ if (max)
+ break;
+ else
+ max = next;
+ }
+ next++;
+ }
+ if (*next == '}') { /* got one */
+ if (!max)
+ max = next;
+ regparse++;
+ iter = atoi(regparse);
+ if (flags&SIMPLE) { /* we can do it right after all */
+ int tmp;
+
+ reginsert(CURLY, ret);
+ if (iter > 0)
+ *flagp = (WORST|HASWIDTH);
+ if (*max == ',')
+ max++;
+ else
+ max = regparse;
+ tmp = atoi(max);
+ if (tmp && tmp < iter)
+ fatal("Can't do {n,m} with n > m");
+ if (regcode != &regdummy) {
+#ifdef REGALIGN
+ *(unsigned short *)(ret+3) = iter;
+ *(unsigned short *)(ret+5) = tmp;
+#else
+ ret[3] = iter >> 8; ret[4] = iter & 0377;
+ ret[5] = tmp >> 8; ret[6] = tmp & 0377;
+#endif
+ }
+ regparse = next;
+ goto nest_check;
+ }
+ regsawbracket++; /* remember we clobbered exp */
+ if (iter > 0) {
+ ch = *max;
+ sprintf(regparse,"%.*d", max-regparse, iter - 1);
+ *max = ch;
+ if (*max == ',' && max[1] != '}') {
+ if (atoi(max+1) <= 0)
+ fatal("Can't do {n,m} with n > m");
+ ch = *next;
+ sprintf(max+1,"%.*d", next-(max+1), atoi(max+1) - 1);
+ *next = ch;
+ }
+ if (iter != 1 || *max == ',') {
+ regparse = origparse; /* back up input pointer */
+ regnpar = orignpar; /* don't make more parens */
+ }
+ else {
+ regparse = next;
+ goto nest_check;
+ }
+ *flagp = flags;
+ return ret;
+ }
+ if (*max == ',') {
+ max++;
+ iter = atoi(max);
+ if (max == next) { /* any number more? */
+ regparse = next;
+ op = '*'; /* fake up one with a star */
+ }
+ else if (iter > 0) {
+ op = '?'; /* fake up optional atom */
+ ch = *next;
+ sprintf(max,"%.*d", next-max, iter - 1);
+ *next = ch;
+ if (iter == 1)
+ regparse = next;
+ else {
+ regparse = origparse - 1; /* offset ++ below */
+ regnpar = orignpar;
+ }
+ }
+ else
+ fatal("Can't do {n,0}");
+ }
+ else
+ fatal("Can't do {0}");
+ }
+ }
+
+ if (!ISMULT1(op)) {
+ *flagp = flags;
+ return(ret);
+ }
+
+ if (!(flags&HASWIDTH) && op != '?')
+ FAIL("regexp *+ operand could be empty");
+ *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);
+
+ if (op == '*' && (flags&SIMPLE))
+ reginsert(STAR, ret);
+ else if (op == '*') {
+ /* Emit x* as (x&|), where & means "self". */
+ reginsert(BRANCH, ret); /* Either x */
+ regoptail(ret, regnode(BACK)); /* and loop */
+ regoptail(ret, ret); /* back */
+ regtail(ret, regnode(BRANCH)); /* or */
+ regtail(ret, regnode(NOTHING)); /* null. */
+ } else if (op == '+' && (flags&SIMPLE))
+ reginsert(PLUS, ret);
+ else if (op == '+') {
+ /* Emit x+ as x(&|), where & means "self". */
+ next = regnode(BRANCH); /* Either */
+ regtail(ret, next);
+ regtail(regnode(BACK), ret); /* loop back */
+ regtail(next, regnode(BRANCH)); /* or */
+ regtail(ret, regnode(NOTHING)); /* null. */
+ } else if (op == '?') {
+ /* Emit x? as (x|) */
+ reginsert(BRANCH, ret); /* Either x */
+ regtail(ret, regnode(BRANCH)); /* or */
+ next = regnode(NOTHING); /* null. */
+ regtail(ret, next);
+ regoptail(ret, next);
+ }
+ nest_check:
+ regparse++;
+ if (ISMULT2(regparse))
+ FAIL("nested *?+ in regexp");
+
+ return(ret);
+}
+
+/*
+ - regatom - the lowest level
+ *
+ * Optimization: gobbles an entire sequence of ordinary characters so that
+ * it can turn them into a single node, which is smaller to store and
+ * faster to run. Backslashed characters are exceptions, each becoming a
+ * separate node; the code is simpler that way and it's not worth fixing.
+ *
+ * [Yes, it is worth fixing, some scripts can run twice the speed.]
+ */
+static char *
+regatom(flagp)
+int *flagp;
+{
+ register char *ret;
+ int flags;
+
+ *flagp = WORST; /* Tentatively. */
+
+ switch (*regparse++) {
+ case '^':
+ ret = regnode(BOL);
+ break;
+ case '$':
+ ret = regnode(EOL);
+ break;
+ case '.':
+ ret = regnode(ANY);
+ *flagp |= HASWIDTH|SIMPLE;
+ break;
+ case '[':
+ ret = regclass();
+ *flagp |= HASWIDTH|SIMPLE;
+ break;
+ case '(':
+ ret = reg(1, &flags);
+ if (ret == NULL)
+ return(NULL);
+ *flagp |= flags&(HASWIDTH|SPSTART);
+ break;
+ case '|':
+ case ')':
+ FAIL("internal urp in regexp"); /* Supposed to be caught earlier. */
+ break;
+ case '?':
+ case '+':
+ case '*':
+ FAIL("?+* follows nothing in regexp");
+ break;
+ case '\\':
+ switch (*regparse) {
+ case 'w':
+ ret = regnode(ALNUM);
+ *flagp |= HASWIDTH|SIMPLE;
+ regparse++;
+ break;
+ case 'W':
+ ret = regnode(NALNUM);
+ *flagp |= HASWIDTH|SIMPLE;
+ regparse++;
+ break;
+ case 'b':
+ ret = regnode(BOUND);
+ *flagp |= SIMPLE;
+ regparse++;
+ break;
+ case 'B':
+ ret = regnode(NBOUND);
+ *flagp |= SIMPLE;
+ regparse++;
+ break;
+ case 's':
+ ret = regnode(SPACE);
+ *flagp |= HASWIDTH|SIMPLE;
+ regparse++;
+ break;
+ case 'S':
+ ret = regnode(NSPACE);
+ *flagp |= HASWIDTH|SIMPLE;
+ regparse++;
+ break;
+ case 'd':
+ ret = regnode(DIGIT);
+ *flagp |= HASWIDTH|SIMPLE;
+ regparse++;
+ break;
+ case 'D':
+ ret = regnode(NDIGIT);
+ *flagp |= HASWIDTH|SIMPLE;
+ regparse++;
+ break;
+ case 'n':
+ case 'r':
+ case 't':
+ case 'f':
+ case 'e':
+ case 'a':
+ case 'x':
+ case 'c':
+ case '0':
+ goto defchar;
+ case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ {
+ int num = atoi(regparse);
+
+ if (num > 9 && num >= regnpar)
+ goto defchar;
+ else {
+ ret = reganode(REF, num);
+ while (isascii(*regparse) && isdigit(*regparse))
+ regparse++;
+ *flagp |= SIMPLE;
+ }
+ }
+ break;
+ case '\0':
+ if (regparse >= regxend)
+ FAIL("trailing \\ in regexp");
+ /* FALL THROUGH */
+ default:
+ goto defchar;
+ }
+ break;
+ default: {
+ register int len;
+ register char ender;
+ register char *p;
+ char *oldp;
+ int numlen;
+
+ defchar:
+ ret = regnode(EXACTLY);
+ regc(0); /* save spot for len */
+ for (len=0, p=regparse-1;
+ len < 127 && p < regxend;
+ len++)
+ {
+ oldp = p;
+ switch (*p) {
+ case '^':
+ case '$':
+ case '.':
+ case '[':
+ case '(':
+ case ')':
+ case '|':
+ goto loopdone;
+ case '\\':
+ switch (*++p) {
+ case 'w':
+ case 'W':
+ case 'b':
+ case 'B':
+ case 's':
+ case 'S':
+ case 'd':
+ case 'D':
+ --p;
+ goto loopdone;
+ case 'n':
+ ender = '\n';
+ p++;
+ break;
+ case 'r':
+ ender = '\r';
+ p++;
+ break;
+ case 't':
+ ender = '\t';
+ p++;
+ break;
+ case 'f':
+ ender = '\f';
+ p++;
+ break;
+ case 'e':
+ ender = '\033';
+ p++;
+ break;
+ case 'a':
+ ender = '\007';
+ p++;
+ break;
+ case 'x':
+ ender = scanhex(++p, 2, &numlen);
+ p += numlen;
+ break;
+ case 'c':
+ p++;
+ ender = *p++;
+ if (islower(ender))
+ ender = toupper(ender);
+ ender ^= 64;
+ break;
+ case '0': case '1': case '2': case '3':case '4':
+ case '5': case '6': case '7': case '8':case '9':
+ if (*p == '0' ||
+ (isdigit(p[1]) && atoi(p) >= regnpar) ) {
+ ender = scanoct(p, 3, &numlen);
+ p += numlen;
+ }
+ else {
+ --p;
+ goto loopdone;
+ }
+ break;
+ case '\0':
+ if (p >= regxend)
+ FAIL("trailing \\ in regexp");
+ /* FALL THROUGH */
+ default:
+ ender = *p++;
+ break;
+ }
+ break;
+ default:
+ ender = *p++;
+ break;
+ }
+ if (regfold && isupper(ender))
+ ender = tolower(ender);
+ if (ISMULT2(p)) { /* Back off on ?+*. */
+ if (len)
+ p = oldp;
+ else {
+ len++;
+ regc(ender);
+ }
+ break;
+ }
+ regc(ender);
+ }
+ loopdone:
+ regparse = p;
+ if (len <= 0)
+ FAIL("internal disaster in regexp");
+ *flagp |= HASWIDTH;
+ if (len == 1)
+ *flagp |= SIMPLE;
+ if (regcode != &regdummy)
+ *OPERAND(ret) = len;
+ regc('\0');
+ }
+ break;
+ }
+
+ return(ret);
+}
+
+static void
+regset(bits,def,c)
+char *bits;
+int def;
+register int c;
+{
+ if (regcode == &regdummy)
+ return;
+ c &= 255;
+ if (def)
+ bits[c >> 3] &= ~(1 << (c & 7));
+ else
+ bits[c >> 3] |= (1 << (c & 7));
+}
+
+static char *
+regclass()
+{
+ register char *bits;
+ register int class;
+ register int lastclass;
+ register int range = 0;
+ register char *ret;
+ register int def;
+ int numlen;
+
+ ret = regnode(ANYOF);
+ if (*regparse == '^') { /* Complement of range. */
+ regparse++;
+ def = 0;
+ } else {
+ def = 255;
+ }
+ bits = regcode;
+ for (class = 0; class < 32; class++)
+ regc(def);
+ if (*regparse == ']' || *regparse == '-')
+ goto skipcond; /* allow 1st char to be ] or - */
+ while (regparse < regxend && *regparse != ']') {
+ skipcond:
+ class = UCHARAT(regparse++);
+ if (class == '\\') {
+ class = UCHARAT(regparse++);
+ switch (class) {
+ case 'w':
+ for (class = 'a'; class <= 'z'; class++)
+ regset(bits,def,class);
+ for (class = 'A'; class <= 'Z'; class++)
+ regset(bits,def,class);
+ for (class = '0'; class <= '9'; class++)
+ regset(bits,def,class);
+ regset(bits,def,'_');
+ lastclass = 1234;
+ continue;
+ case 's':
+ regset(bits,def,' ');
+ regset(bits,def,'\t');
+ regset(bits,def,'\r');
+ regset(bits,def,'\f');
+ regset(bits,def,'\n');
+ lastclass = 1234;
+ continue;
+ case 'd':
+ for (class = '0'; class <= '9'; class++)
+ regset(bits,def,class);
+ lastclass = 1234;
+ continue;
+ case 'n':
+ class = '\n';
+ break;
+ case 'r':
+ class = '\r';
+ break;
+ case 't':
+ class = '\t';
+ break;
+ case 'f':
+ class = '\f';
+ break;
+ case 'b':
+ class = '\b';
+ break;
+ case 'e':
+ class = '\033';
+ break;
+ case 'a':
+ class = '\007';
+ break;
+ case 'x':
+ class = scanhex(regparse, 2, &numlen);
+ regparse += numlen;
+ break;
+ case 'c':
+ class = *regparse++;
+ if (islower(class))
+ class = toupper(class);
+ class ^= 64;
+ break;
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ class = scanoct(--regparse, 3, &numlen);
+ regparse += numlen;
+ break;
+ }
+ }
+ if (range) {
+ if (lastclass > class)
+ FAIL("invalid [] range in regexp");
+ range = 0;
+ }
+ else {
+ lastclass = class;
+ if (*regparse == '-' && regparse+1 < regxend &&
+ regparse[1] != ']') {
+ regparse++;
+ range = 1;
+ continue; /* do it next time */
+ }
+ }
+ for ( ; lastclass <= class; lastclass++) {
+ regset(bits,def,lastclass);
+ if (regfold && isupper(lastclass))
+ regset(bits,def,tolower(lastclass));
+ }
+ lastclass = class;
+ }
+ if (*regparse != ']')
+ FAIL("unmatched [] in regexp");
+ regparse++;
+ return ret;
+}
+
+/*
+ - regnode - emit a node
+ */
+static char * /* Location. */
+regnode(op)
+char op;
+{
+ register char *ret;
+ register char *ptr;
+
+ ret = regcode;
+ if (ret == &regdummy) {
+#ifdef REGALIGN
+ if (!(regsize & 1))
+ regsize++;
+#endif
+ regsize += 3;
+ return(ret);
+ }
+
+#ifdef REGALIGN
+#ifndef lint
+ if (!((long)ret & 1))
+ *ret++ = 127;
+#endif
+#endif
+ ptr = ret;
+ *ptr++ = op;
+ *ptr++ = '\0'; /* Null "next" pointer. */
+ *ptr++ = '\0';
+ regcode = ptr;
+
+ return(ret);
+}
+
+/*
+ - reganode - emit a node with an argument
+ */
+static char * /* Location. */
+reganode(op, arg)
+char op;
+unsigned short arg;
+{
+ register char *ret;
+ register char *ptr;
+
+ ret = regcode;
+ if (ret == &regdummy) {
+#ifdef REGALIGN
+ if (!(regsize & 1))
+ regsize++;
+#endif
+ regsize += 5;
+ return(ret);
+ }
+
+#ifdef REGALIGN
+#ifndef lint
+ if (!((long)ret & 1))
+ *ret++ = 127;
+#endif
+#endif
+ ptr = ret;
+ *ptr++ = op;
+ *ptr++ = '\0'; /* Null "next" pointer. */
+ *ptr++ = '\0';
+#ifdef REGALIGN
+ *(unsigned short *)(ret+3) = arg;
+#else
+ ret[3] = arg >> 8; ret[4] = arg & 0377;
+#endif
+ ptr += 2;
+ regcode = ptr;
+
+ return(ret);
+}
+
+/*
+ - regc - emit (if appropriate) a byte of code
+ */
+static void
+regc(b)
+char b;
+{
+ if (regcode != &regdummy)
+ *regcode++ = b;
+ else
+ regsize++;
+}
+
+/*
+ - reginsert - insert an operator in front of already-emitted operand
+ *
+ * Means relocating the operand.
+ */
+static void
+reginsert(op, opnd)
+char op;
+char *opnd;
+{
+ register char *src;
+ register char *dst;
+ register char *place;
+ register offset = (op == CURLY ? 4 : 0);
+
+ if (regcode == &regdummy) {
+#ifdef REGALIGN
+ regsize += 4 + offset;
+#else
+ regsize += 3 + offset;
+#endif
+ return;
+ }
+
+ src = regcode;
+#ifdef REGALIGN
+ regcode += 4 + offset;
+#else
+ regcode += 3 + offset;
+#endif
+ dst = regcode;
+ while (src > opnd)
+ *--dst = *--src;
+
+ place = opnd; /* Op node, where operand used to be. */
+ *place++ = op;
+ *place++ = '\0';
+ *place++ = '\0';
+ while (offset-- > 0)
+ *place++ = '\0';
+}
+
+/*
+ - regtail - set the next-pointer at the end of a node chain
+ */
+static void
+regtail(p, val)
+char *p;
+char *val;
+{
+ register char *scan;
+ register char *temp;
+ register int offset;
+
+ if (p == &regdummy)
+ return;
+
+ /* Find last node. */
+ scan = p;
+ for (;;) {
+ temp = regnext(scan);
+ if (temp == NULL)
+ break;
+ scan = temp;
+ }
+
+#ifdef REGALIGN
+ offset = val - scan;
+#ifndef lint
+ *(short*)(scan+1) = offset;
+#else
+ offset = offset;
+#endif
+#else
+ if (OP(scan) == BACK)
+ offset = scan - val;
+ else
+ offset = val - scan;
+ *(scan+1) = (offset>>8)&0377;
+ *(scan+2) = offset&0377;
+#endif
+}
+
+/*
+ - regoptail - regtail on operand of first argument; nop if operandless
+ */
+static void
+regoptail(p, val)
+char *p;
+char *val;
+{
+ /* "Operandless" and "op != BRANCH" are synonymous in practice. */
+ if (p == NULL || p == &regdummy || OP(p) != BRANCH)
+ return;
+ regtail(NEXTOPER(p), val);
+}
+
+/*
+ - regcurly - a little FSA that accepts {\d+,?\d*}
+ */
+STATIC int
+regcurly(s)
+register char *s;
+{
+ if (*s++ != '{')
+ return FALSE;
+ if (!isdigit(*s))
+ return FALSE;
+ while (isdigit(*s))
+ s++;
+ if (*s == ',')
+ s++;
+ while (isdigit(*s))
+ s++;
+ if (*s != '}')
+ return FALSE;
+ return TRUE;
+}
+
+#ifdef DEBUGGING
+
+/*
+ - regdump - dump a regexp onto stderr in vaguely comprehensible form
+ */
+void
+regdump(r)
+regexp *r;
+{
+ register char *s;
+ register char op = EXACTLY; /* Arbitrary non-END op. */
+ register char *next;
+
+
+ s = r->program + 1;
+ while (op != END) { /* While that wasn't END last time... */
+#ifdef REGALIGN
+ if (!((long)s & 1))
+ s++;
+#endif
+ op = OP(s);
+ fprintf(stderr,"%2d%s", s-r->program, regprop(s)); /* Where, what. */
+ next = regnext(s);
+ s += regarglen[op];
+ if (next == NULL) /* Next ptr. */
+ fprintf(stderr,"(0)");
+ else
+ fprintf(stderr,"(%d)", (s-r->program)+(next-s));
+ s += 3;
+ if (op == ANYOF) {
+ s += 32;
+ }
+ if (op == EXACTLY) {
+ /* Literal string, where present. */
+ s++;
+ while (*s != '\0') {
+ (void)putchar(*s);
+ s++;
+ }
+ s++;
+ }
+ (void)putchar('\n');
+ }
+
+ /* Header fields of interest. */
+ if (r->regstart)
+ fprintf(stderr,"start `%s' ", r->regstart->str_ptr);
+ if (r->regstclass)
+ fprintf(stderr,"stclass `%s' ", regprop(r->regstclass));
+ if (r->reganch & 1)
+ fprintf(stderr,"anchored ");
+ if (r->reganch & 2)
+ fprintf(stderr,"plus ");
+ if (r->regmust != NULL)
+ fprintf(stderr,"must have \"%s\" back %d ", r->regmust->str_ptr,
+ r->regback);
+ fprintf(stderr,"\n");
+}
+
+/*
+ - regprop - printable representation of opcode
+ */
+char *
+regprop(op)
+char *op;
+{
+ register char *p;
+
+ (void) strcpy(buf, ":");
+
+ switch (OP(op)) {
+ case BOL:
+ p = "BOL";
+ break;
+ case EOL:
+ p = "EOL";
+ break;
+ case ANY:
+ p = "ANY";
+ break;
+ case ANYOF:
+ p = "ANYOF";
+ break;
+ case BRANCH:
+ p = "BRANCH";
+ break;
+ case EXACTLY:
+ p = "EXACTLY";
+ break;
+ case NOTHING:
+ p = "NOTHING";
+ break;
+ case BACK:
+ p = "BACK";
+ break;
+ case END:
+ p = "END";
+ break;
+ case ALNUM:
+ p = "ALNUM";
+ break;
+ case NALNUM:
+ p = "NALNUM";
+ break;
+ case BOUND:
+ p = "BOUND";
+ break;
+ case NBOUND:
+ p = "NBOUND";
+ break;
+ case SPACE:
+ p = "SPACE";
+ break;
+ case NSPACE:
+ p = "NSPACE";
+ break;
+ case DIGIT:
+ p = "DIGIT";
+ break;
+ case NDIGIT:
+ p = "NDIGIT";
+ break;
+ case CURLY:
+ (void)sprintf(buf+strlen(buf), "CURLY {%d,%d}",
+ ARG1(op),ARG2(op));
+ p = NULL;
+ break;
+ case REF:
+ (void)sprintf(buf+strlen(buf), "REF%d", ARG1(op));
+ p = NULL;
+ break;
+ case OPEN:
+ (void)sprintf(buf+strlen(buf), "OPEN%d", ARG1(op));
+ p = NULL;
+ break;
+ case CLOSE:
+ (void)sprintf(buf+strlen(buf), "CLOSE%d", ARG1(op));
+ p = NULL;
+ break;
+ case STAR:
+ p = "STAR";
+ break;
+ case PLUS:
+ p = "PLUS";
+ break;
+ default:
+ FAIL("corrupted regexp opcode");
+ }
+ if (p != NULL)
+ (void) strcat(buf, p);
+ return(buf);
+}
+#endif /* DEBUGGING */
+
+regfree(r)
+struct regexp *r;
+{
+ if (r->precomp) {
+ Safefree(r->precomp);
+ r->precomp = Nullch;
+ }
+ if (r->subbase) {
+ Safefree(r->subbase);
+ r->subbase = Nullch;
+ }
+ if (r->regmust) {
+ str_free(r->regmust);
+ r->regmust = Nullstr;
+ }
+ if (r->regstart) {
+ str_free(r->regstart);
+ r->regstart = Nullstr;
+ }
+ Safefree(r->startp);
+ Safefree(r->endp);
+ Safefree(r);
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/regcomp.h b/MultiSource/Benchmarks/MallocBench/perl/regcomp.h
new file mode 100644
index 00000000..6eebfacb
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/regcomp.h
@@ -0,0 +1,199 @@
+/* $Header$
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:39:09 lwall
+ * 4.0 baseline.
+ *
+ */
+
+/*
+ * The "internal use only" fields in regexp.h are present to pass info from
+ * compile to execute that permits the execute phase to run lots faster on
+ * simple cases. They are:
+ *
+ * regstart str that must begin a match; Nullch if none obvious
+ * reganch is the match anchored (at beginning-of-line only)?
+ * regmust string (pointer into program) that match must include, or NULL
+ * [regmust changed to STR* for bminstr()--law]
+ * regmlen length of regmust string
+ * [regmlen not used currently]
+ *
+ * Regstart and reganch permit very fast decisions on suitable starting points
+ * for a match, cutting down the work a lot. Regmust permits fast rejection
+ * of lines that cannot possibly match. The regmust tests are costly enough
+ * that regcomp() supplies a regmust only if the r.e. contains something
+ * potentially expensive (at present, the only such thing detected is * or +
+ * at the start of the r.e., which can involve a lot of backup). Regmlen is
+ * supplied because the test in regexec() needs it and regcomp() is computing
+ * it anyway.
+ * [regmust is now supplied always. The tests that use regmust have a
+ * heuristic that disables the test if it usually matches.]
+ *
+ * [In fact, we now use regmust in many cases to locate where the search
+ * starts in the string, so if regback is >= 0, the regmust search is never
+ * wasted effort. The regback variable says how many characters back from
+ * where regmust matched is the earliest possible start of the match.
+ * For instance, /[a-z].foo/ has a regmust of 'foo' and a regback of 2.]
+ */
+
+/*
+ * Structure for regexp "program". This is essentially a linear encoding
+ * of a nondeterministic finite-state machine (aka syntax charts or
+ * "railroad normal form" in parsing technology). Each node is an opcode
+ * plus a "next" pointer, possibly plus an operand. "Next" pointers of
+ * all nodes except BRANCH implement concatenation; a "next" pointer with
+ * a BRANCH on both ends of it is connecting two alternatives. (Here we
+ * have one of the subtle syntax dependencies: an individual BRANCH (as
+ * opposed to a collection of them) is never concatenated with anything
+ * because of operator precedence.) The operand of some types of node is
+ * a literal string; for others, it is a node leading into a sub-FSM. In
+ * particular, the operand of a BRANCH node is the first node of the branch.
+ * (NB this is *not* a tree structure: the tail of the branch connects
+ * to the thing following the set of BRANCHes.) The opcodes are:
+ */
+
+/* definition number opnd? meaning */
+#define END 0 /* no End of program. */
+#define BOL 1 /* no Match "" at beginning of line. */
+#define EOL 2 /* no Match "" at end of line. */
+#define ANY 3 /* no Match any one character. */
+#define ANYOF 4 /* str Match character in (or not in) this class. */
+#define CURLY 5 /* str Match this simple thing {n,m} times. */
+#define BRANCH 6 /* node Match this alternative, or the next... */
+#define BACK 7 /* no Match "", "next" ptr points backward. */
+#define EXACTLY 8 /* str Match this string (preceded by length). */
+#define NOTHING 9 /* no Match empty string. */
+#define STAR 10 /* node Match this (simple) thing 0 or more times. */
+#define PLUS 11 /* node Match this (simple) thing 1 or more times. */
+#define ALNUM 12 /* no Match any alphanumeric character */
+#define NALNUM 13 /* no Match any non-alphanumeric character */
+#define BOUND 14 /* no Match "" at any word boundary */
+#define NBOUND 15 /* no Match "" at any word non-boundary */
+#define SPACE 16 /* no Match any whitespace character */
+#define NSPACE 17 /* no Match any non-whitespace character */
+#define DIGIT 18 /* no Match any numeric character */
+#define NDIGIT 19 /* no Match any non-numeric character */
+#define REF 20 /* num Match some already matched string */
+#define OPEN 21 /* num Mark this point in input as start of #n. */
+#define CLOSE 22 /* num Analogous to OPEN. */
+
+/*
+ * Opcode notes:
+ *
+ * BRANCH The set of branches constituting a single choice are hooked
+ * together with their "next" pointers, since precedence prevents
+ * anything being concatenated to any individual branch. The
+ * "next" pointer of the last BRANCH in a choice points to the
+ * thing following the whole choice. This is also where the
+ * final "next" pointer of each individual branch points; each
+ * branch starts with the operand node of a BRANCH node.
+ *
+ * BACK Normal "next" pointers all implicitly point forward; BACK
+ * exists to make loop structures possible.
+ *
+ * STAR,PLUS '?', and complex '*' and '+', are implemented as circular
+ * BRANCH structures using BACK. Simple cases (one character
+ * per match) are implemented with STAR and PLUS for speed
+ * and to minimize recursive plunges.
+ *
+ * OPEN,CLOSE ...are numbered at compile time.
+ */
+
+#ifndef DOINIT
+extern char regarglen[];
+#else
+char regarglen[] = {0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2};
+#endif
+
+/* The following have no fixed length. */
+#ifndef DOINIT
+extern char varies[];
+#else
+char varies[] = {BRANCH,BACK,STAR,PLUS,CURLY,REF,0};
+#endif
+
+/* The following always have a length of 1. */
+#ifndef DOINIT
+extern char simple[];
+#else
+char simple[] = {ANY,ANYOF,ALNUM,NALNUM,SPACE,NSPACE,DIGIT,NDIGIT,0};
+#endif
+
+EXT char regdummy;
+
+/*
+ * A node is one char of opcode followed by two chars of "next" pointer.
+ * "Next" pointers are stored as two 8-bit pieces, high order first. The
+ * value is a positive offset from the opcode of the node containing it.
+ * An operand, if any, simply follows the node. (Note that much of the
+ * code generation knows about this implicit relationship.)
+ *
+ * Using two bytes for the "next" pointer is vast overkill for most things,
+ * but allows patterns to get big without disasters.
+ *
+ * [If REGALIGN is defined, the "next" pointer is always aligned on an even
+ * boundary, and reads the offset directly as a short. Also, there is no
+ * special test to reverse the sign of BACK pointers since the offset is
+ * stored negative.]
+ */
+
+#ifndef gould
+#ifndef cray
+#ifndef eta10
+#define REGALIGN
+#endif
+#endif
+#endif
+
+#define OP(p) (*(p))
+
+#ifndef lint
+#ifdef REGALIGN
+#define NEXT(p) (*(short*)(p+1))
+#define ARG1(p) (*(unsigned short*)(p+3))
+#define ARG2(p) (*(unsigned short*)(p+5))
+#else
+#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
+#define ARG1(p) (((*((p)+3)&0377)<<8) + (*((p)+4)&0377))
+#define ARG2(p) (((*((p)+5)&0377)<<8) + (*((p)+6)&0377))
+#endif
+#else /* lint */
+#define NEXT(p) 0
+#endif /* lint */
+
+#define OPERAND(p) ((p) + 3)
+
+#ifdef REGALIGN
+#define NEXTOPER(p) ((p) + 4)
+#else
+#define NEXTOPER(p) ((p) + 3)
+#endif
+
+#define MAGIC 0234
+
+/*
+ * Utility definitions.
+ */
+#ifndef lint
+#ifndef CHARBITS
+#define UCHARAT(p) ((int)*(unsigned char *)(p))
+#else
+#define UCHARAT(p) ((int)*(p)&CHARBITS)
+#endif
+#else /* lint */
+#define UCHARAT(p) regdummy
+#endif /* lint */
+
+#define FAIL(m) fatal("/%s/: %s",regprecomp,m)
+
+char *regnext();
+#ifdef DEBUGGING
+void regdump();
+char *regprop();
+#endif
+
diff --git a/MultiSource/Benchmarks/MallocBench/perl/regexec.c b/MultiSource/Benchmarks/MallocBench/perl/regexec.c
new file mode 100644
index 00000000..4b34b0bf
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/regexec.c
@@ -0,0 +1,897 @@
+/* NOTE: this is derived from Henry Spencer's regexp code, and should not
+ * confused with the original package (see point 3 below). Thanks, Henry!
+ */
+
+/* Additional note: this code is very heavily munged from Henry's version
+ * in places. In some spots I've traded clarity for efficiency, so don't
+ * blame Henry for some of the lack of readability.
+ */
+
+/* $RCSfile$$Revision$$Date$
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/12 09:07:39 lwall
+ * patch1: regexec only allocated space for 9 subexpresssions
+ *
+ * Revision 4.0 91/03/20 01:39:16 lwall
+ * 4.0 baseline.
+ *
+ */
+
+/*
+ * regcomp and regexec -- regsub and regerror are not used in perl
+ *
+ * Copyright (c) 1986 by University of Toronto.
+ * Written by Henry Spencer. Not derived from licensed software.
+ *
+ * Permission is granted to anyone to use this software for any
+ * purpose on any computer system, and to redistribute it freely,
+ * subject to the following restrictions:
+ *
+ * 1. The author is not responsible for the consequences of use of
+ * this software, no matter how awful, even if they arise
+ * from defects in it.
+ *
+ * 2. The origin of this software must not be misrepresented, either
+ * by explicit claim or by omission.
+ *
+ * 3. Altered versions must be plainly marked as such, and must not
+ * be misrepresented as being the original software.
+ *
+ **** Alterations to Henry's code are...
+ ****
+ **** Copyright (c) 1989, 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.
+ *
+ * Beware that some of this code is subtly aware of the way operator
+ * precedence is structured in regular expressions. Serious changes in
+ * regular-expression syntax might require a total rethink.
+ */
+#include "EXTERN.h"
+#include "perl.h"
+#include "regcomp.h"
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+#ifdef DEBUGGING
+int regnarrate = 0;
+#endif
+
+#define isALNUM(c) (isascii(c) && (isalpha(c) || isdigit(c) || c == '_'))
+#define isSPACE(c) (isascii(c) && isspace(c))
+#define isDIGIT(c) (isascii(c) && isdigit(c))
+#define isUPPER(c) (isascii(c) && isupper(c))
+
+/*
+ * regexec and friends
+ */
+
+/*
+ * Global work variables for regexec().
+ */
+static char *regprecomp;
+static char *reginput; /* String-input pointer. */
+static char regprev; /* char before regbol, \n if none */
+static char *regbol; /* Beginning of input, for ^ check. */
+static char *regeol; /* End of input, for $ check. */
+static char **regstartp; /* Pointer to startp array. */
+static char **regendp; /* Ditto for endp. */
+static char *reglastparen; /* Similarly for lastparen. */
+static char *regtill;
+
+static int regmyp_size = 0;
+static char **regmystartp = Null(char**);
+static char **regmyendp = Null(char**);
+
+/*
+ * Forwards.
+ */
+STATIC int regtry();
+STATIC int regmatch();
+STATIC int regrepeat();
+
+extern int multiline;
+
+/*
+ - regexec - match a regexp against a string
+ */
+int
+regexec(prog, stringarg, strend, strbeg, minend, screamer, safebase)
+register regexp *prog;
+char *stringarg;
+register char *strend; /* pointer to null at end of string */
+char *strbeg; /* real beginning of string */
+int minend; /* end of match must be at least minend after stringarg */
+STR *screamer;
+int safebase; /* no need to remember string in subbase */
+{
+ register char *s;
+ register int i;
+ register char *c;
+ register char *string = stringarg;
+ register int tmp;
+ int minlen = 0; /* must match at least this many chars */
+ int dontbother = 0; /* how many characters not to try at end */
+
+ /* Be paranoid... */
+ if (prog == NULL || string == NULL) {
+ fatal("NULL regexp parameter");
+ return(0);
+ }
+
+ if (string == strbeg) /* is ^ valid at stringarg? */
+ regprev = '\n';
+ else {
+ regprev = stringarg[-1];
+ if (!multiline && regprev == '\n')
+ regprev = '\0'; /* force ^ to NOT match */
+ }
+ regprecomp = prog->precomp;
+ /* Check validity of program. */
+ if (UCHARAT(prog->program) != MAGIC) {
+ FAIL("corrupted regexp program");
+ }
+
+ if (prog->do_folding) {
+ safebase = FALSE;
+ i = strend - string;
+ New(1101,c,i+1,char);
+ (void)bcopy(string, c, i+1);
+ string = c;
+ strend = string + i;
+ for (s = string; s < strend; s++)
+ if (isUPPER(*s))
+ *s = tolower(*s);
+ }
+
+ /* If there is a "must appear" string, look for it. */
+ s = string;
+ if (prog->regmust != Nullstr &&
+ (!(prog->reganch & 1) || (multiline && prog->regback >= 0)) ) {
+ if (stringarg == strbeg && screamer) {
+ if (screamfirst[prog->regmust->str_rare] >= 0)
+ s = screaminstr(screamer,prog->regmust);
+ else
+ s = Nullch;
+ }
+#ifndef lint
+ else
+ s = fbminstr((unsigned char*)s, (unsigned char*)strend,
+ prog->regmust);
+#endif
+ if (!s) {
+ ++prog->regmust->str_u.str_useful; /* hooray */
+ goto phooey; /* not present */
+ }
+ else if (prog->regback >= 0) {
+ s -= prog->regback;
+ if (s < string)
+ s = string;
+ minlen = prog->regback + prog->regmust->str_cur;
+ }
+ else if (--prog->regmust->str_u.str_useful < 0) { /* boo */
+ str_free(prog->regmust);
+ prog->regmust = Nullstr; /* disable regmust */
+ s = string;
+ }
+ else {
+ s = string;
+ minlen = prog->regmust->str_cur;
+ }
+ }
+
+ /* Mark beginning of line for ^ . */
+ regbol = string;
+
+ /* Mark end of line for $ (and such) */
+ regeol = strend;
+
+ /* see how far we have to get to not match where we matched before */
+ regtill = string+minend;
+
+ /* Allocate our backreference arrays */
+ if ( regmyp_size < prog->nparens + 1 ) {
+ /* Allocate or enlarge the arrays */
+ regmyp_size = prog->nparens + 1;
+ if ( regmyp_size < 10 ) regmyp_size = 10; /* minimum */
+ if ( regmystartp ) {
+ /* reallocate larger */
+ Renew(regmystartp,regmyp_size,char*);
+ Renew(regmyendp, regmyp_size,char*);
+ }
+ else {
+ /* Initial allocation */
+ New(1102,regmystartp,regmyp_size,char*);
+ New(1102,regmyendp, regmyp_size,char*);
+ }
+
+ }
+
+ /* Simplest case: anchored match need be tried only once. */
+ /* [unless multiline is set] */
+ if (prog->reganch & 1) {
+ if (regtry(prog, string))
+ goto got_it;
+ else if (multiline) {
+ if (minlen)
+ dontbother = minlen - 1;
+ strend -= dontbother;
+ /* for multiline we only have to try after newlines */
+ if (s > string)
+ s--;
+ while (s < strend) {
+ if (*s++ == '\n') {
+ if (s < strend && regtry(prog, s))
+ goto got_it;
+ }
+ }
+ }
+ goto phooey;
+ }
+
+ /* Messy cases: unanchored match. */
+ if (prog->regstart) {
+ if (prog->reganch & 2) { /* we have /x+whatever/ */
+ /* it must be a one character string */
+ i = prog->regstart->str_ptr[0];
+ while (s < strend) {
+ if (*s == i) {
+ if (regtry(prog, s))
+ goto got_it;
+ s++;
+ while (s < strend && *s == i)
+ s++;
+ }
+ s++;
+ }
+ }
+ else if (prog->regstart->str_pok == 3) {
+ /* We know what string it must start with. */
+#ifndef lint
+ while ((s = fbminstr((unsigned char*)s,
+ (unsigned char*)strend, prog->regstart)) != NULL)
+#else
+ while (s = Nullch)
+#endif
+ {
+ if (regtry(prog, s))
+ goto got_it;
+ s++;
+ }
+ }
+ else {
+ c = prog->regstart->str_ptr;
+ while ((s = ninstr(s, strend,
+ c, c + prog->regstart->str_cur )) != NULL) {
+ if (regtry(prog, s))
+ goto got_it;
+ s++;
+ }
+ }
+ goto phooey;
+ }
+ if (c = prog->regstclass) {
+ int doevery = (prog->reganch & 2) == 0;
+
+ if (minlen)
+ dontbother = minlen - 1;
+ strend -= dontbother; /* don't bother with what can't match */
+ tmp = 1;
+ /* We know what class it must start with. */
+ switch (OP(c)) {
+ case ANYOF:
+ c = OPERAND(c);
+ while (s < strend) {
+ i = UCHARAT(s);
+ if (!(c[i >> 3] & (1 << (i&7)))) {
+ if (tmp && regtry(prog, s))
+ goto got_it;
+ else
+ tmp = doevery;
+ }
+ else
+ tmp = 1;
+ s++;
+ }
+ break;
+ case BOUND:
+ if (minlen)
+ dontbother++,strend--;
+ if (s != string) {
+ i = s[-1];
+ tmp = isALNUM(i);
+ }
+ else
+ tmp = isALNUM(regprev); /* assume not alphanumeric */
+ while (s < strend) {
+ i = *s;
+ if (tmp != isALNUM(i)) {
+ tmp = !tmp;
+ if (regtry(prog, s))
+ goto got_it;
+ }
+ s++;
+ }
+ if ((minlen || tmp) && regtry(prog,s))
+ goto got_it;
+ break;
+ case NBOUND:
+ if (minlen)
+ dontbother++,strend--;
+ if (s != string) {
+ i = s[-1];
+ tmp = isALNUM(i);
+ }
+ else
+ tmp = isALNUM(regprev); /* assume not alphanumeric */
+ while (s < strend) {
+ i = *s;
+ if (tmp != isALNUM(i))
+ tmp = !tmp;
+ else if (regtry(prog, s))
+ goto got_it;
+ s++;
+ }
+ if ((minlen || !tmp) && regtry(prog,s))
+ goto got_it;
+ break;
+ case ALNUM:
+ while (s < strend) {
+ i = *s;
+ if (isALNUM(i)) {
+ if (tmp && regtry(prog, s))
+ goto got_it;
+ else
+ tmp = doevery;
+ }
+ else
+ tmp = 1;
+ s++;
+ }
+ break;
+ case NALNUM:
+ while (s < strend) {
+ i = *s;
+ if (!isALNUM(i)) {
+ if (tmp && regtry(prog, s))
+ goto got_it;
+ else
+ tmp = doevery;
+ }
+ else
+ tmp = 1;
+ s++;
+ }
+ break;
+ case SPACE:
+ while (s < strend) {
+ if (isSPACE(*s)) {
+ if (tmp && regtry(prog, s))
+ goto got_it;
+ else
+ tmp = doevery;
+ }
+ else
+ tmp = 1;
+ s++;
+ }
+ break;
+ case NSPACE:
+ while (s < strend) {
+ if (!isSPACE(*s)) {
+ if (tmp && regtry(prog, s))
+ goto got_it;
+ else
+ tmp = doevery;
+ }
+ else
+ tmp = 1;
+ s++;
+ }
+ break;
+ case DIGIT:
+ while (s < strend) {
+ if (isDIGIT(*s)) {
+ if (tmp && regtry(prog, s))
+ goto got_it;
+ else
+ tmp = doevery;
+ }
+ else
+ tmp = 1;
+ s++;
+ }
+ break;
+ case NDIGIT:
+ while (s < strend) {
+ if (!isDIGIT(*s)) {
+ if (tmp && regtry(prog, s))
+ goto got_it;
+ else
+ tmp = doevery;
+ }
+ else
+ tmp = 1;
+ s++;
+ }
+ break;
+ }
+ }
+ else {
+ if (minlen)
+ dontbother = minlen - 1;
+ strend -= dontbother;
+ /* We don't know much -- general case. */
+ do {
+ if (regtry(prog, s))
+ goto got_it;
+ } while (s++ < strend);
+ }
+
+ /* Failure. */
+ goto phooey;
+
+ got_it:
+ if ((!safebase && (prog->nparens || sawampersand)) || prog->do_folding){
+ strend += dontbother; /* uncheat */
+ if (safebase) /* no need for $digit later */
+ s = strbeg;
+ else if (strbeg != prog->subbase) {
+ i = strend - string + (stringarg - strbeg);
+ s = nsavestr(strbeg,i); /* so $digit will work later */
+ if (prog->subbase)
+ Safefree(prog->subbase);
+ prog->subbase = s;
+ prog->subend = s+i;
+ }
+ else
+ s = prog->subbase;
+ s += (stringarg - strbeg);
+ for (i = 0; i <= prog->nparens; i++) {
+ if (prog->endp[i]) {
+ prog->startp[i] = s + (prog->startp[i] - string);
+ prog->endp[i] = s + (prog->endp[i] - string);
+ }
+ }
+ if (prog->do_folding)
+ Safefree(string);
+ }
+ return(1);
+
+ phooey:
+ if (prog->do_folding)
+ Safefree(string);
+ return(0);
+}
+
+/*
+ - regtry - try match at specific point
+ */
+static int /* 0 failure, 1 success */
+regtry(prog, string)
+regexp *prog;
+char *string;
+{
+ register int i;
+ register char **sp;
+ register char **ep;
+
+ reginput = string;
+ regstartp = prog->startp;
+ regendp = prog->endp;
+ reglastparen = &prog->lastparen;
+ prog->lastparen = 0;
+
+ sp = prog->startp;
+ ep = prog->endp;
+ if (prog->nparens) {
+ for (i = prog->nparens; i >= 0; i--) {
+ *sp++ = NULL;
+ *ep++ = NULL;
+ }
+ }
+ if (regmatch(prog->program + 1) && reginput >= regtill) {
+ prog->startp[0] = string;
+ prog->endp[0] = reginput;
+ return(1);
+ } else
+ return(0);
+}
+
+/*
+ - regmatch - main matching routine
+ *
+ * Conceptually the strategy is simple: check to see whether the current
+ * node matches, call self recursively to see whether the rest matches,
+ * and then act accordingly. In practice we make some effort to avoid
+ * recursion, in particular by going through "ordinary" nodes (that don't
+ * need to know whether the rest of the match failed) by a loop instead of
+ * by recursion.
+ */
+/* [lwall] I've hoisted the register declarations to the outer block in order to
+ * maybe save a little bit of pushing and popping on the stack. It also takes
+ * advantage of machines that use a register save mask on subroutine entry.
+ */
+static int /* 0 failure, 1 success */
+regmatch(prog)
+char *prog;
+{
+ register char *scan; /* Current node. */
+ char *next; /* Next node. */
+ register int nextchar;
+ register int n; /* no or next */
+ register int ln; /* len or last */
+ register char *s; /* operand or save */
+ register char *locinput = reginput;
+
+ nextchar = *locinput;
+ scan = prog;
+#ifdef DEBUGGING
+ if (scan != NULL && regnarrate)
+ fprintf(stderr, "%s(\n", regprop(scan));
+#endif
+ while (scan != NULL) {
+#ifdef DEBUGGING
+ if (regnarrate)
+ fprintf(stderr, "%s...\n", regprop(scan));
+#endif
+
+#ifdef REGALIGN
+ next = scan + NEXT(scan);
+ if (next == scan)
+ next = NULL;
+#else
+ next = regnext(scan);
+#endif
+
+ switch (OP(scan)) {
+ case BOL:
+ if (locinput == regbol ? regprev == '\n' :
+ ((nextchar || locinput < regeol) &&
+ locinput[-1] == '\n') )
+ {
+ /* regtill = regbol; */
+ break;
+ }
+ return(0);
+ case EOL:
+ if ((nextchar || locinput < regeol) && nextchar != '\n')
+ return(0);
+ if (!multiline && regeol - locinput > 1)
+ return 0;
+ /* regtill = regbol; */
+ break;
+ case ANY:
+ if ((nextchar == '\0' && locinput >= regeol) ||
+ nextchar == '\n')
+ return(0);
+ nextchar = *++locinput;
+ break;
+ case EXACTLY:
+ s = OPERAND(scan);
+ ln = *s++;
+ /* Inline the first character, for speed. */
+ if (*s != nextchar)
+ return(0);
+ if (regeol - locinput < ln)
+ return 0;
+ if (ln > 1 && bcmp(s, locinput, ln) != 0)
+ return(0);
+ locinput += ln;
+ nextchar = *locinput;
+ break;
+ case ANYOF:
+ s = OPERAND(scan);
+ if (nextchar < 0)
+ nextchar = UCHARAT(locinput);
+ if (s[nextchar >> 3] & (1 << (nextchar&7)))
+ return(0);
+ if (!nextchar && locinput >= regeol)
+ return 0;
+ nextchar = *++locinput;
+ break;
+ case ALNUM:
+ if (!nextchar)
+ return(0);
+ if (!isALNUM(nextchar))
+ return(0);
+ nextchar = *++locinput;
+ break;
+ case NALNUM:
+ if (!nextchar && locinput >= regeol)
+ return(0);
+ if (isALNUM(nextchar))
+ return(0);
+ nextchar = *++locinput;
+ break;
+ case NBOUND:
+ case BOUND:
+ if (locinput == regbol) /* was last char in word? */
+ ln = isALNUM(regprev);
+ else
+ ln = isALNUM(locinput[-1]);
+ n = isALNUM(nextchar); /* is next char in word? */
+ if ((ln == n) == (OP(scan) == BOUND))
+ return(0);
+ break;
+ case SPACE:
+ if (!nextchar && locinput >= regeol)
+ return(0);
+ if (!isSPACE(nextchar))
+ return(0);
+ nextchar = *++locinput;
+ break;
+ case NSPACE:
+ if (!nextchar)
+ return(0);
+ if (isSPACE(nextchar))
+ return(0);
+ nextchar = *++locinput;
+ break;
+ case DIGIT:
+ if (!isDIGIT(nextchar))
+ return(0);
+ nextchar = *++locinput;
+ break;
+ case NDIGIT:
+ if (!nextchar && locinput >= regeol)
+ return(0);
+ if (isDIGIT(nextchar))
+ return(0);
+ nextchar = *++locinput;
+ break;
+ case REF:
+ n = ARG1(scan); /* which paren pair */
+ s = regmystartp[n];
+ if (!s)
+ return(0);
+ if (!regmyendp[n])
+ return(0);
+ if (s == regmyendp[n])
+ break;
+ /* Inline the first character, for speed. */
+ if (*s != nextchar)
+ return(0);
+ ln = regmyendp[n] - s;
+ if (locinput + ln > regeol)
+ return 0;
+ if (ln > 1 && bcmp(s, locinput, ln) != 0)
+ return(0);
+ locinput += ln;
+ nextchar = *locinput;
+ break;
+
+ case NOTHING:
+ break;
+ case BACK:
+ break;
+ case OPEN:
+ n = ARG1(scan); /* which paren pair */
+ reginput = locinput;
+
+ regmystartp[n] = locinput; /* for REF */
+ if (regmatch(next)) {
+ /*
+ * Don't set startp if some later
+ * invocation of the same parentheses
+ * already has.
+ */
+ if (regstartp[n] == NULL)
+ regstartp[n] = locinput;
+ return(1);
+ } else
+ return(0);
+ /* NOTREACHED */
+ case CLOSE: {
+ n = ARG1(scan); /* which paren pair */
+ reginput = locinput;
+
+ regmyendp[n] = locinput; /* for REF */
+ if (regmatch(next)) {
+ /*
+ * Don't set endp if some later
+ * invocation of the same parentheses
+ * already has.
+ */
+ if (regendp[n] == NULL) {
+ regendp[n] = locinput;
+ if (n > *reglastparen)
+ *reglastparen = n;
+ }
+ return(1);
+ } else
+ return(0);
+ }
+ /*NOTREACHED*/
+ case BRANCH: {
+ if (OP(next) != BRANCH) /* No choice. */
+ next = NEXTOPER(scan); /* Avoid recursion. */
+ else {
+ do {
+ reginput = locinput;
+ if (regmatch(NEXTOPER(scan)))
+ return(1);
+#ifdef REGALIGN
+ if (n = NEXT(scan))
+ scan += n;
+ else
+ scan = NULL;
+#else
+ scan = regnext(scan);
+#endif
+ } while (scan != NULL && OP(scan) == BRANCH);
+ return(0);
+ /* NOTREACHED */
+ }
+ }
+ break;
+ case CURLY:
+ ln = ARG1(scan); /* min to match */
+ n = ARG2(scan); /* max to match */
+ scan = NEXTOPER(scan) + 4;
+ goto repeat;
+ case STAR:
+ ln = 0;
+ n = 0;
+ scan = NEXTOPER(scan);
+ goto repeat;
+ case PLUS:
+ /*
+ * Lookahead to avoid useless match attempts
+ * when we know what character comes next.
+ */
+ ln = 1;
+ n = 0;
+ scan = NEXTOPER(scan);
+ repeat:
+ if (OP(next) == EXACTLY)
+ nextchar = *(OPERAND(next)+1);
+ else
+ nextchar = -1000;
+ reginput = locinput;
+ n = regrepeat(scan, n);
+ if (!multiline && OP(next) == EOL && ln < n)
+ ln = n; /* why back off? */
+ while (n >= ln) {
+ /* If it could work, try it. */
+ if (nextchar == -1000 || *reginput == nextchar)
+ if (regmatch(next))
+ return(1);
+ /* Couldn't or didn't -- back up. */
+ n--;
+ reginput = locinput + n;
+ }
+ return(0);
+ case END:
+ reginput = locinput; /* put where regtry can find it */
+ return(1); /* Success! */
+ default:
+ printf("%x %d\n",scan,scan[1]);
+ FAIL("regexp memory corruption");
+ }
+
+ scan = next;
+ }
+
+ /*
+ * We get here only if there's trouble -- normally "case END" is
+ * the terminating point.
+ */
+ FAIL("corrupted regexp pointers");
+ /*NOTREACHED*/
+#ifdef lint
+ return 0;
+#endif
+}
+
+/*
+ - regrepeat - repeatedly match something simple, report how many
+ */
+/*
+ * [This routine now assumes that it will only match on things of length 1.
+ * That was true before, but now we assume scan - reginput is the count,
+ * rather than incrementing count on every character.]
+ */
+static int
+regrepeat(p, max)
+char *p;
+int max;
+{
+ register char *scan;
+ register char *opnd;
+ register int c;
+ register char *loceol = regeol;
+
+ scan = reginput;
+ if (max && max < loceol - scan)
+ loceol = scan + max;
+ opnd = OPERAND(p);
+ switch (OP(p)) {
+ case ANY:
+ while (scan < loceol && *scan != '\n')
+ scan++;
+ break;
+ case EXACTLY: /* length of string is 1 */
+ opnd++;
+ while (scan < loceol && *opnd == *scan)
+ scan++;
+ break;
+ case ANYOF:
+ c = UCHARAT(scan);
+ while (scan < loceol && !(opnd[c >> 3] & (1 << (c & 7)))) {
+ scan++;
+ c = UCHARAT(scan);
+ }
+ break;
+ case ALNUM:
+ while (scan < loceol && isALNUM(*scan))
+ scan++;
+ break;
+ case NALNUM:
+ while (scan < loceol && !isALNUM(*scan))
+ scan++;
+ break;
+ case SPACE:
+ while (scan < loceol && isSPACE(*scan))
+ scan++;
+ break;
+ case NSPACE:
+ while (scan < loceol && !isSPACE(*scan))
+ scan++;
+ break;
+ case DIGIT:
+ while (scan < loceol && isDIGIT(*scan))
+ scan++;
+ break;
+ case NDIGIT:
+ while (scan < loceol && !isDIGIT(*scan))
+ scan++;
+ break;
+ default: /* Oh dear. Called inappropriately. */
+ FAIL("internal regexp foulup");
+ /* NOTREACHED */
+ }
+
+ c = scan - reginput;
+ reginput = scan;
+
+ return(c);
+}
+
+/*
+ - regnext - dig the "next" pointer out of a node
+ *
+ * [Note, when REGALIGN is defined there are two places in regmatch()
+ * that bypass this code for speed.]
+ */
+char *
+regnext(p)
+register char *p;
+{
+ register int offset;
+
+ if (p == &regdummy)
+ return(NULL);
+
+ offset = NEXT(p);
+ if (offset == 0)
+ return(NULL);
+
+#ifdef REGALIGN
+ return(p+offset);
+#else
+ if (OP(p) == BACK)
+ return(p-offset);
+ else
+ return(p+offset);
+#endif
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/regexp.h b/MultiSource/Benchmarks/MallocBench/perl/regexp.h
new file mode 100644
index 00000000..fa2ba831
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/regexp.h
@@ -0,0 +1,39 @@
+/*
+ * Definitions etc. for regexp(3) routines.
+ *
+ * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof],
+ * not the System V one.
+ */
+
+/* $Header$
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:39:23 lwall
+ * 4.0 baseline.
+ *
+ */
+
+typedef struct regexp {
+ char **startp;
+ char **endp;
+ STR *regstart; /* Internal use only. */
+ char *regstclass;
+ STR *regmust; /* Internal use only. */
+ int regback; /* Can regmust locate first try? */
+ char *precomp; /* pre-compilation regular expression */
+ char *subbase; /* saved string so \digit works forever */
+ char *subend; /* end of subbase */
+ char reganch; /* Internal use only. */
+ char do_folding; /* do case-insensitive match? */
+ char lastparen; /* last paren matched */
+ char nparens; /* number of parentheses */
+ char program[1]; /* Unwarranted chumminess with compiler. */
+} regexp;
+
+regexp *regcomp();
+int regexec();
diff --git a/MultiSource/Benchmarks/MallocBench/perl/spat.h b/MultiSource/Benchmarks/MallocBench/perl/spat.h
new file mode 100644
index 00000000..7c83b40f
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/spat.h
@@ -0,0 +1,43 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:39:36 lwall
+ * 4.0 baseline.
+ *
+ */
+
+struct scanpat {
+ SPAT *spat_next; /* list of all scanpats */
+ REGEXP *spat_regexp; /* compiled expression */
+ ARG *spat_repl; /* replacement string for subst */
+ ARG *spat_runtime; /* compile pattern at runtime */
+ STR *spat_short; /* for a fast bypass of execute() */
+ bool spat_flags;
+ char spat_slen;
+};
+
+#define SPAT_USED 1 /* spat has been used once already */
+#define SPAT_ONCE 2 /* use pattern only once per reset */
+#define SPAT_SCANFIRST 4 /* initial constant not anchored */
+#define SPAT_ALL 8 /* initial constant is whole pat */
+#define SPAT_SKIPWHITE 16 /* skip leading whitespace for split */
+#define SPAT_FOLD 32 /* case insensitivity */
+#define SPAT_CONST 64 /* subst replacement is constant */
+#define SPAT_KEEP 128 /* keep 1st runtime pattern forever */
+
+EXT SPAT *curspat; /* what to do \ interps from */
+EXT SPAT *lastspat; /* what to use in place of null pattern */
+
+EXT char *hint INIT(Nullch); /* hint from cmd_exec to do_match et al */
+
+#define Nullspat Null(SPAT*)
diff --git a/MultiSource/Benchmarks/MallocBench/perl/stab.c b/MultiSource/Benchmarks/MallocBench/perl/stab.c
new file mode 100644
index 00000000..f65f6469
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/stab.c
@@ -0,0 +1,890 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/12 09:10:24 lwall
+ * patch1: Configure now differentiates getgroups() type from getgid() type
+ * patch1: you may now use "die" and "caller" in a signal handler
+ *
+ * Revision 4.0 91/03/20 01:39:41 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
+#include <signal.h>
+#endif
+
+static char *sig_name[] = {
+ SIG_NAME,0
+};
+
+#ifdef VOIDSIG
+#define handlertype void
+#else
+#define handlertype int
+#endif
+
+static handlertype sighandler();
+
+static int origalen = 0;
+
+STR *
+stab_str(str)
+STR *str;
+{
+ STAB *stab = str->str_u.str_stab;
+ register int paren;
+ register char *s;
+ register int i;
+
+ if (str->str_rare)
+ return stab_val(stab);
+
+ switch (*stab->str_magic->str_ptr) {
+ case '\004': /* ^D */
+#ifdef DEBUGGING
+ str_numset(stab_val(stab),(double)(debug & 32767));
+#endif
+ break;
+ case '\t': /* ^I */
+ if (inplace)
+ str_set(stab_val(stab), inplace);
+ else
+ str_sset(stab_val(stab),&str_undef);
+ break;
+ case '\024': /* ^T */
+ str_numset(stab_val(stab),(double)basetime);
+ break;
+ case '\027': /* ^W */
+ str_numset(stab_val(stab),(double)dowarn);
+ break;
+ case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9': case '&':
+ if (curspat) {
+ paren = atoi(stab_name(stab));
+ getparen:
+ if (curspat->spat_regexp &&
+ paren <= curspat->spat_regexp->nparens &&
+ (s = curspat->spat_regexp->startp[paren]) ) {
+ i = curspat->spat_regexp->endp[paren] - s;
+ if (i >= 0)
+ str_nset(stab_val(stab),s,i);
+ else
+ str_sset(stab_val(stab),&str_undef);
+ }
+ else
+ str_sset(stab_val(stab),&str_undef);
+ }
+ break;
+ case '+':
+ if (curspat) {
+ paren = curspat->spat_regexp->lastparen;
+ goto getparen;
+ }
+ break;
+ case '`':
+ if (curspat) {
+ if (curspat->spat_regexp &&
+ (s = curspat->spat_regexp->subbase) ) {
+ i = curspat->spat_regexp->startp[0] - s;
+ if (i >= 0)
+ str_nset(stab_val(stab),s,i);
+ else
+ str_nset(stab_val(stab),"",0);
+ }
+ else
+ str_nset(stab_val(stab),"",0);
+ }
+ break;
+ case '\'':
+ if (curspat) {
+ if (curspat->spat_regexp &&
+ (s = curspat->spat_regexp->endp[0]) ) {
+ str_nset(stab_val(stab),s, curspat->spat_regexp->subend - s);
+ }
+ else
+ str_nset(stab_val(stab),"",0);
+ }
+ break;
+ case '.':
+#ifndef lint
+ if (last_in_stab) {
+ str_numset(stab_val(stab),(double)stab_io(last_in_stab)->lines);
+ }
+#endif
+ break;
+ case '?':
+ str_numset(stab_val(stab),(double)statusvalue);
+ break;
+ case '^':
+ s = stab_io(curoutstab)->top_name;
+ str_set(stab_val(stab),s);
+ break;
+ case '~':
+ s = stab_io(curoutstab)->fmt_name;
+ str_set(stab_val(stab),s);
+ break;
+#ifndef lint
+ case '=':
+ str_numset(stab_val(stab),(double)stab_io(curoutstab)->page_len);
+ break;
+ case '-':
+ str_numset(stab_val(stab),(double)stab_io(curoutstab)->lines_left);
+ break;
+ case '%':
+ str_numset(stab_val(stab),(double)stab_io(curoutstab)->page);
+ break;
+#endif
+ case '/':
+ break;
+ case '[':
+ str_numset(stab_val(stab),(double)arybase);
+ break;
+ case '|':
+ if (!stab_io(curoutstab))
+ stab_io(curoutstab) = stio_new();
+ str_numset(stab_val(stab),
+ (double)((stab_io(curoutstab)->flags & IOF_FLUSH) != 0) );
+ break;
+ case ',':
+ str_nset(stab_val(stab),ofs,ofslen);
+ break;
+ case '\\':
+ str_nset(stab_val(stab),ors,orslen);
+ break;
+ case '#':
+ str_set(stab_val(stab),ofmt);
+ break;
+ case '!':
+ str_numset(stab_val(stab), (double)errno);
+ str_set(stab_val(stab), errno ? strerror(errno) : "");
+ stab_val(stab)->str_nok = 1; /* what a wonderful hack! */
+ break;
+ case '<':
+ str_numset(stab_val(stab),(double)uid);
+ break;
+ case '>':
+ str_numset(stab_val(stab),(double)euid);
+ break;
+ case '(':
+ s = buf;
+ (void)sprintf(s,"%d",(int)gid);
+ goto add_groups;
+ case ')':
+ s = buf;
+ (void)sprintf(s,"%d",(int)egid);
+ add_groups:
+ while (*s) s++;
+#ifdef HAS_GETGROUPS
+#ifndef NGROUPS
+#define NGROUPS 32
+#endif
+ {
+ GROUPSTYPE gary[NGROUPS];
+
+ i = getgroups(NGROUPS,gary);
+ while (--i >= 0) {
+ (void)sprintf(s," %ld", (long)gary[i]);
+ while (*s) s++;
+ }
+ }
+#endif
+ str_set(stab_val(stab),buf);
+ break;
+ case '*':
+ break;
+ case '0':
+ break;
+ default:
+ {
+ struct ufuncs *uf = (struct ufuncs *)str->str_ptr;
+
+ if (uf && uf->uf_val)
+ (*uf->uf_val)(uf->uf_index, stab_val(stab));
+ }
+ break;
+ }
+ return stab_val(stab);
+}
+
+stabset(mstr,str)
+register STR *mstr;
+STR *str;
+{
+ STAB *stab = mstr->str_u.str_stab;
+ register char *s;
+ int i;
+
+ switch (mstr->str_rare) {
+ case 'E':
+ my_setenv(mstr->str_ptr,str_get(str));
+ /* And you'll never guess what the dog had */
+ /* in its mouth... */
+#ifdef TAINT
+ if (strEQ(mstr->str_ptr,"PATH")) {
+ char *strend = str->str_ptr + str->str_cur;
+
+ s = str->str_ptr;
+ while (s < strend) {
+ s = cpytill(tokenbuf,s,strend,':',&i);
+ s++;
+ if (*tokenbuf != '/'
+ || (stat(tokenbuf,&statbuf) && (statbuf.st_mode & 2)) )
+ str->str_tainted = 2;
+ }
+ }
+#endif
+ break;
+ case 'S':
+ s = str_get(str);
+ i = whichsig(mstr->str_ptr); /* ...no, a brick */
+ if (strEQ(s,"IGNORE"))
+#ifndef lint
+ (void)signal(i,SIG_IGN);
+#else
+ ;
+#endif
+ else if (strEQ(s,"DEFAULT") || !*s)
+ (void)signal(i,SIG_DFL);
+ else {
+ (void)signal(i,sighandler);
+ if (!index(s,'\'')) {
+ sprintf(tokenbuf, "main'%s",s);
+ str_set(str,tokenbuf);
+ }
+ }
+ break;
+#ifdef SOME_DBM
+ case 'D':
+ hdbmstore(stab_hash(stab),mstr->str_ptr,mstr->str_cur,str);
+ break;
+#endif
+ case 'L':
+ {
+ CMD *cmd;
+
+ i = str_true(str);
+ str = afetch(stab_xarray(stab),atoi(mstr->str_ptr), FALSE);
+ cmd = str->str_magic->str_u.str_cmd;
+ cmd->c_flags &= ~CF_OPTIMIZE;
+ cmd->c_flags |= i? CFT_D1 : CFT_D0;
+ }
+ break;
+ case '#':
+ afill(stab_array(stab), (int)str_gnum(str) - arybase);
+ break;
+ case 'X': /* merely a copy of a * string */
+ break;
+ case '*':
+ s = str_get(str);
+ if (strNE(s,"StB") || str->str_cur != sizeof(STBP)) {
+ if (!*s) {
+ STBP *stbp;
+
+ (void)savenostab(stab); /* schedule a free of this stab */
+ if (stab->str_len)
+ Safefree(stab->str_ptr);
+ Newz(601,stbp, 1, STBP);
+ stab->str_ptr = stbp;
+ stab->str_len = stab->str_cur = sizeof(STBP);
+ stab->str_pok = 1;
+ strcpy(stab_magic(stab),"StB");
+ stab_val(stab) = Str_new(70,0);
+ stab_line(stab) = curcmd->c_line;
+ stab_stash(stab) = curcmd->c_stash;
+ }
+ else {
+ stab = stabent(s,TRUE);
+ if (!stab_xarray(stab))
+ aadd(stab);
+ if (!stab_xhash(stab))
+ hadd(stab);
+ if (!stab_io(stab))
+ stab_io(stab) = stio_new();
+ }
+ str_sset(str,stab);
+ }
+ break;
+ case 's': {
+ struct lstring *lstr = (struct lstring*)str;
+ char *tmps;
+
+ mstr->str_rare = 0;
+ str->str_magic = Nullstr;
+ tmps = str_get(str);
+ str_insert(mstr,lstr->lstr_offset,lstr->lstr_len,
+ tmps,str->str_cur);
+ }
+ break;
+
+ case 'v':
+ do_vecset(mstr,str);
+ break;
+
+ case 0:
+ switch (*stab->str_magic->str_ptr) {
+ case '\004': /* ^D */
+#ifdef DEBUGGING
+ debug = (int)(str_gnum(str)) | 32768;
+#endif
+ break;
+ case '\t': /* ^I */
+ if (inplace)
+ Safefree(inplace);
+ if (str->str_pok || str->str_nok)
+ inplace = savestr(str_get(str));
+ else
+ inplace = Nullch;
+ break;
+ case '\024': /* ^T */
+ basetime = (long)str_gnum(str);
+ break;
+ case '\027': /* ^W */
+ dowarn = (bool)str_gnum(str);
+ break;
+ case '.':
+ if (localizing)
+ savesptr((STR**)&last_in_stab);
+ break;
+ case '^':
+ Safefree(stab_io(curoutstab)->top_name);
+ stab_io(curoutstab)->top_name = s = savestr(str_get(str));
+ stab_io(curoutstab)->top_stab = stabent(s,TRUE);
+ break;
+ case '~':
+ Safefree(stab_io(curoutstab)->fmt_name);
+ stab_io(curoutstab)->fmt_name = s = savestr(str_get(str));
+ stab_io(curoutstab)->fmt_stab = stabent(s,TRUE);
+ break;
+ case '=':
+ stab_io(curoutstab)->page_len = (long)str_gnum(str);
+ break;
+ case '-':
+ stab_io(curoutstab)->lines_left = (long)str_gnum(str);
+ if (stab_io(curoutstab)->lines_left < 0L)
+ stab_io(curoutstab)->lines_left = 0L;
+ break;
+ case '%':
+ stab_io(curoutstab)->page = (long)str_gnum(str);
+ break;
+ case '|':
+ if (!stab_io(curoutstab))
+ stab_io(curoutstab) = stio_new();
+ stab_io(curoutstab)->flags &= ~IOF_FLUSH;
+ if (str_gnum(str) != 0.0) {
+ stab_io(curoutstab)->flags |= IOF_FLUSH;
+ }
+ break;
+ case '*':
+ i = (int)str_gnum(str);
+ multiline = (i != 0);
+ break;
+ case '/':
+ if (str->str_pok) {
+ rs = str_get(str);
+ rslen = str->str_cur;
+ if (!rslen) {
+ rs = "\n\n";
+ rslen = 2;
+ }
+ rschar = rs[rslen - 1];
+ }
+ else {
+ rschar = 0777; /* fake a non-existent char */
+ rslen = 1;
+ }
+ break;
+ case '\\':
+ if (ors)
+ Safefree(ors);
+ ors = savestr(str_get(str));
+ orslen = str->str_cur;
+ break;
+ case ',':
+ if (ofs)
+ Safefree(ofs);
+ ofs = savestr(str_get(str));
+ ofslen = str->str_cur;
+ break;
+ case '#':
+ if (ofmt)
+ Safefree(ofmt);
+ ofmt = savestr(str_get(str));
+ break;
+ case '[':
+ arybase = (int)str_gnum(str);
+ break;
+ case '?':
+ statusvalue = U_S(str_gnum(str));
+ break;
+ case '!':
+ errno = (int)str_gnum(str); /* will anyone ever use this? */
+ break;
+ case '<':
+ uid = (int)str_gnum(str);
+#ifdef HAS_SETREUID
+ if (delaymagic) {
+ delaymagic |= DM_REUID;
+ break; /* don't do magic till later */
+ }
+#endif /* HAS_SETREUID */
+#ifdef HAS_SETRUID
+ if (setruid((UIDTYPE)uid) < 0)
+ uid = (int)getuid();
+#else
+#ifdef HAS_SETREUID
+ if (setreuid((UIDTYPE)uid, (UIDTYPE)-1) < 0)
+ uid = (int)getuid();
+#else
+ if (uid == euid) /* special case $< = $> */
+ setuid(uid);
+ else
+ fatal("setruid() not implemented");
+#endif
+#endif
+ break;
+ case '>':
+ euid = (int)str_gnum(str);
+#ifdef HAS_SETREUID
+ if (delaymagic) {
+ delaymagic |= DM_REUID;
+ break; /* don't do magic till later */
+ }
+#endif /* HAS_SETREUID */
+#ifdef HAS_SETEUID
+ if (seteuid((UIDTYPE)euid) < 0)
+ euid = (int)geteuid();
+#else
+#ifdef HAS_SETREUID
+ if (setreuid((UIDTYPE)-1, (UIDTYPE)euid) < 0)
+ euid = (int)geteuid();
+#else
+ if (euid == uid) /* special case $> = $< */
+ setuid(euid);
+ else
+ fatal("seteuid() not implemented");
+#endif
+#endif
+ break;
+ case '(':
+ gid = (int)str_gnum(str);
+#ifdef HAS_SETREGID
+ if (delaymagic) {
+ delaymagic |= DM_REGID;
+ break; /* don't do magic till later */
+ }
+#endif /* HAS_SETREGID */
+#ifdef HAS_SETRGID
+ (void)setrgid((GIDTYPE)gid);
+#else
+#ifdef HAS_SETREGID
+ (void)setregid((GIDTYPE)gid, (GIDTYPE)-1);
+#else
+ fatal("setrgid() not implemented");
+#endif
+#endif
+ break;
+ case ')':
+ egid = (int)str_gnum(str);
+#ifdef HAS_SETREGID
+ if (delaymagic) {
+ delaymagic |= DM_REGID;
+ break; /* don't do magic till later */
+ }
+#endif /* HAS_SETREGID */
+#ifdef HAS_SETEGID
+ (void)setegid((GIDTYPE)egid);
+#else
+#ifdef HAS_SETREGID
+ (void)setregid((GIDTYPE)-1, (GIDTYPE)egid);
+#else
+ fatal("setegid() not implemented");
+#endif
+#endif
+ break;
+ case ':':
+ chopset = str_get(str);
+ break;
+ case '0':
+ if (!origalen) {
+ s = origargv[0];
+ s += strlen(s);
+ /* See if all the arguments are contiguous in memory */
+ for (i = 1; i < origargc; i++) {
+ if (origargv[i] == s + 1)
+ s += strlen(++s); /* this one is ok too */
+ }
+ if (origenviron[0] == s + 1) { /* can grab env area too? */
+ my_setenv("NoNeSuCh", Nullch); /* force copy of environment */
+ for (i = 0; origenviron[i]; i++)
+ if (origenviron[i] == s + 1)
+ s += strlen(++s);
+ }
+ origalen = s - origargv[0];
+ }
+ s = str_get(str);
+ i = str->str_cur;
+ if (i >= origalen) {
+ i = origalen;
+ str->str_cur = i;
+ str->str_ptr[i] = '\0';
+ bcopy(s, origargv[0], i);
+ }
+ else {
+ bcopy(s, origargv[0], i);
+ s = origargv[0]+i;
+ *s++ = '\0';
+ while (++i < origalen)
+ *s++ = ' ';
+ }
+ break;
+ default:
+ {
+ struct ufuncs *uf = (struct ufuncs *)str->str_magic->str_ptr;
+
+ if (uf && uf->uf_set)
+ (*uf->uf_set)(uf->uf_index, str);
+ }
+ break;
+ }
+ break;
+ }
+}
+
+whichsig(sig)
+char *sig;
+{
+ register char **sigv;
+
+ for (sigv = sig_name+1; *sigv; sigv++)
+ if (strEQ(sig,*sigv))
+ return sigv - sig_name;
+#ifdef SIGCLD
+ if (strEQ(sig,"CHLD"))
+ return SIGCLD;
+#endif
+#ifdef SIGCHLD
+ if (strEQ(sig,"CLD"))
+ return SIGCHLD;
+#endif
+ return 0;
+}
+
+static handlertype
+sighandler(sig)
+int sig;
+{
+ STAB *stab;
+ STR *str;
+ int oldsave = savestack->ary_fill;
+ int oldtmps_base = tmps_base;
+ register CSV *csv;
+ SUBR *sub;
+
+#ifdef OS2 /* or anybody else who requires SIG_ACK */
+ signal(sig, SIG_ACK);
+#endif
+ stab = stabent(
+ str_get(hfetch(stab_hash(sigstab),sig_name[sig],strlen(sig_name[sig]),
+ TRUE)), TRUE);
+ sub = stab_sub(stab);
+ if (!sub && *sig_name[sig] == 'C' && instr(sig_name[sig],"LD")) {
+ if (sig_name[sig][1] == 'H')
+ stab = stabent(str_get(hfetch(stab_hash(sigstab),"CLD",3,TRUE)),
+ TRUE);
+ else
+ stab = stabent(str_get(hfetch(stab_hash(sigstab),"CHLD",4,TRUE)),
+ TRUE);
+ sub = stab_sub(stab); /* gag */
+ }
+ if (!sub) {
+ if (dowarn)
+ warn("SIG%s handler \"%s\" not defined.\n",
+ sig_name[sig], stab_name(stab) );
+ return;
+ }
+ saveaptr(&stack);
+ str = Str_new(15, sizeof(CSV));
+ str->str_state = SS_SCSV;
+ (void)apush(savestack,str);
+ csv = (CSV*)str->str_ptr;
+ csv->sub = sub;
+ csv->stab = stab;
+ csv->curcsv = curcsv;
+ csv->curcmd = curcmd;
+ csv->depth = sub->depth;
+ csv->wantarray = G_SCALAR;
+ csv->hasargs = TRUE;
+ csv->savearray = stab_xarray(defstab);
+ csv->argarray = stab_xarray(defstab) = stack = anew(defstab);
+ stack->ary_flags = 0;
+ curcsv = csv;
+ str = str_mortal(&str_undef);
+ str_set(str,sig_name[sig]);
+ (void)apush(stab_xarray(defstab),str);
+ sub->depth++;
+ if (sub->depth >= 2) { /* save temporaries on recursion? */
+ if (sub->depth == 100 && dowarn)
+ warn("Deep recursion on subroutine \"%s\"",stab_name(stab));
+ savelist(sub->tosave->ary_array,sub->tosave->ary_fill);
+ }
+
+ tmps_base = tmps_max; /* protect our mortal string */
+ (void)cmd_exec(sub->cmd,G_SCALAR,0); /* so do it already */
+ tmps_base = oldtmps_base;
+
+ restorelist(oldsave); /* put everything back */
+}
+
+STAB *
+aadd(stab)
+register STAB *stab;
+{
+ if (!stab_xarray(stab))
+ stab_xarray(stab) = anew(stab);
+ return stab;
+}
+
+STAB *
+hadd(stab)
+register STAB *stab;
+{
+ if (!stab_xhash(stab))
+ stab_xhash(stab) = hnew(COEFFSIZE);
+ return stab;
+}
+
+STAB *
+fstab(name)
+char *name;
+{
+ char tmpbuf[1200];
+ STAB *stab;
+
+ sprintf(tmpbuf,"'_<%s", name);
+ stab = stabent(tmpbuf, TRUE);
+ str_set(stab_val(stab), name);
+ if (perldb)
+ (void)hadd(aadd(stab));
+ return stab;
+}
+
+STAB *
+stabent(name,add)
+register char *name;
+int add;
+{
+ register STAB *stab;
+ register STBP *stbp;
+ int len;
+ register char *namend;
+ HASH *stash;
+ char *sawquote = Nullch;
+ char *prevquote = Nullch;
+ bool global = FALSE;
+
+ if (isascii(*name) && isupper(*name)) {
+ if (*name > 'I') {
+ if (*name == 'S' && (
+ strEQ(name, "SIG") ||
+ strEQ(name, "STDIN") ||
+ strEQ(name, "STDOUT") ||
+ strEQ(name, "STDERR") ))
+ global = TRUE;
+ }
+ else if (*name > 'E') {
+ if (*name == 'I' && strEQ(name, "INC"))
+ global = TRUE;
+ }
+ else if (*name > 'A') {
+ if (*name == 'E' && strEQ(name, "ENV"))
+ global = TRUE;
+ }
+ else if (*name == 'A' && (
+ strEQ(name, "ARGV") ||
+ strEQ(name, "ARGVOUT") ))
+ global = TRUE;
+ }
+ for (namend = name; *namend; namend++) {
+ if (*namend == '\'' && namend[1])
+ prevquote = sawquote, sawquote = namend;
+ }
+ if (sawquote == name && name[1]) {
+ stash = defstash;
+ sawquote = Nullch;
+ name++;
+ }
+ else if (!isalpha(*name) || global)
+ stash = defstash;
+ else if (curcmd == &compiling)
+ stash = curstash;
+ else
+ stash = curcmd->c_stash;
+ if (sawquote) {
+ char tmpbuf[256];
+ char *s, *d;
+
+ *sawquote = '\0';
+ if (s = prevquote) {
+ strncpy(tmpbuf,name,s-name+1);
+ d = tmpbuf+(s-name+1);
+ *d++ = '_';
+ strcpy(d,s+1);
+ }
+ else {
+ *tmpbuf = '_';
+ strcpy(tmpbuf+1,name);
+ }
+ stab = stabent(tmpbuf,TRUE);
+ if (!(stash = stab_xhash(stab)))
+ stash = stab_xhash(stab) = hnew(0);
+ if (!stash->tbl_name)
+ stash->tbl_name = savestr(name);
+ name = sawquote+1;
+ *sawquote = '\'';
+ }
+ len = namend - name;
+ stab = (STAB*)hfetch(stash,name,len,add);
+ if (stab == (STAB*)&str_undef)
+ return Nullstab;
+ if (stab->str_pok) {
+ stab->str_pok |= SP_MULTI;
+ return stab;
+ }
+ else {
+ if (stab->str_len)
+ Safefree(stab->str_ptr);
+ Newz(602,stbp, 1, STBP);
+ stab->str_ptr = stbp;
+ stab->str_len = stab->str_cur = sizeof(STBP);
+ stab->str_pok = 1;
+ strcpy(stab_magic(stab),"StB");
+ stab_val(stab) = Str_new(72,0);
+ stab_line(stab) = curcmd->c_line;
+ str_magic(stab,stab,'*',name,len);
+ stab_stash(stab) = stash;
+ if (isdigit(*name) && *name != '0') {
+ stab_flags(stab) = SF_VMAGIC;
+ str_magic(stab_val(stab), stab, 0, Nullch, 0);
+ }
+ return stab;
+ }
+}
+
+stab_fullname(str,stab)
+STR *str;
+STAB *stab;
+{
+ HASH *tb = stab_stash(stab);
+
+ if (!tb)
+ return;
+ str_set(str,tb->tbl_name);
+ str_ncat(str,"'", 1);
+ str_scat(str,stab->str_magic);
+}
+
+STIO *
+stio_new()
+{
+ STIO *stio;
+
+ Newz(603,stio,1,STIO);
+ stio->page_len = 60;
+ return stio;
+}
+
+stab_check(min,max)
+int min;
+register int max;
+{
+ register HENT *entry;
+ register int i;
+ register STAB *stab;
+
+ for (i = min; i <= max; i++) {
+ for (entry = defstash->tbl_array[i]; entry; entry = entry->hent_next) {
+ stab = (STAB*)entry->hent_val;
+ if (stab->str_pok & SP_MULTI)
+ continue;
+ curcmd->c_line = stab_line(stab);
+ warn("Possible typo: \"%s\"", stab_name(stab));
+ }
+ }
+}
+
+static int gensym = 0;
+
+STAB *
+genstab()
+{
+ (void)sprintf(tokenbuf,"_GEN_%d",gensym++);
+ return stabent(tokenbuf,TRUE);
+}
+
+/* hopefully this is only called on local symbol table entries */
+
+void
+stab_clear(stab)
+register STAB *stab;
+{
+ STIO *stio;
+ SUBR *sub;
+
+ afree(stab_xarray(stab));
+ stab_xarray(stab) = Null(ARRAY*);
+ (void)hfree(stab_xhash(stab), FALSE);
+ stab_xhash(stab) = Null(HASH*);
+ str_free(stab_val(stab));
+ stab_val(stab) = Nullstr;
+ if (stio = stab_io(stab)) {
+ do_close(stab,FALSE);
+ Safefree(stio->top_name);
+ Safefree(stio->fmt_name);
+ }
+ if (sub = stab_sub(stab)) {
+ afree(sub->tosave);
+ cmd_free(sub->cmd);
+ }
+ Safefree(stab->str_ptr);
+ stab->str_ptr = Null(STBP*);
+ stab->str_len = 0;
+ stab->str_cur = 0;
+}
+
+#if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
+#define MICROPORT
+#endif
+
+#ifdef MICROPORT /* Microport 2.4 hack */
+ARRAY *stab_array(stab)
+register STAB *stab;
+{
+ if (((STBP*)(stab->str_ptr))->stbp_array)
+ return ((STBP*)(stab->str_ptr))->stbp_array;
+ else
+ return ((STBP*)(aadd(stab)->str_ptr))->stbp_array;
+}
+
+HASH *stab_hash(stab)
+register STAB *stab;
+{
+ if (((STBP*)(stab->str_ptr))->stbp_hash)
+ return ((STBP*)(stab->str_ptr))->stbp_hash;
+ else
+ return ((STBP*)(hadd(stab)->str_ptr))->stbp_hash;
+}
+#endif /* Microport 2.4 hack */
diff --git a/MultiSource/Benchmarks/MallocBench/perl/stab.h b/MultiSource/Benchmarks/MallocBench/perl/stab.h
new file mode 100644
index 00000000..2f402f20
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/stab.h
@@ -0,0 +1,118 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:39:49 lwall
+ * 4.0 baseline.
+ *
+ */
+
+struct stabptrs {
+ char stbp_magic[4];
+ STR *stbp_val; /* scalar value */
+ struct stio *stbp_io; /* filehandle value */
+ FCMD *stbp_form; /* format value */
+ ARRAY *stbp_array; /* array value */
+ HASH *stbp_hash; /* associative array value */
+ HASH *stbp_stash; /* symbol table for this stab */
+ SUBR *stbp_sub; /* subroutine value */
+ int stbp_lastexpr; /* used by nothing_in_common() */
+ line_t stbp_line; /* line first declared at (for -w) */
+ char stbp_flags;
+};
+
+#if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
+#define MICROPORT
+#endif
+
+#define stab_magic(stab) (((STBP*)(stab->str_ptr))->stbp_magic)
+#define stab_val(stab) (((STBP*)(stab->str_ptr))->stbp_val)
+#define stab_io(stab) (((STBP*)(stab->str_ptr))->stbp_io)
+#define stab_form(stab) (((STBP*)(stab->str_ptr))->stbp_form)
+#define stab_xarray(stab) (((STBP*)(stab->str_ptr))->stbp_array)
+#ifdef MICROPORT /* Microport 2.4 hack */
+ARRAY *stab_array();
+#else
+#define stab_array(stab) (((STBP*)(stab->str_ptr))->stbp_array ? \
+ ((STBP*)(stab->str_ptr))->stbp_array : \
+ ((STBP*)(aadd(stab)->str_ptr))->stbp_array)
+#endif
+#define stab_xhash(stab) (((STBP*)(stab->str_ptr))->stbp_hash)
+#ifdef MICROPORT /* Microport 2.4 hack */
+HASH *stab_hash();
+#else
+#define stab_hash(stab) (((STBP*)(stab->str_ptr))->stbp_hash ? \
+ ((STBP*)(stab->str_ptr))->stbp_hash : \
+ ((STBP*)(hadd(stab)->str_ptr))->stbp_hash)
+#endif /* Microport 2.4 hack */
+#define stab_stash(stab) (((STBP*)(stab->str_ptr))->stbp_stash)
+#define stab_sub(stab) (((STBP*)(stab->str_ptr))->stbp_sub)
+#define stab_lastexpr(stab) (((STBP*)(stab->str_ptr))->stbp_lastexpr)
+#define stab_line(stab) (((STBP*)(stab->str_ptr))->stbp_line)
+#define stab_flags(stab) (((STBP*)(stab->str_ptr))->stbp_flags)
+#define stab_name(stab) (stab->str_magic->str_ptr)
+
+#define SF_VMAGIC 1 /* call routine to dereference STR val */
+#define SF_MULTI 2 /* seen more than once */
+
+struct stio {
+ FILE *ifp; /* ifp and ofp are normally the same */
+ FILE *ofp; /* but sockets need separate streams */
+#ifdef HAS_READDIR
+ DIR *dirp; /* for opendir, readdir, etc */
+#endif
+ long lines; /* $. */
+ long page; /* $% */
+ long page_len; /* $= */
+ long lines_left; /* $- */
+ char *top_name; /* $^ */
+ STAB *top_stab; /* $^ */
+ char *fmt_name; /* $~ */
+ STAB *fmt_stab; /* $~ */
+ short subprocess; /* -| or |- */
+ char type;
+ char flags;
+};
+
+#define IOF_ARGV 1 /* this fp iterates over ARGV */
+#define IOF_START 2 /* check for null ARGV and substitute '-' */
+#define IOF_FLUSH 4 /* this fp wants a flush after write op */
+
+struct sub {
+ CMD *cmd;
+ int (*usersub)();
+ int userindex;
+ STAB *filestab;
+ long depth; /* >= 2 indicates recursive call */
+ ARRAY *tosave;
+};
+
+#define Nullstab Null(STAB*)
+
+#define STAB_STR(s) (tmpstab = (s), stab_flags(tmpstab) & SF_VMAGIC ? stab_str(stab_val(tmpstab)->str_magic) : stab_val(tmpstab))
+#define STAB_GET(s) (tmpstab = (s), str_get(stab_flags(tmpstab) & SF_VMAGIC ? stab_str(tmpstab->str_magic) : stab_val(tmpstab)))
+#define STAB_GNUM(s) (tmpstab = (s), str_gnum(stab_flags(tmpstab) & SF_VMAGIC ? stab_str(tmpstab->str_magic) : stab_val(tmpstab)))
+
+EXT STAB *tmpstab;
+
+EXT STAB *stab_index[128];
+
+EXT unsigned short statusvalue;
+
+EXT int delaymagic INIT(0);
+#define DM_DELAY 1
+#define DM_REUID 2
+#define DM_REGID 4
+
+STAB *aadd();
+STAB *hadd();
+STAB *fstab();
diff --git a/MultiSource/Benchmarks/MallocBench/perl/str.c b/MultiSource/Benchmarks/MallocBench/perl/str.c
new file mode 100644
index 00000000..e075b87a
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/str.c
@@ -0,0 +1,1517 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/12 09:15:30 lwall
+ * patch1: fixed undefined environ problem
+ * patch1: substr($ENV{"PATH"},0,0) = "/foo:" didn't modify environment
+ * patch1: $foo .= <BAR> could cause core dump for certain lengths of $foo
+ *
+ * Revision 4.0 91/03/20 01:39:55 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "perly.h"
+
+#ifndef str_get
+char *
+str_get(str)
+STR *str;
+{
+#ifdef TAINT
+ tainted |= str->str_tainted;
+#endif
+ return str->str_pok ? str->str_ptr : str_2ptr(str);
+}
+#endif
+
+/* dlb ... guess we have a "crippled cc".
+ * dlb the following functions are usually macros.
+ */
+#ifndef str_true
+str_true(Str)
+STR *Str;
+{
+ if (Str->str_pok) {
+ if (*Str->str_ptr > '0' ||
+ Str->str_cur > 1 ||
+ (Str->str_cur && *Str->str_ptr != '0'))
+ return 1;
+ return 0;
+ }
+ if (Str->str_nok)
+ return (Str->str_u.str_nval != 0.0);
+ return 0;
+}
+#endif /* str_true */
+
+#ifndef str_gnum
+double str_gnum(Str)
+STR *Str;
+{
+#ifdef TAINT
+ tainted |= Str->str_tainted;
+#endif /* TAINT*/
+ if (Str->str_nok)
+ return Str->str_u.str_nval;
+ return str_2num(Str);
+}
+#endif /* str_gnum */
+/* dlb ... end of crutch */
+
+char *
+str_grow(str,newlen)
+register STR *str;
+#ifndef MSDOS
+register int newlen;
+#else
+unsigned long newlen;
+#endif
+{
+ register char *s = str->str_ptr;
+
+#ifdef MSDOS
+ if (newlen >= 0x10000) {
+ fprintf(stderr, "Allocation too large: %lx\n", newlen);
+ exit(1);
+ }
+#endif /* MSDOS */
+ if (str->str_state == SS_INCR) { /* data before str_ptr? */
+ str->str_len += str->str_u.str_useful;
+ str->str_ptr -= str->str_u.str_useful;
+ str->str_u.str_useful = 0L;
+ bcopy(s, str->str_ptr, str->str_cur+1);
+ s = str->str_ptr;
+ str->str_state = SS_NORM; /* normal again */
+ if (newlen > str->str_len)
+ newlen += 10 * (newlen - str->str_cur); /* avoid copy each time */
+ }
+ if (newlen > str->str_len) { /* need more room? */
+ if (str->str_len)
+ Renew(s,newlen,char);
+ else
+ New(703,s,newlen,char);
+ str->str_ptr = s;
+ str->str_len = newlen;
+ }
+ return s;
+}
+
+str_numset(str,num)
+register STR *str;
+double num;
+{
+ if (str->str_pok) {
+ str->str_pok = 0; /* invalidate pointer */
+ if (str->str_state == SS_INCR)
+ Str_Grow(str,0);
+ }
+ str->str_u.str_nval = num;
+ str->str_state = SS_NORM;
+ str->str_nok = 1; /* validate number */
+#ifdef TAINT
+ str->str_tainted = tainted;
+#endif
+}
+
+char *
+str_2ptr(str)
+register STR *str;
+{
+ register char *s;
+ int olderrno;
+
+ if (!str)
+ return "";
+ if (str->str_nok) {
+ STR_GROW(str, 30);
+ s = str->str_ptr;
+ olderrno = errno; /* some Xenix systems wipe out errno here */
+#if defined(scs) && defined(ns32000)
+ gcvt(str->str_u.str_nval,20,s);
+#else
+#ifdef apollo
+ if (str->str_u.str_nval == 0.0)
+ (void)strcpy(s,"0");
+ else
+#endif /*apollo*/
+ (void)sprintf(s,"%.20g",str->str_u.str_nval);
+#endif /*scs*/
+ errno = olderrno;
+ while (*s) s++;
+#ifdef hcx
+ if (s[-1] == '.')
+ s--;
+#endif
+ }
+ else {
+ if (str == &str_undef)
+ return No;
+ if (dowarn)
+ warn("Use of uninitialized variable");
+ STR_GROW(str, 30);
+ s = str->str_ptr;
+ }
+ *s = '\0';
+ str->str_cur = s - str->str_ptr;
+ str->str_pok = 1;
+#ifdef DEBUGGING
+ if (debug & 32)
+ fprintf(stderr,"0x%lx ptr(%s)\n",str,str->str_ptr);
+#endif
+ return str->str_ptr;
+}
+
+double
+str_2num(str)
+register STR *str;
+{
+ if (!str)
+ return 0.0;
+ if (str->str_state == SS_INCR)
+ Str_Grow(str,0); /* just force copy down */
+ str->str_state = SS_NORM;
+ if (str->str_len && str->str_pok)
+ str->str_u.str_nval = atof(str->str_ptr);
+ else {
+ if (str == &str_undef)
+ return 0.0;
+ if (dowarn)
+ warn("Use of uninitialized variable");
+ str->str_u.str_nval = 0.0;
+ }
+ str->str_nok = 1;
+#ifdef DEBUGGING
+ if (debug & 32)
+ fprintf(stderr,"0x%lx num(%g)\n",str,str->str_u.str_nval);
+#endif
+ return str->str_u.str_nval;
+}
+
+/* Note: str_sset() should not be called with a source string that needs
+ * be reused, since it may destroy the source string if it is marked
+ * as temporary.
+ */
+
+str_sset(dstr,sstr)
+STR *dstr;
+register STR *sstr;
+{
+#ifdef TAINT
+ if (sstr)
+ tainted |= sstr->str_tainted;
+#endif
+ if (sstr == dstr || dstr == &str_undef)
+ return;
+ if (!sstr)
+ dstr->str_pok = dstr->str_nok = 0;
+ else if (sstr->str_pok) {
+
+ /*
+ * Check to see if we can just swipe the string. If so, it's a
+ * possible small lose on short strings, but a big win on long ones.
+ * It might even be a win on short strings if dstr->str_ptr
+ * has to be allocated and sstr->str_ptr has to be freed.
+ */
+
+ if (sstr->str_pok & SP_TEMP) { /* slated for free anyway? */
+ if (dstr->str_ptr) {
+ if (dstr->str_state == SS_INCR)
+ dstr->str_ptr -= dstr->str_u.str_useful;
+ Safefree(dstr->str_ptr);
+ }
+ dstr->str_ptr = sstr->str_ptr;
+ dstr->str_len = sstr->str_len;
+ dstr->str_cur = sstr->str_cur;
+ dstr->str_state = sstr->str_state;
+ dstr->str_pok = sstr->str_pok & ~SP_TEMP;
+#ifdef TAINT
+ dstr->str_tainted = sstr->str_tainted;
+#endif
+ sstr->str_ptr = Nullch;
+ sstr->str_len = 0;
+ sstr->str_pok = 0; /* wipe out any weird flags */
+ sstr->str_state = 0; /* so sstr frees uneventfully */
+ }
+ else { /* have to copy actual string */
+ if (dstr->str_ptr) {
+ if (dstr->str_state == SS_INCR) {
+ Str_Grow(dstr,0);
+ }
+ }
+ str_nset(dstr,sstr->str_ptr,sstr->str_cur);
+ }
+ if (dstr->str_nok = sstr->str_nok)
+ dstr->str_u.str_nval = sstr->str_u.str_nval;
+ else {
+#ifdef STRUCTCOPY
+ dstr->str_u = sstr->str_u;
+#else
+ dstr->str_u.str_nval = sstr->str_u.str_nval;
+#endif
+ if (dstr->str_cur == sizeof(STBP)) {
+ char *tmps = dstr->str_ptr;
+
+ if (*tmps == 'S' && bcmp(tmps,"StB",4) == 0) {
+ if (!dstr->str_magic) {
+ dstr->str_magic = str_smake(sstr->str_magic);
+ dstr->str_magic->str_rare = 'X';
+ }
+ }
+ }
+ }
+ }
+ else if (sstr->str_nok)
+ str_numset(dstr,sstr->str_u.str_nval);
+ else {
+ if (dstr->str_state == SS_INCR)
+ Str_Grow(dstr,0); /* just force copy down */
+
+#ifdef STRUCTCOPY
+ dstr->str_u = sstr->str_u;
+#else
+ dstr->str_u.str_nval = sstr->str_u.str_nval;
+#endif
+ dstr->str_pok = dstr->str_nok = 0;
+ }
+}
+
+str_nset(str,ptr,len)
+register STR *str;
+register char *ptr;
+register STRLEN len;
+{
+ if (str == &str_undef)
+ return;
+ STR_GROW(str, len + 1);
+ if (ptr)
+ (void)bcopy(ptr,str->str_ptr,len);
+ str->str_cur = len;
+ *(str->str_ptr+str->str_cur) = '\0';
+ str->str_nok = 0; /* invalidate number */
+ str->str_pok = 1; /* validate pointer */
+#ifdef TAINT
+ str->str_tainted = tainted;
+#endif
+}
+
+str_set(str,ptr)
+register STR *str;
+register char *ptr;
+{
+ register STRLEN len;
+
+ if (str == &str_undef)
+ return;
+ if (!ptr)
+ ptr = "";
+ len = strlen(ptr);
+ STR_GROW(str, len + 1);
+ (void)bcopy(ptr,str->str_ptr,len+1);
+ str->str_cur = len;
+ str->str_nok = 0; /* invalidate number */
+ str->str_pok = 1; /* validate pointer */
+#ifdef TAINT
+ str->str_tainted = tainted;
+#endif
+}
+
+str_chop(str,ptr) /* like set but assuming ptr is in str */
+register STR *str;
+register char *ptr;
+{
+ register STRLEN delta;
+
+ if (!ptr || !(str->str_pok))
+ return;
+ delta = ptr - str->str_ptr;
+ str->str_len -= delta;
+ str->str_cur -= delta;
+ str->str_ptr += delta;
+ if (str->str_state == SS_INCR)
+ str->str_u.str_useful += delta;
+ else {
+ str->str_u.str_useful = delta;
+ str->str_state = SS_INCR;
+ }
+ str->str_nok = 0; /* invalidate number */
+ str->str_pok = 1; /* validate pointer (and unstudy str) */
+}
+
+str_ncat(str,ptr,len)
+register STR *str;
+register char *ptr;
+register STRLEN len;
+{
+ if (str == &str_undef)
+ return;
+ if (!(str->str_pok))
+ (void)str_2ptr(str);
+ STR_GROW(str, str->str_cur + len + 1);
+ (void)bcopy(ptr,str->str_ptr+str->str_cur,len);
+ str->str_cur += len;
+ *(str->str_ptr+str->str_cur) = '\0';
+ str->str_nok = 0; /* invalidate number */
+ str->str_pok = 1; /* validate pointer */
+#ifdef TAINT
+ str->str_tainted |= tainted;
+#endif
+}
+
+str_scat(dstr,sstr)
+STR *dstr;
+register STR *sstr;
+{
+#ifdef TAINT
+ tainted |= sstr->str_tainted;
+#endif
+ if (!sstr)
+ return;
+ if (!(sstr->str_pok))
+ (void)str_2ptr(sstr);
+ if (sstr)
+ str_ncat(dstr,sstr->str_ptr,sstr->str_cur);
+}
+
+str_cat(str,ptr)
+register STR *str;
+register char *ptr;
+{
+ register STRLEN len;
+
+ if (str == &str_undef)
+ return;
+ if (!ptr)
+ return;
+ if (!(str->str_pok))
+ (void)str_2ptr(str);
+ len = strlen(ptr);
+ STR_GROW(str, str->str_cur + len + 1);
+ (void)bcopy(ptr,str->str_ptr+str->str_cur,len+1);
+ str->str_cur += len;
+ str->str_nok = 0; /* invalidate number */
+ str->str_pok = 1; /* validate pointer */
+#ifdef TAINT
+ str->str_tainted |= tainted;
+#endif
+}
+
+char *
+str_append_till(str,from,fromend,delim,keeplist)
+register STR *str;
+register char *from;
+register char *fromend;
+register int delim;
+char *keeplist;
+{
+ register char *to;
+ register STRLEN len;
+
+ if (str == &str_undef)
+ return Nullch;
+ if (!from)
+ return Nullch;
+ len = fromend - from;
+ STR_GROW(str, str->str_cur + len + 1);
+ str->str_nok = 0; /* invalidate number */
+ str->str_pok = 1; /* validate pointer */
+ to = str->str_ptr+str->str_cur;
+ for (; from < fromend; from++,to++) {
+ if (*from == '\\' && from+1 < fromend && delim != '\\') {
+ if (!keeplist) {
+ if (from[1] == delim || from[1] == '\\')
+ from++;
+ else
+ *to++ = *from++;
+ }
+ else if (from[1] && index(keeplist,from[1]))
+ *to++ = *from++;
+ else
+ from++;
+ }
+ else if (*from == delim)
+ break;
+ *to = *from;
+ }
+ *to = '\0';
+ str->str_cur = to - str->str_ptr;
+ return from;
+}
+
+STR *
+#ifdef LEAKTEST
+str_new(x,len)
+int x;
+#else
+str_new(len)
+#endif
+STRLEN len;
+{
+ register STR *str;
+
+#if defined(NOMEMOPT)
+ Newz(700+x,str,1,STR);
+#else
+ if (freestrroot) {
+ str = freestrroot;
+ freestrroot = str->str_magic;
+ str->str_magic = Nullstr;
+ str->str_state = SS_NORM;
+ }
+ else {
+ Newz(700+x,str,1,STR);
+ }
+#endif
+ if (len)
+ STR_GROW(str, len + 1);
+ return str;
+}
+
+void
+str_magic(str, stab, how, name, namlen)
+register STR *str;
+STAB *stab;
+int how;
+char *name;
+STRLEN namlen;
+{
+ if (str == &str_undef || str->str_magic)
+ return;
+ str->str_magic = Str_new(75,namlen);
+ str = str->str_magic;
+ str->str_u.str_stab = stab;
+ str->str_rare = how;
+ if (name)
+ str_nset(str,name,namlen);
+}
+
+void
+str_insert(bigstr,offset,len,little,littlelen)
+STR *bigstr;
+STRLEN offset;
+STRLEN len;
+char *little;
+STRLEN littlelen;
+{
+ register char *big;
+ register char *mid;
+ register char *midend;
+ register char *bigend;
+ register int i;
+
+ if (bigstr == &str_undef)
+ return;
+ bigstr->str_nok = 0;
+ bigstr->str_pok = SP_VALID; /* disable possible screamer */
+
+ i = littlelen - len;
+ if (i > 0) { /* string might grow */
+ STR_GROW(bigstr, bigstr->str_cur + i + 1);
+ big = bigstr->str_ptr;
+ mid = big + offset + len;
+ midend = bigend = big + bigstr->str_cur;
+ bigend += i;
+ *bigend = '\0';
+ while (midend > mid) /* shove everything down */
+ *--bigend = *--midend;
+ (void)bcopy(little,big+offset,littlelen);
+ bigstr->str_cur += i;
+ STABSET(bigstr);
+ return;
+ }
+ else if (i == 0) {
+ (void)bcopy(little,bigstr->str_ptr+offset,len);
+ STABSET(bigstr);
+ return;
+ }
+
+ big = bigstr->str_ptr;
+ mid = big + offset;
+ midend = mid + len;
+ bigend = big + bigstr->str_cur;
+
+ if (midend > bigend)
+ fatal("panic: str_insert");
+
+ if (mid - big > bigend - midend) { /* faster to shorten from end */
+ if (littlelen) {
+ (void)bcopy(little, mid, littlelen);
+ mid += littlelen;
+ }
+ i = bigend - midend;
+ if (i > 0) {
+ (void)bcopy(midend, mid, i);
+ mid += i;
+ }
+ *mid = '\0';
+ bigstr->str_cur = mid - big;
+ }
+ else if (i = mid - big) { /* faster from front */
+ midend -= littlelen;
+ mid = midend;
+ str_chop(bigstr,midend-i);
+ big += i;
+ while (i--)
+ *--midend = *--big;
+ if (littlelen)
+ (void)bcopy(little, mid, littlelen);
+ }
+ else if (littlelen) {
+ midend -= littlelen;
+ str_chop(bigstr,midend);
+ (void)bcopy(little,midend,littlelen);
+ }
+ else {
+ str_chop(bigstr,midend);
+ }
+ STABSET(bigstr);
+}
+
+/* make str point to what nstr did */
+
+void
+str_replace(str,nstr)
+register STR *str;
+register STR *nstr;
+{
+ if (str == &str_undef)
+ return;
+ if (str->str_state == SS_INCR)
+ Str_Grow(str,0); /* just force copy down */
+ if (nstr->str_state == SS_INCR)
+ Str_Grow(nstr,0);
+ if (str->str_ptr)
+ Safefree(str->str_ptr);
+ str->str_ptr = nstr->str_ptr;
+ str->str_len = nstr->str_len;
+ str->str_cur = nstr->str_cur;
+ str->str_pok = nstr->str_pok;
+ str->str_nok = nstr->str_nok;
+#ifdef STRUCTCOPY
+ str->str_u = nstr->str_u;
+#else
+ str->str_u.str_nval = nstr->str_u.str_nval;
+#endif
+#ifdef TAINT
+ str->str_tainted = nstr->str_tainted;
+#endif
+ if (nstr->str_magic)
+ str_free(nstr->str_magic);
+ Safefree(nstr);
+}
+
+void
+str_free(str)
+register STR *str;
+{
+ if (!str || str == &str_undef)
+ return;
+ if (str->str_state) {
+ if (str->str_state == SS_FREE) /* already freed */
+ return;
+ if (str->str_state == SS_INCR && !(str->str_pok & 2)) {
+ str->str_ptr -= str->str_u.str_useful;
+ str->str_len += str->str_u.str_useful;
+ }
+ }
+ if (str->str_magic)
+ str_free(str->str_magic);
+ str->str_magic = freestrroot;
+#if defined(LEAKTEST) || defined(NOMEMOPT)
+ if (str->str_len) {
+ Safefree(str->str_ptr);
+ str->str_ptr = Nullch;
+ }
+ if ((str->str_pok & SP_INTRP) && str->str_u.str_args)
+ arg_free(str->str_u.str_args);
+ Safefree(str);
+#else /* LEAKTEST etc */
+ if (str->str_len) {
+ if (str->str_len > 127) { /* next user not likely to want more */
+ Safefree(str->str_ptr); /* so give it back to malloc */
+ str->str_ptr = Nullch;
+ str->str_len = 0;
+ }
+ else
+ str->str_ptr[0] = '\0';
+ }
+ if ((str->str_pok & SP_INTRP) && str->str_u.str_args)
+ arg_free(str->str_u.str_args);
+ str->str_cur = 0;
+ str->str_nok = 0;
+ str->str_pok = 0;
+ str->str_state = SS_FREE;
+#ifdef TAINT
+ str->str_tainted = 0;
+#endif
+ freestrroot = str;
+#endif /* LEAKTEST */
+}
+
+STRLEN
+str_len(str)
+register STR *str;
+{
+ if (!str)
+ return 0;
+ if (!(str->str_pok))
+ (void)str_2ptr(str);
+ if (str->str_ptr)
+ return str->str_cur;
+ else
+ return 0;
+}
+
+str_eq(str1,str2)
+register STR *str1;
+register STR *str2;
+{
+ if (!str1 || str1 == &str_undef)
+ return (str2 == Nullstr || str2 == &str_undef || !str2->str_cur);
+ if (!str2 || str2 == &str_undef)
+ return !str1->str_cur;
+
+ if (!str1->str_pok)
+ (void)str_2ptr(str1);
+ if (!str2->str_pok)
+ (void)str_2ptr(str2);
+
+ if (str1->str_cur != str2->str_cur)
+ return 0;
+
+ return !bcmp(str1->str_ptr, str2->str_ptr, str1->str_cur);
+}
+
+str_cmp(str1,str2)
+register STR *str1;
+register STR *str2;
+{
+ int retval;
+
+ if (!str1 || str1 == &str_undef)
+ return (str2 == Nullstr || str2 == &str_undef || !str2->str_cur)?0:-1;
+ if (!str2 || str2 == &str_undef)
+ return str1->str_cur != 0;
+
+ if (!str1->str_pok)
+ (void)str_2ptr(str1);
+ if (!str2->str_pok)
+ (void)str_2ptr(str2);
+
+ if (str1->str_cur < str2->str_cur) {
+ if (retval = memcmp(str1->str_ptr, str2->str_ptr, str1->str_cur))
+ return retval < 0 ? -1 : 1;
+ else
+ return -1;
+ }
+ else if (retval = memcmp(str1->str_ptr, str2->str_ptr, str2->str_cur))
+ return retval < 0 ? -1 : 1;
+ else if (str1->str_cur == str2->str_cur)
+ return 0;
+ else
+ return 1;
+}
+
+char *
+str_gets(str,fp,append)
+register STR *str;
+register FILE *fp;
+int append;
+{
+ register char *bp; /* we're going to steal some values */
+ register int cnt; /* from the stdio struct and put EVERYTHING */
+ register STDCHAR *ptr; /* in the innermost loop into registers */
+ register int newline = rschar;/* (assuming >= 6 registers) */
+ int i;
+ STRLEN bpx;
+ int shortbuffered;
+
+ if (str == &str_undef)
+ return Nullch;
+#ifdef STDSTDIO /* Here is some breathtakingly efficient cheating */
+ cnt = fp->_cnt; /* get count into register */
+ str->str_nok = 0; /* invalidate number */
+ str->str_pok = 1; /* validate pointer */
+ if (str->str_len <= cnt + 1) { /* make sure we have the room */
+ if (cnt > 80 && str->str_len > append) {
+ shortbuffered = cnt - str->str_len + append + 1;
+ cnt -= shortbuffered;
+ }
+ else {
+ shortbuffered = 0;
+ STR_GROW(str, append+cnt+2);/* (remembering cnt can be -1) */
+ }
+ }
+ else
+ shortbuffered = 0;
+ bp = str->str_ptr + append; /* move these two too to registers */
+ ptr = fp->_ptr;
+ for (;;) {
+ screamer:
+ while (--cnt >= 0) { /* this */ /* eat */
+ if ((*bp++ = *ptr++) == newline) /* really */ /* dust */
+ goto thats_all_folks; /* screams */ /* sed :-) */
+ }
+
+ if (shortbuffered) { /* oh well, must extend */
+ cnt = shortbuffered;
+ shortbuffered = 0;
+ bpx = bp - str->str_ptr; /* prepare for possible relocation */
+ str->str_cur = bpx;
+ STR_GROW(str, str->str_len + append + cnt + 2);
+ bp = str->str_ptr + bpx; /* reconstitute our pointer */
+ continue;
+ }
+
+ fp->_cnt = cnt; /* deregisterize cnt and ptr */
+ fp->_ptr = ptr;
+ i = _filbuf(fp); /* get more characters */
+ cnt = fp->_cnt;
+ ptr = fp->_ptr; /* reregisterize cnt and ptr */
+
+ bpx = bp - str->str_ptr; /* prepare for possible relocation */
+ str->str_cur = bpx;
+ STR_GROW(str, bpx + cnt + 2);
+ bp = str->str_ptr + bpx; /* reconstitute our pointer */
+
+ if (i == newline) { /* all done for now? */
+ *bp++ = i;
+ goto thats_all_folks;
+ }
+ else if (i == EOF) /* all done for ever? */
+ goto thats_really_all_folks;
+ *bp++ = i; /* now go back to screaming loop */
+ }
+
+thats_all_folks:
+ if (rslen > 1 && (bp - str->str_ptr < rslen || bcmp(bp - rslen, rs, rslen)))
+ goto screamer; /* go back to the fray */
+thats_really_all_folks:
+ if (shortbuffered)
+ cnt += shortbuffered;
+ fp->_cnt = cnt; /* put these back or we're in trouble */
+ fp->_ptr = ptr;
+ *bp = '\0';
+ str->str_cur = bp - str->str_ptr; /* set length */
+
+#else /* !STDSTDIO */ /* The big, slow, and stupid way */
+
+ {
+ static char buf[8192];
+ char * bpe = buf + sizeof(buf) - 3;
+
+screamer:
+ bp = buf;
+ while ((i = getc(fp)) != EOF && (*bp++ = i) != newline && bp < bpe) ;
+
+ *bp = '\0';
+ if (append)
+ str_cat(str, buf);
+ else
+ str_set(str, buf);
+ if (i != EOF /* joy */
+ &&
+ (i != newline
+ ||
+ (rslen > 1
+ &&
+ (str->str_cur < rslen
+ ||
+ bcmp(str->str_ptr + str->str_cur - rslen, rs, rslen)
+ )
+ )
+ )
+ )
+ {
+ append = -1;
+ goto screamer;
+ }
+ }
+
+#endif /* STDSTDIO */
+
+ return str->str_cur - append ? str->str_ptr : Nullch;
+}
+
+ARG *
+parselist(str)
+STR *str;
+{
+ register CMD *cmd;
+ register ARG *arg;
+ CMD *oldcurcmd = curcmd;
+ int oldperldb = perldb;
+ int retval;
+
+ perldb = 0;
+ str_sset(linestr,str);
+ in_eval++;
+ oldoldbufptr = oldbufptr = bufptr = str_get(linestr);
+ bufend = bufptr + linestr->str_cur;
+ if (++loop_ptr >= loop_max) {
+ loop_max += 128;
+ Renew(loop_stack, loop_max, struct loop);
+ }
+ loop_stack[loop_ptr].loop_label = "_EVAL_";
+ loop_stack[loop_ptr].loop_sp = 0;
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Pushing label #%d _EVAL_)\n", loop_ptr);
+ }
+#endif
+ if (setjmp(loop_stack[loop_ptr].loop_env)) {
+ in_eval--;
+ loop_ptr--;
+ perldb = oldperldb;
+ fatal("%s\n",stab_val(stabent("@",TRUE))->str_ptr);
+ }
+#ifdef DEBUGGING
+ if (debug & 4) {
+ char *tmps = loop_stack[loop_ptr].loop_label;
+ deb("(Popping label #%d %s)\n",loop_ptr,
+ tmps ? tmps : "" );
+ }
+#endif
+ loop_ptr--;
+ error_count = 0;
+ curcmd = &compiling;
+ curcmd->c_line = oldcurcmd->c_line;
+ retval = yyparse();
+ curcmd = oldcurcmd;
+ perldb = oldperldb;
+ in_eval--;
+ if (retval || error_count)
+ fatal("Invalid component in string or format");
+ cmd = eval_root;
+ arg = cmd->c_expr;
+ if (cmd->c_type != C_EXPR || cmd->c_next || arg->arg_type != O_LIST)
+ fatal("panic: error in parselist %d %x %d", cmd->c_type,
+ cmd->c_next, arg ? arg->arg_type : -1);
+ Safefree(cmd);
+ eval_root = Nullcmd;
+ return arg;
+}
+
+void
+intrpcompile(src)
+STR *src;
+{
+ register char *s = str_get(src);
+ register char *send = s + src->str_cur;
+ register STR *str;
+ register char *t;
+ STR *toparse;
+ STRLEN len;
+ register int brackets;
+ register char *d;
+ STAB *stab;
+ char *checkpoint;
+ int sawcase = 0;
+
+ toparse = Str_new(76,0);
+ str = Str_new(77,0);
+
+ str_nset(str,"",0);
+ str_nset(toparse,"",0);
+ t = s;
+ while (s < send) {
+ if (*s == '\\' && s[1] && index("$@[{\\]}lLuUE",s[1])) {
+ str_ncat(str, t, s - t);
+ ++s;
+ if (isalpha(*s)) {
+ str_ncat(str, "$c", 2);
+ sawcase = (*s != 'E');
+ }
+ else {
+ if (*nointrp && s+1 < send)
+ if (*s != '@' && (*s != '$' || index(nointrp,s[1])))
+ str_ncat(str,s-1,1);
+ str_ncat(str, "$b", 2);
+ }
+ str_ncat(str, s, 1);
+ ++s;
+ t = s;
+ }
+ else if ((*s == '@' || (*s == '$' && !index(nointrp,s[1]))) &&
+ s+1 < send) {
+ str_ncat(str,t,s-t);
+ t = s;
+ if (*s == '$' && s[1] == '#' && (isalpha(s[2]) || s[2] == '_'))
+ s++;
+ s = scanident(s,send,tokenbuf);
+ if (*t == '@' &&
+ (!(stab = stabent(tokenbuf,FALSE)) ||
+ (*s == '{' ? !stab_xhash(stab) : !stab_xarray(stab)) )) {
+ str_ncat(str,"@",1);
+ s = ++t;
+ continue; /* grandfather @ from old scripts */
+ }
+ str_ncat(str,"$a",2);
+ str_ncat(toparse,",",1);
+ if (t[1] != '{' && (*s == '[' || *s == '{' /* }} */ ) &&
+ (stab = stabent(tokenbuf,FALSE)) &&
+ ((*s == '[') ? (stab_xarray(stab) != 0) : (stab_xhash(stab) != 0)) ) {
+ brackets = 0;
+ checkpoint = s;
+ do {
+ switch (*s) {
+ case '[':
+ if (s[-1] != '$')
+ brackets++;
+ break;
+ case '{':
+ brackets++;
+ break;
+ case ']':
+ if (s[-1] != '$')
+ brackets--;
+ break;
+ case '}':
+ brackets--;
+ break;
+ case '\'':
+ case '"':
+ if (s[-1] != '$') {
+ s = cpytill(tokenbuf,s+1,send,*s,&len);
+ if (s >= send)
+ fatal("Unterminated string");
+ }
+ break;
+ }
+ s++;
+ } while (brackets > 0 && s < send);
+ if (s > send)
+ fatal("Unmatched brackets in string");
+ if (*nointrp) { /* we're in a regular expression */
+ d = checkpoint;
+ if (*d == '{' && s[-1] == '}') { /* maybe {n,m} */
+ ++d;
+ if (isdigit(*d)) { /* matches /^{\d,?\d*}$/ */
+ if (*++d == ',')
+ ++d;
+ while (isdigit(*d))
+ d++;
+ if (d == s - 1)
+ s = checkpoint; /* Is {n,m}! Backoff! */
+ }
+ }
+ else if (*d == '[' && s[-1] == ']') { /* char class? */
+ int weight = 2; /* let's weigh the evidence */
+ char seen[256];
+ unsigned char un_char = 0, last_un_char;
+
+ Zero(seen,256,char);
+ *--s = '\0';
+ if (d[1] == '^')
+ weight += 150;
+ else if (d[1] == '$')
+ weight -= 3;
+ if (isdigit(d[1])) {
+ if (d[2]) {
+ if (isdigit(d[2]) && !d[3])
+ weight -= 10;
+ }
+ else
+ weight -= 100;
+ }
+ for (d++; d < s; d++) {
+ last_un_char = un_char;
+ un_char = (unsigned char)*d;
+ switch (*d) {
+ case '&':
+ case '$':
+ weight -= seen[un_char] * 10;
+ if (isalpha(d[1]) || isdigit(d[1]) ||
+ d[1] == '_') {
+ d = scanident(d,s,tokenbuf);
+ if (stabent(tokenbuf,FALSE))
+ weight -= 100;
+ else
+ weight -= 10;
+ }
+ else if (*d == '$' && d[1] &&
+ index("[#!%*<>()-=",d[1])) {
+ if (!d[2] || /*{*/ index("])} =",d[2]))
+ weight -= 10;
+ else
+ weight -= 1;
+ }
+ break;
+ case '\\':
+ un_char = 254;
+ if (d[1]) {
+ if (index("wds",d[1]))
+ weight += 100;
+ else if (seen['\''] || seen['"'])
+ weight += 1;
+ else if (index("rnftb",d[1]))
+ weight += 40;
+ else if (isdigit(d[1])) {
+ weight += 40;
+ while (d[1] && isdigit(d[1]))
+ d++;
+ }
+ }
+ else
+ weight += 100;
+ break;
+ case '-':
+ if (last_un_char < (unsigned char) d[1]
+ || d[1] == '\\') {
+ if (index("aA01! ",last_un_char))
+ weight += 30;
+ if (index("zZ79~",d[1]))
+ weight += 30;
+ }
+ else
+ weight -= 1;
+ default:
+ if (isalpha(*d) && d[1] && isalpha(d[1])) {
+ bufptr = d;
+ if (yylex() != WORD)
+ weight -= 150;
+ d = bufptr;
+ }
+ if (un_char == last_un_char + 1)
+ weight += 5;
+ weight -= seen[un_char];
+ break;
+ }
+ seen[un_char]++;
+ }
+#ifdef DEBUGGING
+ if (debug & 512)
+ fprintf(stderr,"[%s] weight %d\n",
+ checkpoint+1,weight);
+#endif
+ *s++ = ']';
+ if (weight >= 0) /* probably a character class */
+ s = checkpoint;
+ }
+ }
+ }
+ if (*t == '@')
+ str_ncat(toparse, "join($\",", 8);
+ if (t[1] == '{' && s[-1] == '}') {
+ str_ncat(toparse, t, 1);
+ str_ncat(toparse, t+2, s - t - 3);
+ }
+ else
+ str_ncat(toparse, t, s - t);
+ if (*t == '@')
+ str_ncat(toparse, ")", 1);
+ t = s;
+ }
+ else
+ s++;
+ }
+ str_ncat(str,t,s-t);
+ if (sawcase)
+ str_ncat(str, "$cE", 3);
+ if (toparse->str_ptr && *toparse->str_ptr == ',') {
+ *toparse->str_ptr = '(';
+ str_ncat(toparse,",$$);",5);
+ str->str_u.str_args = parselist(toparse);
+ str->str_u.str_args->arg_len--; /* ignore $$ reference */
+ }
+ else
+ str->str_u.str_args = Nullarg;
+ str_free(toparse);
+ str->str_pok |= SP_INTRP;
+ str->str_nok = 0;
+ str_replace(src,str);
+}
+
+STR *
+interp(str,src,sp)
+register STR *str;
+STR *src;
+int sp;
+{
+ register char *s;
+ register char *t;
+ register char *send;
+ register STR **elem;
+ int docase = 0;
+ int l = 0;
+ int u = 0;
+ int L = 0;
+ int U = 0;
+
+ if (str == &str_undef)
+ return Nullstr;
+ if (!(src->str_pok & SP_INTRP)) {
+ int oldsave = savestack->ary_fill;
+
+ (void)savehptr(&curstash);
+ curstash = curcmd->c_stash; /* so stabent knows right package */
+ intrpcompile(src);
+ restorelist(oldsave);
+ }
+ s = src->str_ptr; /* assumed valid since str_pok set */
+ t = s;
+ send = s + src->str_cur;
+
+ if (src->str_u.str_args) {
+ (void)eval(src->str_u.str_args,G_ARRAY,sp);
+ /* Assuming we have correct # of args */
+ elem = stack->ary_array + sp;
+ }
+
+ str_nset(str,"",0);
+ while (s < send) {
+ if (*s == '$' && s+1 < send) {
+ if (s-t > 0)
+ str_ncat(str,t,s-t);
+ switch(*++s) {
+ case 'a':
+ str_scat(str,*++elem);
+ break;
+ case 'b':
+ str_ncat(str,++s,1);
+ break;
+ case 'c':
+ if (docase && str->str_cur >= docase) {
+ char *b = str->str_ptr + --docase;
+
+ if (L)
+ lcase(b, str->str_ptr + str->str_cur);
+ else if (U)
+ ucase(b, str->str_ptr + str->str_cur);
+
+ if (u) /* note that l & u are independent of L & U */
+ ucase(b, b+1);
+ else if (l)
+ lcase(b, b+1);
+ l = u = 0;
+ }
+ docase = str->str_cur + 1;
+ switch (*++s) {
+ case 'u':
+ u = 1;
+ l = 0;
+ break;
+ case 'U':
+ U = 1;
+ L = 0;
+ break;
+ case 'l':
+ l = 1;
+ u = 0;
+ break;
+ case 'L':
+ L = 1;
+ U = 0;
+ break;
+ case 'E':
+ docase = L = U = l = u = 0;
+ break;
+ }
+ break;
+ }
+ t = ++s;
+ }
+ else
+ s++;
+ }
+ if (s-t > 0)
+ str_ncat(str,t,s-t);
+ return str;
+}
+
+ucase(s,send)
+register char *s;
+register char *send;
+{
+ while (s < send) {
+ if (isascii(*s) && islower(*s))
+ *s = toupper(*s);
+ s++;
+ }
+}
+
+lcase(s,send)
+register char *s;
+register char *send;
+{
+ while (s < send) {
+ if (isascii(*s) && isupper(*s))
+ *s = tolower(*s);
+ s++;
+ }
+}
+
+void
+str_inc(str)
+register STR *str;
+{
+ register char *d;
+
+ if (!str || str == &str_undef)
+ return;
+ if (str->str_nok) {
+ str->str_u.str_nval += 1.0;
+ str->str_pok = 0;
+ return;
+ }
+ if (!str->str_pok || !*str->str_ptr) {
+ str->str_u.str_nval = 1.0;
+ str->str_nok = 1;
+ str->str_pok = 0;
+ return;
+ }
+ d = str->str_ptr;
+ while (isalpha(*d)) d++;
+ while (isdigit(*d)) d++;
+ if (*d) {
+ str_numset(str,atof(str->str_ptr) + 1.0); /* punt */
+ return;
+ }
+ d--;
+ while (d >= str->str_ptr) {
+ if (isdigit(*d)) {
+ if (++*d <= '9')
+ return;
+ *(d--) = '0';
+ }
+ else {
+ ++*d;
+ if (isalpha(*d))
+ return;
+ *(d--) -= 'z' - 'a' + 1;
+ }
+ }
+ /* oh,oh, the number grew */
+ STR_GROW(str, str->str_cur + 2);
+ str->str_cur++;
+ for (d = str->str_ptr + str->str_cur; d > str->str_ptr; d--)
+ *d = d[-1];
+ if (isdigit(d[1]))
+ *d = '1';
+ else
+ *d = d[1];
+}
+
+void
+str_dec(str)
+register STR *str;
+{
+ if (!str || str == &str_undef)
+ return;
+ if (str->str_nok) {
+ str->str_u.str_nval -= 1.0;
+ str->str_pok = 0;
+ return;
+ }
+ if (!str->str_pok) {
+ str->str_u.str_nval = -1.0;
+ str->str_nok = 1;
+ return;
+ }
+ str_numset(str,atof(str->str_ptr) - 1.0);
+}
+
+/* Make a string that will exist for the duration of the expression
+ * evaluation. Actually, it may have to last longer than that, but
+ * hopefully cmd_exec won't free it until it has been assigned to a
+ * permanent location. */
+
+static long tmps_size = -1;
+
+STR *
+str_mortal(oldstr)
+STR *oldstr;
+{
+ register STR *str = Str_new(78,0);
+
+ str_sset(str,oldstr);
+ if (++tmps_max > tmps_size) {
+ tmps_size = tmps_max;
+ if (!(tmps_size & 127)) {
+ if (tmps_size)
+ Renew(tmps_list, tmps_size + 128, STR*);
+ else
+ New(702,tmps_list, 128, STR*);
+ }
+ }
+ tmps_list[tmps_max] = str;
+ if (str->str_pok)
+ str->str_pok |= SP_TEMP;
+ return str;
+}
+
+/* same thing without the copying */
+
+STR *
+str_2mortal(str)
+register STR *str;
+{
+ if (str == &str_undef)
+ return str;
+ if (++tmps_max > tmps_size) {
+ tmps_size = tmps_max;
+ if (!(tmps_size & 127)) {
+ if (tmps_size)
+ Renew(tmps_list, tmps_size + 128, STR*);
+ else
+ New(704,tmps_list, 128, STR*);
+ }
+ }
+ tmps_list[tmps_max] = str;
+ if (str->str_pok)
+ str->str_pok |= SP_TEMP;
+ return str;
+}
+
+STR *
+str_make(s,len)
+char *s;
+STRLEN len;
+{
+ register STR *str = Str_new(79,0);
+
+ if (!len)
+ len = strlen(s);
+ str_nset(str,s,len);
+ return str;
+}
+
+STR *
+str_nmake(n)
+double n;
+{
+ register STR *str = Str_new(80,0);
+
+ str_numset(str,n);
+ return str;
+}
+
+/* make an exact duplicate of old */
+
+STR *
+str_smake(old)
+register STR *old;
+{
+ register STR *new = Str_new(81,0);
+
+ if (!old)
+ return Nullstr;
+ if (old->str_state == SS_FREE) {
+ warn("semi-panic: attempt to dup freed string");
+ return Nullstr;
+ }
+ if (old->str_state == SS_INCR && !(old->str_pok & 2))
+ Str_Grow(old,0);
+ if (new->str_ptr)
+ Safefree(new->str_ptr);
+ Copy(old,new,1,STR);
+ if (old->str_ptr) {
+ new->str_ptr = nsavestr(old->str_ptr,old->str_len);
+ new->str_pok &= ~SP_TEMP;
+ }
+ return new;
+}
+
+str_reset(s,stash)
+register char *s;
+HASH *stash;
+{
+ register HENT *entry;
+ register STAB *stab;
+ register STR *str;
+ register int i;
+ register SPAT *spat;
+ register int max;
+
+ if (!*s) { /* reset ?? searches */
+ for (spat = stash->tbl_spatroot;
+ spat != Nullspat;
+ spat = spat->spat_next) {
+ spat->spat_flags &= ~SPAT_USED;
+ }
+ return;
+ }
+
+ /* reset variables */
+
+ if (!stash->tbl_array)
+ return;
+ while (*s) {
+ i = *s;
+ if (s[1] == '-') {
+ s += 2;
+ }
+ max = *s++;
+ for ( ; i <= max; i++) {
+ for (entry = stash->tbl_array[i];
+ entry;
+ entry = entry->hent_next) {
+ stab = (STAB*)entry->hent_val;
+ str = stab_val(stab);
+ str->str_cur = 0;
+ str->str_nok = 0;
+#ifdef TAINT
+ str->str_tainted = tainted;
+#endif
+ if (str->str_ptr != Nullch)
+ str->str_ptr[0] = '\0';
+ if (stab_xarray(stab)) {
+ aclear(stab_xarray(stab));
+ }
+ if (stab_xhash(stab)) {
+ hclear(stab_xhash(stab), FALSE);
+ if (stab == envstab)
+ environ[0] = Nullch;
+ }
+ }
+ }
+ }
+}
+
+#ifdef TAINT
+taintproper(s)
+char *s;
+{
+#ifdef DEBUGGING
+ if (debug & 2048)
+ fprintf(stderr,"%s %d %d %d\n",s,tainted,uid, euid);
+#endif
+ if (tainted && (!euid || euid != uid || egid != gid)) {
+ if (!unsafe)
+ fatal("%s", s);
+ else if (dowarn)
+ warn("%s", s);
+ }
+}
+
+taintenv()
+{
+ register STR *envstr;
+
+ envstr = hfetch(stab_hash(envstab),"PATH",4,FALSE);
+ if (envstr == &str_undef || envstr->str_tainted) {
+ tainted = 1;
+ if (envstr->str_tainted == 2)
+ taintproper("Insecure directory in PATH");
+ else
+ taintproper("Insecure PATH");
+ }
+ envstr = hfetch(stab_hash(envstab),"IFS",3,FALSE);
+ if (envstr != &str_undef && envstr->str_tainted) {
+ tainted = 1;
+ taintproper("Insecure IFS");
+ }
+}
+#endif /* TAINT */
diff --git a/MultiSource/Benchmarks/MallocBench/perl/str.h b/MultiSource/Benchmarks/MallocBench/perl/str.h
new file mode 100644
index 00000000..31c21e39
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/str.h
@@ -0,0 +1,140 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/12 09:16:12 lwall
+ * patch1: you may now use "die" and "caller" in a signal handler
+ *
+ * Revision 4.0 91/03/20 01:40:04 lwall
+ * 4.0 baseline.
+ *
+ */
+
+struct string {
+ char * str_ptr; /* pointer to malloced string */
+ STRLEN str_len; /* allocated size */
+ union {
+ double str_nval; /* numeric value, if any */
+ STAB *str_stab; /* magic stab for magic "key" string */
+ long str_useful; /* is this search optimization effective? */
+ ARG *str_args; /* list of args for interpreted string */
+ HASH *str_hash; /* string represents an assoc array (stab?) */
+ ARRAY *str_array; /* string represents an array */
+ CMD *str_cmd; /* command for this source line */
+ } str_u;
+ STRLEN str_cur; /* length of str_ptr as a C string */
+ STR *str_magic; /* while free, link to next free str */
+ /* while in use, ptr to "key" for magic items */
+ char str_pok; /* state of str_ptr */
+ char str_nok; /* state of str_nval */
+ unsigned char str_rare; /* used by search strings */
+ unsigned char str_state; /* one of SS_* below */
+ /* also used by search strings for backoff */
+#ifdef TAINT
+ bool str_tainted; /* 1 if possibly under control of $< */
+#endif
+};
+
+struct stab { /* should be identical, except for str_ptr */
+ STBP * str_ptr; /* pointer to malloced string */
+ STRLEN str_len; /* allocated size */
+ union {
+ double str_nval; /* numeric value, if any */
+ STAB *str_stab; /* magic stab for magic "key" string */
+ long str_useful; /* is this search optimization effective? */
+ ARG *str_args; /* list of args for interpreted string */
+ HASH *str_hash; /* string represents an assoc array (stab?) */
+ ARRAY *str_array; /* string represents an array */
+ CMD *str_cmd; /* command for this source line */
+ } str_u;
+ STRLEN str_cur; /* length of str_ptr as a C string */
+ STR *str_magic; /* while free, link to next free str */
+ /* while in use, ptr to "key" for magic items */
+ char str_pok; /* state of str_ptr */
+ char str_nok; /* state of str_nval */
+ unsigned char str_rare; /* used by search strings */
+ unsigned char str_state; /* one of SS_* below */
+ /* also used by search strings for backoff */
+#ifdef TAINT
+ bool str_tainted; /* 1 if possibly under control of $< */
+#endif
+};
+
+/* some extra info tacked to some lvalue strings */
+
+struct lstring {
+ struct string lstr;
+ STRLEN lstr_offset;
+ STRLEN lstr_len;
+};
+
+/* These are the values of str_pok: */
+#define SP_VALID 1 /* str_ptr is valid */
+#define SP_FBM 2 /* string was compiled for fbm search */
+#define SP_STUDIED 4 /* string was studied */
+#define SP_CASEFOLD 8 /* case insensitive fbm search */
+#define SP_INTRP 16 /* string was compiled for interping */
+#define SP_TAIL 32 /* fbm string is tail anchored: /foo$/ */
+#define SP_MULTI 64 /* symbol table entry probably isn't a typo */
+#define SP_TEMP 128 /* string slated to die, so can be plundered */
+
+#define Nullstr Null(STR*)
+
+/* These are the values of str_state: */
+#define SS_NORM 0 /* normal string */
+#define SS_INCR 1 /* normal string, incremented ptr */
+#define SS_SARY 2 /* array on save stack */
+#define SS_SHASH 3 /* associative array on save stack */
+#define SS_SINT 4 /* integer on save stack */
+#define SS_SLONG 5 /* long on save stack */
+#define SS_SSTRP 6 /* STR* on save stack */
+#define SS_SHPTR 7 /* HASH* on save stack */
+#define SS_SNSTAB 8 /* non-stab on save stack */
+#define SS_SCSV 9 /* callsave structure on save stack */
+#define SS_SAPTR 10 /* ARRAY* on save stack */
+#define SS_HASH 253 /* carrying an hash */
+#define SS_ARY 254 /* carrying an array */
+#define SS_FREE 255 /* in free list */
+/* str_state may have any value 0-255 when used to hold fbm pattern, in which */
+/* case it indicates offset to rarest character in screaminstr key */
+
+/* the following macro updates any magic values this str is associated with */
+
+#ifdef TAINT
+#define STABSET(x) \
+ (x)->str_tainted |= tainted; \
+ if ((x)->str_magic) \
+ stabset((x)->str_magic,(x))
+#else
+#define STABSET(x) \
+ if ((x)->str_magic) \
+ stabset((x)->str_magic,(x))
+#endif
+
+#define STR_SSET(dst,src) if (dst != src) str_sset(dst,src)
+
+EXT STR **tmps_list;
+EXT int tmps_max INIT(-1);
+EXT int tmps_base INIT(-1);
+
+char *str_2ptr();
+double str_2num();
+STR *str_mortal();
+STR *str_2mortal();
+STR *str_make();
+STR *str_nmake();
+STR *str_smake();
+int str_cmp();
+int str_eq();
+void str_magic();
+void str_insert();
+STRLEN str_len();
diff --git a/MultiSource/Benchmarks/MallocBench/perl/toke.c b/MultiSource/Benchmarks/MallocBench/perl/toke.c
new file mode 100644
index 00000000..9e941bbb
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/toke.c
@@ -0,0 +1,2531 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:16 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/12 09:18:18 lwall
+ * patch1: perl -de "print" wouldn't stop at the first statement
+ *
+ * Revision 4.0 91/03/20 01:42:14 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "perly.h"
+
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+
+/* which backslash sequences to keep in m// or s// */
+
+static char *patleave = "\\.^$@dDwWsSbB+*?|()-nrtf0123456789[{]}";
+
+char *reparse; /* if non-null, scanident found ${foo[$bar]} */
+
+void checkcomma();
+
+#ifdef CLINE
+#undef CLINE
+#endif
+#define CLINE (cmdline = (curcmd->c_line < cmdline ? curcmd->c_line : cmdline))
+
+#define META(c) ((c) | 128)
+
+#define RETURN(retval) return (bufptr = s,(int)retval)
+#define OPERATOR(retval) return (expectterm = TRUE,bufptr = s,(int)retval)
+#define TERM(retval) return (CLINE, expectterm = FALSE,bufptr = s,(int)retval)
+#define LOOPX(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)LOOPEX)
+#define FTST(f) return(yylval.ival=f,expectterm = TRUE,bufptr = s,(int)FILETEST)
+#define FUN0(f) return(yylval.ival = f,expectterm = FALSE,bufptr = s,(int)FUNC0)
+#define FUN1(f) return(yylval.ival = f,expectterm = FALSE,bufptr = s,(int)FUNC1)
+#define FUN2(f) return(yylval.ival = f,expectterm = FALSE,bufptr = s,(int)FUNC2)
+#define FUN2x(f) return(yylval.ival = f,expectterm = FALSE,bufptr = s,(int)FUNC2x)
+#define FUN3(f) return(yylval.ival = f,expectterm = FALSE,bufptr = s,(int)FUNC3)
+#define FUN4(f) return(yylval.ival = f,expectterm = FALSE,bufptr = s,(int)FUNC4)
+#define FUN5(f) return(yylval.ival = f,expectterm = FALSE,bufptr = s,(int)FUNC5)
+#define FL(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)FLIST)
+#define FL2(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)FLIST2)
+#define HFUN(f) return(yylval.ival=f,expectterm = TRUE,bufptr = s,(int)HSHFUN)
+#define HFUN3(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)HSHFUN3)
+#define LFUN(f) return(yylval.ival=f,expectterm = TRUE,bufptr = s,(int)LVALFUN)
+#define AOP(f) return(yylval.ival=f,expectterm = TRUE,bufptr = s,(int)ADDOP)
+#define MOP(f) return(yylval.ival=f,expectterm = TRUE,bufptr = s,(int)MULOP)
+#define EOP(f) return(yylval.ival=f,expectterm = TRUE,bufptr = s,(int)EQOP)
+#define ROP(f) return(yylval.ival=f,expectterm = TRUE,bufptr = s,(int)RELOP)
+#define FOP(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)FILOP)
+#define FOP2(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)FILOP2)
+#define FOP3(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)FILOP3)
+#define FOP4(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)FILOP4)
+#define FOP22(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)FILOP22)
+#define FOP25(f) return(yylval.ival=f,expectterm = FALSE,bufptr = s,(int)FILOP25)
+
+/* This bit of chicanery makes a unary function followed by
+ * a parenthesis into a function with one argument, highest precedence.
+ */
+#define UNI(f) return(yylval.ival = f,expectterm = TRUE,bufptr = s, \
+ (*s == '(' || (s = skipspace(s), *s == '(') ? (int)FUNC1 : (int)UNIOP) )
+
+/* This does similarly for list operators, merely by pretending that the
+ * paren came before the listop rather than after.
+ */
+#define LOP(f) return(CLINE, *s == '(' || (s = skipspace(s), *s == '(') ? \
+ (*s = META('('), bufptr = oldbufptr, '(') : \
+ (yylval.ival=f,expectterm = TRUE,bufptr = s,(int)LISTOP))
+/* grandfather return to old style */
+#define OLDLOP(f) return(yylval.ival=f,expectterm = TRUE,bufptr = s,(int)LISTOP)
+
+char *
+skipspace(s)
+register char *s;
+{
+ while (s < bufend && isascii(*s) && isspace(*s))
+ s++;
+ return s;
+}
+
+#ifdef CRIPPLED_CC
+
+#undef UNI
+#undef LOP
+#define UNI(f) return uni(f,s)
+#define LOP(f) return lop(f,s)
+
+int
+uni(f,s)
+int f;
+char *s;
+{
+ yylval.ival = f;
+ expectterm = TRUE;
+ bufptr = s;
+ if (*s == '(')
+ return FUNC1;
+ s = skipspace(s);
+ if (*s == '(')
+ return FUNC1;
+ else
+ return UNIOP;
+}
+
+int
+lop(f,s)
+int f;
+char *s;
+{
+ CLINE;
+ if (*s != '(')
+ s = skipspace(s);
+ if (*s == '(') {
+ *s = META('(');
+ bufptr = oldbufptr;
+ return '(';
+ }
+ else {
+ yylval.ival=f;
+ expectterm = TRUE;
+ bufptr = s;
+ return LISTOP;
+ }
+}
+
+#endif /* CRIPPLED_CC */
+
+yylex()
+{
+ register char *s = bufptr;
+ register char *d;
+ register int tmp;
+ static bool in_format = FALSE;
+ static bool firstline = TRUE;
+ extern int yychar; /* last token */
+
+ oldoldbufptr = oldbufptr;
+ oldbufptr = s;
+
+ retry:
+#ifdef YYDEBUG
+ if (debug & 1)
+ if (index(s,'\n'))
+ fprintf(stderr,"Tokener at %s",s);
+ else
+ fprintf(stderr,"Tokener at %s\n",s);
+#endif
+#ifdef BADSWITCH
+ if (*s & 128) {
+ if ((*s & 127) == '(')
+ *s++ = '(';
+ else
+ warn("Unrecognized character \\%03o ignored", *s++ & 255);
+ goto retry;
+ }
+#endif
+ switch (*s) {
+ default:
+ if ((*s & 127) == '(')
+ *s++ = '(';
+ else
+ warn("Unrecognized character \\%03o ignored", *s++ & 255);
+ goto retry;
+ case 4:
+ case 26:
+ goto fake_eof; /* emulate EOF on ^D or ^Z */
+ case 0:
+ if (!rsfp)
+ RETURN(0);
+ if (s++ < bufend)
+ goto retry; /* ignore stray nulls */
+ if (firstline) {
+ firstline = FALSE;
+ if (minus_n || minus_p || perldb) {
+ str_set(linestr,"");
+ if (perldb) {
+ char *getenv();
+ char *pdb = getenv("PERLDB");
+
+ str_cat(linestr, pdb ? pdb : "require 'perldb.pl'");
+ str_cat(linestr, ";");
+ }
+ if (minus_n || minus_p) {
+ str_cat(linestr,"line: while (<>) {");
+ if (minus_l)
+ str_cat(linestr,"chop;");
+ if (minus_a)
+ str_cat(linestr,"@F=split(' ');");
+ }
+ oldoldbufptr = oldbufptr = s = str_get(linestr);
+ bufend = linestr->str_ptr + linestr->str_cur;
+ goto retry;
+ }
+ }
+ if (in_format) {
+ bufptr = bufend;
+ yylval.formval = load_format();
+ in_format = FALSE;
+ oldoldbufptr = oldbufptr = s = str_get(linestr) + 1;
+ bufend = linestr->str_ptr + linestr->str_cur;
+ OPERATOR(FORMLIST);
+ }
+ curcmd->c_line++;
+#ifdef CRYPTSCRIPT
+ cryptswitch();
+#endif /* CRYPTSCRIPT */
+ do {
+ if ((s = str_gets(linestr, rsfp, 0)) == Nullch) {
+ fake_eof:
+ if (rsfp) {
+ if (preprocess)
+ (void)mypclose(rsfp);
+ else if (rsfp == stdin)
+ clearerr(stdin);
+ else
+ (void)fclose(rsfp);
+ rsfp = Nullfp;
+ }
+ if (minus_n || minus_p) {
+ str_set(linestr,minus_p ? ";}continue{print" : "");
+ str_cat(linestr,";}");
+ oldoldbufptr = oldbufptr = s = str_get(linestr);
+ bufend = linestr->str_ptr + linestr->str_cur;
+ minus_n = minus_p = 0;
+ goto retry;
+ }
+ oldoldbufptr = oldbufptr = s = str_get(linestr);
+ str_set(linestr,"");
+ RETURN(';'); /* not infinite loop because rsfp is NULL now */
+ }
+ if (doextract && *linestr->str_ptr == '#')
+ doextract = FALSE;
+ } while (doextract);
+ oldoldbufptr = oldbufptr = bufptr = s;
+ if (perldb) {
+ STR *str = Str_new(85,0);
+
+ str_sset(str,linestr);
+ astore(stab_xarray(curcmd->c_filestab),(int)curcmd->c_line,str);
+ }
+#ifdef DEBUG
+ if (firstline) {
+ char *showinput();
+ s = showinput();
+ }
+#endif
+ bufend = linestr->str_ptr + linestr->str_cur;
+ if (curcmd->c_line == 1) {
+ if (*s == '#' && s[1] == '!') {
+ if (!in_eval && !instr(s,"perl") && instr(origargv[0],"perl")) {
+ char **newargv;
+ char *cmd;
+
+ s += 2;
+ if (*s == ' ')
+ s++;
+ cmd = s;
+ while (s < bufend && !isspace(*s))
+ s++;
+ *s++ = '\0';
+ while (s < bufend && isspace(*s))
+ s++;
+ if (s < bufend) {
+ Newz(899,newargv,origargc+3,char*);
+ newargv[1] = s;
+ while (s < bufend && !isspace(*s))
+ s++;
+ *s = '\0';
+ Copy(origargv+1, newargv+2, origargc+1, char*);
+ }
+ else
+ newargv = origargv;
+ newargv[0] = cmd;
+ execv(cmd,newargv);
+ fatal("Can't exec %s", cmd);
+ }
+ }
+ else {
+ while (s < bufend && isspace(*s))
+ s++;
+ if (*s == ':') /* for csh's that have to exec sh scripts */
+ s++;
+ }
+ }
+ goto retry;
+ case ' ': case '\t': case '\f': case '\r': case 013:
+ s++;
+ goto retry;
+ case '#':
+ if (preprocess && s == str_get(linestr) &&
+ s[1] == ' ' && isdigit(s[2])) {
+ curcmd->c_line = atoi(s+2)-1;
+ for (s += 2; isdigit(*s); s++) ;
+ d = bufend;
+ while (s < d && isspace(*s)) s++;
+ s[strlen(s)-1] = '\0'; /* wipe out newline */
+ if (*s == '"') {
+ s++;
+ s[strlen(s)-1] = '\0'; /* wipe out trailing quote */
+ }
+ if (*s)
+ curcmd->c_filestab = fstab(s);
+ else
+ curcmd->c_filestab = fstab(origfilename);
+ oldoldbufptr = oldbufptr = s = str_get(linestr);
+ }
+ /* FALL THROUGH */
+ case '\n':
+ if (in_eval && !rsfp) {
+ d = bufend;
+ while (s < d && *s != '\n')
+ s++;
+ if (s < d)
+ s++;
+ if (perldb) {
+ STR *str = Str_new(85,0);
+
+ str_nset(str,linestr->str_ptr, s - linestr->str_ptr);
+ astore(stab_xarray(curcmd->c_filestab),(int)curcmd->c_line,str);
+ str_chop(linestr, s);
+ }
+ if (in_format) {
+ bufptr = s;
+ yylval.formval = load_format();
+ in_format = FALSE;
+ oldoldbufptr = oldbufptr = s = bufptr + 1;
+ TERM(FORMLIST);
+ }
+ curcmd->c_line++;
+ }
+ else {
+ *s = '\0';
+ bufend = s;
+ }
+ goto retry;
+ case '-':
+ if (s[1] && isalpha(s[1]) && !isalpha(s[2])) {
+ s++;
+ switch (*s++) {
+ case 'r': FTST(O_FTEREAD);
+ case 'w': FTST(O_FTEWRITE);
+ case 'x': FTST(O_FTEEXEC);
+ case 'o': FTST(O_FTEOWNED);
+ case 'R': FTST(O_FTRREAD);
+ case 'W': FTST(O_FTRWRITE);
+ case 'X': FTST(O_FTREXEC);
+ case 'O': FTST(O_FTROWNED);
+ case 'e': FTST(O_FTIS);
+ case 'z': FTST(O_FTZERO);
+ case 's': FTST(O_FTSIZE);
+ case 'f': FTST(O_FTFILE);
+ case 'd': FTST(O_FTDIR);
+ case 'l': FTST(O_FTLINK);
+ case 'p': FTST(O_FTPIPE);
+ case 'S': FTST(O_FTSOCK);
+ case 'u': FTST(O_FTSUID);
+ case 'g': FTST(O_FTSGID);
+ case 'k': FTST(O_FTSVTX);
+ case 'b': FTST(O_FTBLK);
+ case 'c': FTST(O_FTCHR);
+ case 't': FTST(O_FTTTY);
+ case 'T': FTST(O_FTTEXT);
+ case 'B': FTST(O_FTBINARY);
+ case 'M': stabent("\024",TRUE); FTST(O_FTMTIME);
+ case 'A': stabent("\024",TRUE); FTST(O_FTATIME);
+ case 'C': stabent("\024",TRUE); FTST(O_FTCTIME);
+ default:
+ s -= 2;
+ break;
+ }
+ }
+ tmp = *s++;
+ if (*s == tmp) {
+ s++;
+ RETURN(DEC);
+ }
+ if (expectterm)
+ OPERATOR('-');
+ else
+ AOP(O_SUBTRACT);
+ case '+':
+ tmp = *s++;
+ if (*s == tmp) {
+ s++;
+ RETURN(INC);
+ }
+ if (expectterm)
+ OPERATOR('+');
+ else
+ AOP(O_ADD);
+
+ case '*':
+ if (expectterm) {
+ s = scanident(s,bufend,tokenbuf);
+ yylval.stabval = stabent(tokenbuf,TRUE);
+ TERM(STAR);
+ }
+ tmp = *s++;
+ if (*s == tmp) {
+ s++;
+ OPERATOR(POW);
+ }
+ MOP(O_MULTIPLY);
+ case '%':
+ if (expectterm) {
+ s = scanident(s,bufend,tokenbuf);
+ yylval.stabval = hadd(stabent(tokenbuf,TRUE));
+ TERM(HSH);
+ }
+ s++;
+ MOP(O_MODULO);
+
+ case '^':
+ case '~':
+ case '(':
+ case ',':
+ case ':':
+ case '[':
+ tmp = *s++;
+ OPERATOR(tmp);
+ case '{':
+ tmp = *s++;
+ if (isspace(*s) || *s == '#')
+ cmdline = NOLINE; /* invalidate current command line number */
+ OPERATOR(tmp);
+ case ';':
+ if (curcmd->c_line < cmdline)
+ cmdline = curcmd->c_line;
+ tmp = *s++;
+ OPERATOR(tmp);
+ case ')':
+ case ']':
+ tmp = *s++;
+ TERM(tmp);
+ case '}':
+ tmp = *s++;
+ RETURN(tmp);
+ case '&':
+ s++;
+ tmp = *s++;
+ if (tmp == '&')
+ OPERATOR(ANDAND);
+ s--;
+ if (expectterm) {
+ d = bufend;
+ while (s < d && isspace(*s))
+ s++;
+ if (isalpha(*s) || *s == '_' || *s == '\'')
+ *(--s) = '\\'; /* force next ident to WORD */
+ OPERATOR(AMPER);
+ }
+ OPERATOR('&');
+ case '|':
+ s++;
+ tmp = *s++;
+ if (tmp == '|')
+ OPERATOR(OROR);
+ s--;
+ OPERATOR('|');
+ case '=':
+ s++;
+ tmp = *s++;
+ if (tmp == '=')
+ EOP(O_EQ);
+ if (tmp == '~')
+ OPERATOR(MATCH);
+ s--;
+ OPERATOR('=');
+ case '!':
+ s++;
+ tmp = *s++;
+ if (tmp == '=')
+ EOP(O_NE);
+ if (tmp == '~')
+ OPERATOR(NMATCH);
+ s--;
+ OPERATOR('!');
+ case '<':
+ if (expectterm) {
+ s = scanstr(s);
+ TERM(RSTRING);
+ }
+ s++;
+ tmp = *s++;
+ if (tmp == '<')
+ OPERATOR(LS);
+ if (tmp == '=') {
+ tmp = *s++;
+ if (tmp == '>')
+ EOP(O_NCMP);
+ s--;
+ ROP(O_LE);
+ }
+ s--;
+ ROP(O_LT);
+ case '>':
+ s++;
+ tmp = *s++;
+ if (tmp == '>')
+ OPERATOR(RS);
+ if (tmp == '=')
+ ROP(O_GE);
+ s--;
+ ROP(O_GT);
+
+#define SNARFWORD \
+ d = tokenbuf; \
+ while (isascii(*s) && \
+ (isalpha(*s) || isdigit(*s) || *s == '_' || *s == '\'')) \
+ *d++ = *s++; \
+ while (d[-1] == '\'') \
+ d--,s--; \
+ *d = '\0'; \
+ d = tokenbuf;
+
+ case '$':
+ if (s[1] == '#' && (isalpha(s[2]) || s[2] == '_')) {
+ s++;
+ s = scanident(s,bufend,tokenbuf);
+ yylval.stabval = aadd(stabent(tokenbuf,TRUE));
+ TERM(ARYLEN);
+ }
+ d = s;
+ s = scanident(s,bufend,tokenbuf);
+ if (reparse) { /* turn ${foo[bar]} into ($foo[bar]) */
+ do_reparse:
+ s[-1] = ')';
+ s = d;
+ s[1] = s[0];
+ s[0] = '(';
+ goto retry;
+ }
+ yylval.stabval = stabent(tokenbuf,TRUE);
+ TERM(REG);
+
+ case '@':
+ d = s;
+ s = scanident(s,bufend,tokenbuf);
+ if (reparse)
+ goto do_reparse;
+ yylval.stabval = aadd(stabent(tokenbuf,TRUE));
+ TERM(ARY);
+
+ case '/': /* may either be division or pattern */
+ case '?': /* may either be conditional or pattern */
+ if (expectterm) {
+ s = scanpat(s);
+ TERM(PATTERN);
+ }
+ tmp = *s++;
+ if (tmp == '/')
+ MOP(O_DIVIDE);
+ OPERATOR(tmp);
+
+ case '.':
+ if (!expectterm || !isdigit(s[1])) {
+ tmp = *s++;
+ if (*s == tmp) {
+ s++;
+ OPERATOR(DOTDOT);
+ }
+ AOP(O_CONCAT);
+ }
+ /* FALL THROUGH */
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case '\'': case '"': case '`':
+ s = scanstr(s);
+ TERM(RSTRING);
+
+ case '\\': /* some magic to force next word to be a WORD */
+ s++; /* used by do and sub to force a separate namespace */
+ /* FALL THROUGH */
+ case '_':
+ SNARFWORD;
+ if (d[1] == '_') {
+ if (strEQ(d,"__LINE__") || strEQ(d,"__FILE__")) {
+ ARG *arg = op_new(1);
+
+ yylval.arg = arg;
+ arg->arg_type = O_ITEM;
+ if (d[2] == 'L')
+ (void)sprintf(tokenbuf,"%ld",(long)curcmd->c_line);
+ else
+ strcpy(tokenbuf, stab_val(curcmd->c_filestab)->str_ptr);
+ arg[1].arg_type = A_SINGLE;
+ arg[1].arg_ptr.arg_str = str_make(tokenbuf,strlen(tokenbuf));
+ TERM(RSTRING);
+ }
+ else if (strEQ(d,"__END__")) {
+#ifndef TAINT
+ STAB *stab;
+ int fd;
+
+ if (stab = stabent("DATA",FALSE)) {
+ stab->str_pok |= SP_MULTI;
+ stab_io(stab) = stio_new();
+ stab_io(stab)->ifp = rsfp;
+#if defined(HAS_FCNTL) && defined(F_SETFD)
+ fd = fileno(rsfp);
+ fcntl(fd,F_SETFD,fd >= 3);
+#endif
+ if (preprocess)
+ stab_io(stab)->type = '|';
+ else if (rsfp == stdin)
+ stab_io(stab)->type = '-';
+ else
+ stab_io(stab)->type = '<';
+ rsfp = Nullfp;
+ }
+#endif
+ goto fake_eof;
+ }
+ }
+ break;
+ case 'a': case 'A':
+ SNARFWORD;
+ if (strEQ(d,"alarm"))
+ UNI(O_ALARM);
+ if (strEQ(d,"accept"))
+ FOP22(O_ACCEPT);
+ if (strEQ(d,"atan2"))
+ FUN2(O_ATAN2);
+ break;
+ case 'b': case 'B':
+ SNARFWORD;
+ if (strEQ(d,"bind"))
+ FOP2(O_BIND);
+ if (strEQ(d,"binmode"))
+ FOP(O_BINMODE);
+ break;
+ case 'c': case 'C':
+ SNARFWORD;
+ if (strEQ(d,"chop"))
+ LFUN(O_CHOP);
+ if (strEQ(d,"continue"))
+ OPERATOR(CONTINUE);
+ if (strEQ(d,"chdir")) {
+ (void)stabent("ENV",TRUE); /* may use HOME */
+ UNI(O_CHDIR);
+ }
+ if (strEQ(d,"close"))
+ FOP(O_CLOSE);
+ if (strEQ(d,"closedir"))
+ FOP(O_CLOSEDIR);
+ if (strEQ(d,"cmp"))
+ EOP(O_SCMP);
+ if (strEQ(d,"caller"))
+ UNI(O_CALLER);
+ if (strEQ(d,"crypt")) {
+#ifdef FCRYPT
+ init_des();
+#endif
+ FUN2(O_CRYPT);
+ }
+ if (strEQ(d,"chmod"))
+ LOP(O_CHMOD);
+ if (strEQ(d,"chown"))
+ LOP(O_CHOWN);
+ if (strEQ(d,"connect"))
+ FOP2(O_CONNECT);
+ if (strEQ(d,"cos"))
+ UNI(O_COS);
+ if (strEQ(d,"chroot"))
+ UNI(O_CHROOT);
+ break;
+ case 'd': case 'D':
+ SNARFWORD;
+ if (strEQ(d,"do")) {
+ d = bufend;
+ while (s < d && isspace(*s))
+ s++;
+ if (isalpha(*s) || *s == '_')
+ *(--s) = '\\'; /* force next ident to WORD */
+ OPERATOR(DO);
+ }
+ if (strEQ(d,"die"))
+ LOP(O_DIE);
+ if (strEQ(d,"defined"))
+ LFUN(O_DEFINED);
+ if (strEQ(d,"delete"))
+ OPERATOR(DELETE);
+ if (strEQ(d,"dbmopen"))
+ HFUN3(O_DBMOPEN);
+ if (strEQ(d,"dbmclose"))
+ HFUN(O_DBMCLOSE);
+ if (strEQ(d,"dump"))
+ LOOPX(O_DUMP);
+ break;
+ case 'e': case 'E':
+ SNARFWORD;
+ if (strEQ(d,"else"))
+ OPERATOR(ELSE);
+ if (strEQ(d,"elsif")) {
+ yylval.ival = curcmd->c_line;
+ OPERATOR(ELSIF);
+ }
+ if (strEQ(d,"eq") || strEQ(d,"EQ"))
+ EOP(O_SEQ);
+ if (strEQ(d,"exit"))
+ UNI(O_EXIT);
+ if (strEQ(d,"eval")) {
+ allstabs = TRUE; /* must initialize everything since */
+ UNI(O_EVAL); /* we don't know what will be used */
+ }
+ if (strEQ(d,"eof"))
+ FOP(O_EOF);
+ if (strEQ(d,"exp"))
+ UNI(O_EXP);
+ if (strEQ(d,"each"))
+ HFUN(O_EACH);
+ if (strEQ(d,"exec")) {
+ set_csh();
+ LOP(O_EXEC_OP);
+ }
+ if (strEQ(d,"endhostent"))
+ FUN0(O_EHOSTENT);
+ if (strEQ(d,"endnetent"))
+ FUN0(O_ENETENT);
+ if (strEQ(d,"endservent"))
+ FUN0(O_ESERVENT);
+ if (strEQ(d,"endprotoent"))
+ FUN0(O_EPROTOENT);
+ if (strEQ(d,"endpwent"))
+ FUN0(O_EPWENT);
+ if (strEQ(d,"endgrent"))
+ FUN0(O_EGRENT);
+ break;
+ case 'f': case 'F':
+ SNARFWORD;
+ if (strEQ(d,"for") || strEQ(d,"foreach")) {
+ yylval.ival = curcmd->c_line;
+ OPERATOR(FOR);
+ }
+ if (strEQ(d,"format")) {
+ d = bufend;
+ while (s < d && isspace(*s))
+ s++;
+ if (isalpha(*s) || *s == '_')
+ *(--s) = '\\'; /* force next ident to WORD */
+ in_format = TRUE;
+ allstabs = TRUE; /* must initialize everything since */
+ OPERATOR(FORMAT); /* we don't know what will be used */
+ }
+ if (strEQ(d,"fork"))
+ FUN0(O_FORK);
+ if (strEQ(d,"fcntl"))
+ FOP3(O_FCNTL);
+ if (strEQ(d,"fileno"))
+ FOP(O_FILENO);
+ if (strEQ(d,"flock"))
+ FOP2(O_FLOCK);
+ break;
+ case 'g': case 'G':
+ SNARFWORD;
+ if (strEQ(d,"gt") || strEQ(d,"GT"))
+ ROP(O_SGT);
+ if (strEQ(d,"ge") || strEQ(d,"GE"))
+ ROP(O_SGE);
+ if (strEQ(d,"grep"))
+ FL2(O_GREP);
+ if (strEQ(d,"goto"))
+ LOOPX(O_GOTO);
+ if (strEQ(d,"gmtime"))
+ UNI(O_GMTIME);
+ if (strEQ(d,"getc"))
+ FOP(O_GETC);
+ if (strnEQ(d,"get",3)) {
+ d += 3;
+ if (*d == 'p') {
+ if (strEQ(d,"ppid"))
+ FUN0(O_GETPPID);
+ if (strEQ(d,"pgrp"))
+ UNI(O_GETPGRP);
+ if (strEQ(d,"priority"))
+ FUN2(O_GETPRIORITY);
+ if (strEQ(d,"protobyname"))
+ UNI(O_GPBYNAME);
+ if (strEQ(d,"protobynumber"))
+ FUN1(O_GPBYNUMBER);
+ if (strEQ(d,"protoent"))
+ FUN0(O_GPROTOENT);
+ if (strEQ(d,"pwent"))
+ FUN0(O_GPWENT);
+ if (strEQ(d,"pwnam"))
+ FUN1(O_GPWNAM);
+ if (strEQ(d,"pwuid"))
+ FUN1(O_GPWUID);
+ if (strEQ(d,"peername"))
+ FOP(O_GETPEERNAME);
+ }
+ else if (*d == 'h') {
+ if (strEQ(d,"hostbyname"))
+ UNI(O_GHBYNAME);
+ if (strEQ(d,"hostbyaddr"))
+ FUN2(O_GHBYADDR);
+ if (strEQ(d,"hostent"))
+ FUN0(O_GHOSTENT);
+ }
+ else if (*d == 'n') {
+ if (strEQ(d,"netbyname"))
+ UNI(O_GNBYNAME);
+ if (strEQ(d,"netbyaddr"))
+ FUN2(O_GNBYADDR);
+ if (strEQ(d,"netent"))
+ FUN0(O_GNETENT);
+ }
+ else if (*d == 's') {
+ if (strEQ(d,"servbyname"))
+ FUN2(O_GSBYNAME);
+ if (strEQ(d,"servbyport"))
+ FUN2(O_GSBYPORT);
+ if (strEQ(d,"servent"))
+ FUN0(O_GSERVENT);
+ if (strEQ(d,"sockname"))
+ FOP(O_GETSOCKNAME);
+ if (strEQ(d,"sockopt"))
+ FOP3(O_GSOCKOPT);
+ }
+ else if (*d == 'g') {
+ if (strEQ(d,"grent"))
+ FUN0(O_GGRENT);
+ if (strEQ(d,"grnam"))
+ FUN1(O_GGRNAM);
+ if (strEQ(d,"grgid"))
+ FUN1(O_GGRGID);
+ }
+ else if (*d == 'l') {
+ if (strEQ(d,"login"))
+ FUN0(O_GETLOGIN);
+ }
+ d -= 3;
+ }
+ break;
+ case 'h': case 'H':
+ SNARFWORD;
+ if (strEQ(d,"hex"))
+ UNI(O_HEX);
+ break;
+ case 'i': case 'I':
+ SNARFWORD;
+ if (strEQ(d,"if")) {
+ yylval.ival = curcmd->c_line;
+ OPERATOR(IF);
+ }
+ if (strEQ(d,"index"))
+ FUN2x(O_INDEX);
+ if (strEQ(d,"int"))
+ UNI(O_INT);
+ if (strEQ(d,"ioctl"))
+ FOP3(O_IOCTL);
+ break;
+ case 'j': case 'J':
+ SNARFWORD;
+ if (strEQ(d,"join"))
+ FL2(O_JOIN);
+ break;
+ case 'k': case 'K':
+ SNARFWORD;
+ if (strEQ(d,"keys"))
+ HFUN(O_KEYS);
+ if (strEQ(d,"kill"))
+ LOP(O_KILL);
+ break;
+ case 'l': case 'L':
+ SNARFWORD;
+ if (strEQ(d,"last"))
+ LOOPX(O_LAST);
+ if (strEQ(d,"local"))
+ OPERATOR(LOCAL);
+ if (strEQ(d,"length"))
+ UNI(O_LENGTH);
+ if (strEQ(d,"lt") || strEQ(d,"LT"))
+ ROP(O_SLT);
+ if (strEQ(d,"le") || strEQ(d,"LE"))
+ ROP(O_SLE);
+ if (strEQ(d,"localtime"))
+ UNI(O_LOCALTIME);
+ if (strEQ(d,"log"))
+ UNI(O_LOG);
+ if (strEQ(d,"link"))
+ FUN2(O_LINK);
+ if (strEQ(d,"listen"))
+ FOP2(O_LISTEN);
+ if (strEQ(d,"lstat"))
+ FOP(O_LSTAT);
+ break;
+ case 'm': case 'M':
+ if (s[1] == '\'') {
+ d = "m";
+ s++;
+ }
+ else {
+ SNARFWORD;
+ }
+ if (strEQ(d,"m")) {
+ s = scanpat(s-1);
+ if (yylval.arg)
+ TERM(PATTERN);
+ else
+ RETURN(1); /* force error */
+ }
+ switch (d[1]) {
+ case 'k':
+ if (strEQ(d,"mkdir"))
+ FUN2(O_MKDIR);
+ break;
+ case 's':
+ if (strEQ(d,"msgctl"))
+ FUN3(O_MSGCTL);
+ if (strEQ(d,"msgget"))
+ FUN2(O_MSGGET);
+ if (strEQ(d,"msgrcv"))
+ FUN5(O_MSGRCV);
+ if (strEQ(d,"msgsnd"))
+ FUN3(O_MSGSND);
+ break;
+ }
+ break;
+ case 'n': case 'N':
+ SNARFWORD;
+ if (strEQ(d,"next"))
+ LOOPX(O_NEXT);
+ if (strEQ(d,"ne") || strEQ(d,"NE"))
+ EOP(O_SNE);
+ break;
+ case 'o': case 'O':
+ SNARFWORD;
+ if (strEQ(d,"open"))
+ OPERATOR(OPEN);
+ if (strEQ(d,"ord"))
+ UNI(O_ORD);
+ if (strEQ(d,"oct"))
+ UNI(O_OCT);
+ if (strEQ(d,"opendir"))
+ FOP2(O_OPENDIR);
+ break;
+ case 'p': case 'P':
+ SNARFWORD;
+ if (strEQ(d,"print")) {
+ checkcomma(s,"filehandle");
+ LOP(O_PRINT);
+ }
+ if (strEQ(d,"printf")) {
+ checkcomma(s,"filehandle");
+ LOP(O_PRTF);
+ }
+ if (strEQ(d,"push")) {
+ yylval.ival = O_PUSH;
+ OPERATOR(PUSH);
+ }
+ if (strEQ(d,"pop"))
+ OPERATOR(POP);
+ if (strEQ(d,"pack"))
+ FL2(O_PACK);
+ if (strEQ(d,"package"))
+ OPERATOR(PACKAGE);
+ if (strEQ(d,"pipe"))
+ FOP22(O_PIPE);
+ break;
+ case 'q': case 'Q':
+ SNARFWORD;
+ if (strEQ(d,"q")) {
+ s = scanstr(s-1);
+ TERM(RSTRING);
+ }
+ if (strEQ(d,"qq")) {
+ s = scanstr(s-2);
+ TERM(RSTRING);
+ }
+ if (strEQ(d,"qx")) {
+ s = scanstr(s-2);
+ TERM(RSTRING);
+ }
+ break;
+ case 'r': case 'R':
+ SNARFWORD;
+ if (strEQ(d,"return"))
+ OLDLOP(O_RETURN);
+ if (strEQ(d,"require")) {
+ allstabs = TRUE; /* must initialize everything since */
+ UNI(O_REQUIRE); /* we don't know what will be used */
+ }
+ if (strEQ(d,"reset"))
+ UNI(O_RESET);
+ if (strEQ(d,"redo"))
+ LOOPX(O_REDO);
+ if (strEQ(d,"rename"))
+ FUN2(O_RENAME);
+ if (strEQ(d,"rand"))
+ UNI(O_RAND);
+ if (strEQ(d,"rmdir"))
+ UNI(O_RMDIR);
+ if (strEQ(d,"rindex"))
+ FUN2x(O_RINDEX);
+ if (strEQ(d,"read"))
+ FOP3(O_READ);
+ if (strEQ(d,"readdir"))
+ FOP(O_READDIR);
+ if (strEQ(d,"rewinddir"))
+ FOP(O_REWINDDIR);
+ if (strEQ(d,"recv"))
+ FOP4(O_RECV);
+ if (strEQ(d,"reverse"))
+ LOP(O_REVERSE);
+ if (strEQ(d,"readlink"))
+ UNI(O_READLINK);
+ break;
+ case 's': case 'S':
+ if (s[1] == '\'') {
+ d = "s";
+ s++;
+ }
+ else {
+ SNARFWORD;
+ }
+ if (strEQ(d,"s")) {
+ s = scansubst(s);
+ if (yylval.arg)
+ TERM(SUBST);
+ else
+ RETURN(1); /* force error */
+ }
+ switch (d[1]) {
+ case 'a':
+ case 'b':
+ break;
+ case 'c':
+ if (strEQ(d,"scalar"))
+ UNI(O_SCALAR);
+ break;
+ case 'd':
+ break;
+ case 'e':
+ if (strEQ(d,"select"))
+ OPERATOR(SSELECT);
+ if (strEQ(d,"seek"))
+ FOP3(O_SEEK);
+ if (strEQ(d,"semctl"))
+ FUN4(O_SEMCTL);
+ if (strEQ(d,"semget"))
+ FUN3(O_SEMGET);
+ if (strEQ(d,"semop"))
+ FUN2(O_SEMOP);
+ if (strEQ(d,"send"))
+ FOP3(O_SEND);
+ if (strEQ(d,"setpgrp"))
+ FUN2(O_SETPGRP);
+ if (strEQ(d,"setpriority"))
+ FUN3(O_SETPRIORITY);
+ if (strEQ(d,"sethostent"))
+ FUN1(O_SHOSTENT);
+ if (strEQ(d,"setnetent"))
+ FUN1(O_SNETENT);
+ if (strEQ(d,"setservent"))
+ FUN1(O_SSERVENT);
+ if (strEQ(d,"setprotoent"))
+ FUN1(O_SPROTOENT);
+ if (strEQ(d,"setpwent"))
+ FUN0(O_SPWENT);
+ if (strEQ(d,"setgrent"))
+ FUN0(O_SGRENT);
+ if (strEQ(d,"seekdir"))
+ FOP2(O_SEEKDIR);
+ if (strEQ(d,"setsockopt"))
+ FOP4(O_SSOCKOPT);
+ break;
+ case 'f':
+ case 'g':
+ break;
+ case 'h':
+ if (strEQ(d,"shift"))
+ TERM(SHIFT);
+ if (strEQ(d,"shmctl"))
+ FUN3(O_SHMCTL);
+ if (strEQ(d,"shmget"))
+ FUN3(O_SHMGET);
+ if (strEQ(d,"shmread"))
+ FUN4(O_SHMREAD);
+ if (strEQ(d,"shmwrite"))
+ FUN4(O_SHMWRITE);
+ if (strEQ(d,"shutdown"))
+ FOP2(O_SHUTDOWN);
+ break;
+ case 'i':
+ if (strEQ(d,"sin"))
+ UNI(O_SIN);
+ break;
+ case 'j':
+ case 'k':
+ break;
+ case 'l':
+ if (strEQ(d,"sleep"))
+ UNI(O_SLEEP);
+ break;
+ case 'm':
+ case 'n':
+ break;
+ case 'o':
+ if (strEQ(d,"socket"))
+ FOP4(O_SOCKET);
+ if (strEQ(d,"socketpair"))
+ FOP25(O_SOCKPAIR);
+ if (strEQ(d,"sort")) {
+ checkcomma(s,"subroutine name");
+ d = bufend;
+ while (s < d && isascii(*s) && isspace(*s)) s++;
+ if (*s == ';' || *s == ')') /* probably a close */
+ fatal("sort is now a reserved word");
+ if (isascii(*s) && (isalpha(*s) || *s == '_')) {
+ for (d = s; isalpha(*d) || isdigit(*d) || *d == '_'; d++) ;
+ strncpy(tokenbuf,s,d-s);
+ if (strNE(tokenbuf,"keys") &&
+ strNE(tokenbuf,"values") &&
+ strNE(tokenbuf,"split") &&
+ strNE(tokenbuf,"grep") &&
+ strNE(tokenbuf,"readdir") &&
+ strNE(tokenbuf,"unpack") &&
+ strNE(tokenbuf,"do") &&
+ (d >= bufend || isspace(*d)) )
+ *(--s) = '\\'; /* force next ident to WORD */
+ }
+ LOP(O_SORT);
+ }
+ break;
+ case 'p':
+ if (strEQ(d,"split"))
+ TERM(SPLIT);
+ if (strEQ(d,"sprintf"))
+ FL(O_SPRINTF);
+ if (strEQ(d,"splice")) {
+ yylval.ival = O_SPLICE;
+ OPERATOR(PUSH);
+ }
+ break;
+ case 'q':
+ if (strEQ(d,"sqrt"))
+ UNI(O_SQRT);
+ break;
+ case 'r':
+ if (strEQ(d,"srand"))
+ UNI(O_SRAND);
+ break;
+ case 's':
+ break;
+ case 't':
+ if (strEQ(d,"stat"))
+ FOP(O_STAT);
+ if (strEQ(d,"study")) {
+ sawstudy++;
+ LFUN(O_STUDY);
+ }
+ break;
+ case 'u':
+ if (strEQ(d,"substr"))
+ FUN2x(O_SUBSTR);
+ if (strEQ(d,"sub")) {
+ subline = curcmd->c_line;
+ d = bufend;
+ while (s < d && isspace(*s))
+ s++;
+ if (isalpha(*s) || *s == '_' || *s == '\'') {
+ if (perldb) {
+ str_sset(subname,curstname);
+ str_ncat(subname,"'",1);
+ for (d = s+1;
+ isalpha(*d) || isdigit(*d) || *d == '_' || *d == '\'';
+ d++);
+ if (d[-1] == '\'')
+ d--;
+ str_ncat(subname,s,d-s);
+ }
+ *(--s) = '\\'; /* force next ident to WORD */
+ }
+ else if (perldb)
+ str_set(subname,"?");
+ OPERATOR(SUB);
+ }
+ break;
+ case 'v':
+ case 'w':
+ case 'x':
+ break;
+ case 'y':
+ if (strEQ(d,"system")) {
+ set_csh();
+ LOP(O_SYSTEM);
+ }
+ if (strEQ(d,"symlink"))
+ FUN2(O_SYMLINK);
+ if (strEQ(d,"syscall"))
+ LOP(O_SYSCALL);
+ if (strEQ(d,"sysread"))
+ FOP3(O_SYSREAD);
+ if (strEQ(d,"syswrite"))
+ FOP3(O_SYSWRITE);
+ break;
+ case 'z':
+ break;
+ }
+ break;
+ case 't': case 'T':
+ SNARFWORD;
+ if (strEQ(d,"tr")) {
+ s = scantrans(s);
+ if (yylval.arg)
+ TERM(TRANS);
+ else
+ RETURN(1); /* force error */
+ }
+ if (strEQ(d,"tell"))
+ FOP(O_TELL);
+ if (strEQ(d,"telldir"))
+ FOP(O_TELLDIR);
+ if (strEQ(d,"time"))
+ FUN0(O_TIME);
+ if (strEQ(d,"times"))
+ FUN0(O_TMS);
+ if (strEQ(d,"truncate"))
+ FOP2(O_TRUNCATE);
+ break;
+ case 'u': case 'U':
+ SNARFWORD;
+ if (strEQ(d,"using"))
+ OPERATOR(USING);
+ if (strEQ(d,"until")) {
+ yylval.ival = curcmd->c_line;
+ OPERATOR(UNTIL);
+ }
+ if (strEQ(d,"unless")) {
+ yylval.ival = curcmd->c_line;
+ OPERATOR(UNLESS);
+ }
+ if (strEQ(d,"unlink"))
+ LOP(O_UNLINK);
+ if (strEQ(d,"undef"))
+ LFUN(O_UNDEF);
+ if (strEQ(d,"unpack"))
+ FUN2(O_UNPACK);
+ if (strEQ(d,"utime"))
+ LOP(O_UTIME);
+ if (strEQ(d,"umask"))
+ UNI(O_UMASK);
+ if (strEQ(d,"unshift")) {
+ yylval.ival = O_UNSHIFT;
+ OPERATOR(PUSH);
+ }
+ break;
+ case 'v': case 'V':
+ SNARFWORD;
+ if (strEQ(d,"values"))
+ HFUN(O_VALUES);
+ if (strEQ(d,"vec")) {
+ sawvec = TRUE;
+ FUN3(O_VEC);
+ }
+ break;
+ case 'w': case 'W':
+ SNARFWORD;
+ if (strEQ(d,"while")) {
+ yylval.ival = curcmd->c_line;
+ OPERATOR(WHILE);
+ }
+ if (strEQ(d,"warn"))
+ LOP(O_WARN);
+ if (strEQ(d,"wait"))
+ FUN0(O_WAIT);
+ if (strEQ(d,"waitpid"))
+ FUN2(O_WAITPID);
+ if (strEQ(d,"wantarray")) {
+ yylval.arg = op_new(1);
+ yylval.arg->arg_type = O_ITEM;
+ yylval.arg[1].arg_type = A_WANTARRAY;
+ TERM(RSTRING);
+ }
+ if (strEQ(d,"write"))
+ FOP(O_WRITE);
+ break;
+ case 'x': case 'X':
+ SNARFWORD;
+ if (!expectterm && strEQ(d,"x"))
+ MOP(O_REPEAT);
+ break;
+ case 'y': case 'Y':
+ if (s[1] == '\'') {
+ d = "y";
+ s++;
+ }
+ else {
+ SNARFWORD;
+ }
+ if (strEQ(d,"y")) {
+ s = scantrans(s);
+ TERM(TRANS);
+ }
+ break;
+ case 'z': case 'Z':
+ SNARFWORD;
+ break;
+ }
+ yylval.cval = savestr(d);
+ expectterm = FALSE;
+ if (oldoldbufptr && oldoldbufptr < bufptr) {
+ while (isspace(*oldoldbufptr))
+ oldoldbufptr++;
+ if (*oldoldbufptr == 'p' && strnEQ(oldoldbufptr,"print",5))
+ expectterm = TRUE;
+ else if (*oldoldbufptr == 's' && strnEQ(oldoldbufptr,"sort",4))
+ expectterm = TRUE;
+ }
+ return (CLINE, bufptr = s, (int)WORD);
+}
+
+void
+checkcomma(s,what)
+register char *s;
+char *what;
+{
+ char *someword;
+
+ if (*s == '(')
+ s++;
+ while (s < bufend && isascii(*s) && isspace(*s))
+ s++;
+ if (isascii(*s) && (isalpha(*s) || *s == '_')) {
+ someword = s++;
+ while (isalpha(*s) || isdigit(*s) || *s == '_')
+ s++;
+ while (s < bufend && isspace(*s))
+ s++;
+ if (*s == ',') {
+ *s = '\0';
+ someword = instr(
+ "tell eof times getlogin wait length shift umask getppid \
+ cos exp int log rand sin sqrt ord wantarray",
+ someword);
+ *s = ',';
+ if (someword)
+ return;
+ fatal("No comma allowed after %s", what);
+ }
+ }
+}
+
+char *
+scanident(s,send,dest)
+register char *s;
+register char *send;
+char *dest;
+{
+ register char *d;
+ int brackets = 0;
+
+ reparse = Nullch;
+ s++;
+ d = dest;
+ if (isdigit(*s)) {
+ while (isdigit(*s))
+ *d++ = *s++;
+ }
+ else {
+ while (isalpha(*s) || isdigit(*s) || *s == '_' || *s == '\'')
+ *d++ = *s++;
+ }
+ while (d > dest+1 && d[-1] == '\'')
+ d--,s--;
+ *d = '\0';
+ d = dest;
+ if (!*d) {
+ *d = *s++;
+ if (*d == '{' /* } */ ) {
+ d = dest;
+ brackets++;
+ while (s < send && brackets) {
+ if (!reparse && (d == dest || (*s && isascii(*s) &&
+ (isalpha(*s) || isdigit(*s) || *s == '_') ))) {
+ *d++ = *s++;
+ continue;
+ }
+ else if (!reparse)
+ reparse = s;
+ switch (*s++) {
+ /* { */
+ case '}':
+ brackets--;
+ if (reparse && reparse == s - 1)
+ reparse = Nullch;
+ break;
+ case '{': /* } */
+ brackets++;
+ break;
+ }
+ }
+ *d = '\0';
+ d = dest;
+ }
+ else
+ d[1] = '\0';
+ }
+ if (*d == '^' && (isupper(*s) || index("[\\]^_?",*s)))
+ *d = *s++ ^ 64;
+ return s;
+}
+
+STR *
+scanconst(string,len)
+char *string;
+int len;
+{
+ register STR *retstr;
+ register char *t;
+ register char *d;
+ register char *e;
+
+ if (index(string,'|')) {
+ return Nullstr;
+ }
+ retstr = Str_new(86,len);
+ str_nset(retstr,string,len);
+ t = str_get(retstr);
+ e = t + len;
+ retstr->str_u.str_useful = 100;
+ for (d=t; d < e; ) {
+ switch (*d) {
+ case '{':
+ if (isdigit(d[1]))
+ e = d;
+ else
+ goto defchar;
+ break;
+ case '.': case '[': case '$': case '(': case ')': case '|': case '+':
+ e = d;
+ break;
+ case '\\':
+ if (d[1] && index("wWbB0123456789sSdDlLuUE",d[1])) {
+ e = d;
+ break;
+ }
+ (void)bcopy(d+1,d,e-d);
+ e--;
+ switch(*d) {
+ case 'n':
+ *d = '\n';
+ break;
+ case 't':
+ *d = '\t';
+ break;
+ case 'f':
+ *d = '\f';
+ break;
+ case 'r':
+ *d = '\r';
+ break;
+ case 'e':
+ *d = '\033';
+ break;
+ case 'a':
+ *d = '\007';
+ break;
+ }
+ /* FALL THROUGH */
+ default:
+ defchar:
+ if (d[1] == '*' || (d[1] == '{' && d[2] == '0') || d[1] == '?') {
+ e = d;
+ break;
+ }
+ d++;
+ }
+ }
+ if (d == t) {
+ str_free(retstr);
+ return Nullstr;
+ }
+ *d = '\0';
+ retstr->str_cur = d - t;
+ return retstr;
+}
+
+char *
+scanpat(s)
+register char *s;
+{
+ register SPAT *spat;
+ register char *d;
+ register char *e;
+ int len;
+ SPAT savespat;
+ STR *str = Str_new(93,0);
+
+ Newz(801,spat,1,SPAT);
+ spat->spat_next = curstash->tbl_spatroot; /* link into spat list */
+ curstash->tbl_spatroot = spat;
+
+ switch (*s++) {
+ case 'm':
+ s++;
+ break;
+ case '/':
+ break;
+ case '?':
+ spat->spat_flags |= SPAT_ONCE;
+ break;
+ default:
+ fatal("panic: scanpat");
+ }
+ s = str_append_till(str,s,bufend,s[-1],patleave);
+ if (s >= bufend) {
+ str_free(str);
+ yyerror("Search pattern not terminated");
+ yylval.arg = Nullarg;
+ return s;
+ }
+ s++;
+ while (*s == 'i' || *s == 'o') {
+ if (*s == 'i') {
+ s++;
+ sawi = TRUE;
+ spat->spat_flags |= SPAT_FOLD;
+ }
+ if (*s == 'o') {
+ s++;
+ spat->spat_flags |= SPAT_KEEP;
+ }
+ }
+ len = str->str_cur;
+ e = str->str_ptr + len;
+ for (d = str->str_ptr; d < e; d++) {
+ if (*d == '\\')
+ d++;
+ else if ((*d == '$' && d[1] && d[1] != '|' && d[1] != ')') ||
+ (*d == '@')) {
+ register ARG *arg;
+
+ spat->spat_runtime = arg = op_new(1);
+ arg->arg_type = O_ITEM;
+ arg[1].arg_type = A_DOUBLE;
+ arg[1].arg_ptr.arg_str = str_smake(str);
+ d = scanident(d,bufend,buf);
+ (void)stabent(buf,TRUE); /* make sure it's created */
+ for (; d < e; d++) {
+ if (*d == '\\')
+ d++;
+ else if (*d == '$' && d[1] && d[1] != '|' && d[1] != ')') {
+ d = scanident(d,bufend,buf);
+ (void)stabent(buf,TRUE);
+ }
+ else if (*d == '@') {
+ d = scanident(d,bufend,buf);
+ if (strEQ(buf,"ARGV") || strEQ(buf,"ENV") ||
+ strEQ(buf,"SIG") || strEQ(buf,"INC"))
+ (void)stabent(buf,TRUE);
+ }
+ }
+ goto got_pat; /* skip compiling for now */
+ }
+ }
+ if (spat->spat_flags & SPAT_FOLD)
+#ifdef STRUCTCOPY
+ savespat = *spat;
+#else
+ (void)bcopy((char *)spat, (char *)&savespat, sizeof(SPAT));
+#endif
+ if (*str->str_ptr == '^') {
+ spat->spat_short = scanconst(str->str_ptr+1,len-1);
+ if (spat->spat_short) {
+ spat->spat_slen = spat->spat_short->str_cur;
+ if (spat->spat_slen == len - 1)
+ spat->spat_flags |= SPAT_ALL;
+ }
+ }
+ else {
+ spat->spat_flags |= SPAT_SCANFIRST;
+ spat->spat_short = scanconst(str->str_ptr,len);
+ if (spat->spat_short) {
+ spat->spat_slen = spat->spat_short->str_cur;
+ if (spat->spat_slen == len)
+ spat->spat_flags |= SPAT_ALL;
+ }
+ }
+ if ((spat->spat_flags & SPAT_ALL) && (spat->spat_flags & SPAT_SCANFIRST)) {
+ fbmcompile(spat->spat_short, spat->spat_flags & SPAT_FOLD);
+ spat->spat_regexp = regcomp(str->str_ptr,str->str_ptr+len,
+ spat->spat_flags & SPAT_FOLD);
+ /* Note that this regexp can still be used if someone says
+ * something like /a/ && s//b/; so we can't delete it.
+ */
+ }
+ else {
+ if (spat->spat_flags & SPAT_FOLD)
+#ifdef STRUCTCOPY
+ *spat = savespat;
+#else
+ (void)bcopy((char *)&savespat, (char *)spat, sizeof(SPAT));
+#endif
+ if (spat->spat_short)
+ fbmcompile(spat->spat_short, spat->spat_flags & SPAT_FOLD);
+ spat->spat_regexp = regcomp(str->str_ptr,str->str_ptr+len,
+ spat->spat_flags & SPAT_FOLD);
+ hoistmust(spat);
+ }
+ got_pat:
+ str_free(str);
+ yylval.arg = make_match(O_MATCH,stab2arg(A_STAB,defstab),spat);
+ return s;
+}
+
+char *
+scansubst(s)
+register char *s;
+{
+ register SPAT *spat;
+ register char *d;
+ register char *e;
+ int len;
+ STR *str = Str_new(93,0);
+
+ Newz(802,spat,1,SPAT);
+ spat->spat_next = curstash->tbl_spatroot; /* link into spat list */
+ curstash->tbl_spatroot = spat;
+
+ s = str_append_till(str,s+1,bufend,*s,patleave);
+ if (s >= bufend) {
+ str_free(str);
+ yyerror("Substitution pattern not terminated");
+ yylval.arg = Nullarg;
+ return s;
+ }
+ len = str->str_cur;
+ e = str->str_ptr + len;
+ for (d = str->str_ptr; d < e; d++) {
+ if (*d == '\\')
+ d++;
+ else if ((*d == '$' && d[1] && d[1] != '|' && /*(*/ d[1] != ')') ||
+ *d == '@' ) {
+ register ARG *arg;
+
+ spat->spat_runtime = arg = op_new(1);
+ arg->arg_type = O_ITEM;
+ arg[1].arg_type = A_DOUBLE;
+ arg[1].arg_ptr.arg_str = str_smake(str);
+ d = scanident(d,bufend,buf);
+ (void)stabent(buf,TRUE); /* make sure it's created */
+ for (; *d; d++) {
+ if (*d == '$' && d[1] && d[-1] != '\\' && d[1] != '|') {
+ d = scanident(d,bufend,buf);
+ (void)stabent(buf,TRUE);
+ }
+ else if (*d == '@' && d[-1] != '\\') {
+ d = scanident(d,bufend,buf);
+ if (strEQ(buf,"ARGV") || strEQ(buf,"ENV") ||
+ strEQ(buf,"SIG") || strEQ(buf,"INC"))
+ (void)stabent(buf,TRUE);
+ }
+ }
+ goto get_repl; /* skip compiling for now */
+ }
+ }
+ if (*str->str_ptr == '^') {
+ spat->spat_short = scanconst(str->str_ptr+1,len-1);
+ if (spat->spat_short)
+ spat->spat_slen = spat->spat_short->str_cur;
+ }
+ else {
+ spat->spat_flags |= SPAT_SCANFIRST;
+ spat->spat_short = scanconst(str->str_ptr,len);
+ if (spat->spat_short)
+ spat->spat_slen = spat->spat_short->str_cur;
+ }
+get_repl:
+ s = scanstr(s);
+ if (s >= bufend) {
+ str_free(str);
+ yyerror("Substitution replacement not terminated");
+ yylval.arg = Nullarg;
+ return s;
+ }
+ spat->spat_repl = yylval.arg;
+ spat->spat_flags |= SPAT_ONCE;
+ if ((spat->spat_repl[1].arg_type & A_MASK) == A_SINGLE)
+ spat->spat_flags |= SPAT_CONST;
+ else if ((spat->spat_repl[1].arg_type & A_MASK) == A_DOUBLE) {
+ STR *tmpstr;
+ register char *t;
+
+ spat->spat_flags |= SPAT_CONST;
+ tmpstr = spat->spat_repl[1].arg_ptr.arg_str;
+ e = tmpstr->str_ptr + tmpstr->str_cur;
+ for (t = tmpstr->str_ptr; t < e; t++) {
+ if (*t == '$' && t[1] && (index("`'&+0123456789",t[1]) ||
+ (t[1] == '{' /*}*/ && isdigit(t[2])) ))
+ spat->spat_flags &= ~SPAT_CONST;
+ }
+ }
+ while (*s == 'g' || *s == 'i' || *s == 'e' || *s == 'o') {
+ if (*s == 'e') {
+ s++;
+ if ((spat->spat_repl[1].arg_type & A_MASK) == A_DOUBLE)
+ spat->spat_repl[1].arg_type = A_SINGLE;
+ spat->spat_repl = make_op(O_EVAL,2,
+ spat->spat_repl,
+ Nullarg,
+ Nullarg);
+ spat->spat_flags &= ~SPAT_CONST;
+ }
+ if (*s == 'g') {
+ s++;
+ spat->spat_flags &= ~SPAT_ONCE;
+ }
+ if (*s == 'i') {
+ s++;
+ sawi = TRUE;
+ spat->spat_flags |= SPAT_FOLD;
+ if (!(spat->spat_flags & SPAT_SCANFIRST)) {
+ str_free(spat->spat_short); /* anchored opt doesn't do */
+ spat->spat_short = Nullstr; /* case insensitive match */
+ spat->spat_slen = 0;
+ }
+ }
+ if (*s == 'o') {
+ s++;
+ spat->spat_flags |= SPAT_KEEP;
+ }
+ }
+ if (spat->spat_short && (spat->spat_flags & SPAT_SCANFIRST))
+ fbmcompile(spat->spat_short, spat->spat_flags & SPAT_FOLD);
+ if (!spat->spat_runtime) {
+ spat->spat_regexp = regcomp(str->str_ptr,str->str_ptr+len,
+ spat->spat_flags & SPAT_FOLD);
+ hoistmust(spat);
+ }
+ yylval.arg = make_match(O_SUBST,stab2arg(A_STAB,defstab),spat);
+ str_free(str);
+ return s;
+}
+
+hoistmust(spat)
+register SPAT *spat;
+{
+ if (spat->spat_regexp->regmust) { /* is there a better short-circuit? */
+ if (spat->spat_short &&
+ str_eq(spat->spat_short,spat->spat_regexp->regmust))
+ {
+ if (spat->spat_flags & SPAT_SCANFIRST) {
+ str_free(spat->spat_short);
+ spat->spat_short = Nullstr;
+ }
+ else {
+ str_free(spat->spat_regexp->regmust);
+ spat->spat_regexp->regmust = Nullstr;
+ return;
+ }
+ }
+ if (!spat->spat_short || /* promote the better string */
+ ((spat->spat_flags & SPAT_SCANFIRST) &&
+ (spat->spat_short->str_cur < spat->spat_regexp->regmust->str_cur) )){
+ str_free(spat->spat_short); /* ok if null */
+ spat->spat_short = spat->spat_regexp->regmust;
+ spat->spat_regexp->regmust = Nullstr;
+ spat->spat_flags |= SPAT_SCANFIRST;
+ }
+ }
+}
+
+char *
+expand_charset(s,len,retlen)
+register char *s;
+int len;
+int *retlen;
+{
+ char t[520];
+ register char *d = t;
+ register int i;
+ register char *send = s + len;
+
+ while (s < send && d - t <= 256) {
+ if (s[1] == '-' && s+2 < send) {
+ for (i = (s[0] & 0377); i <= (s[2] & 0377); i++)
+ *d++ = i;
+ s += 3;
+ }
+ else
+ *d++ = *s++;
+ }
+ *d = '\0';
+ *retlen = d - t;
+ return nsavestr(t,d-t);
+}
+
+char *
+scantrans(s)
+register char *s;
+{
+ ARG *arg =
+ l(make_op(O_TRANS,2,stab2arg(A_STAB,defstab),Nullarg,Nullarg));
+ register char *t;
+ register char *r;
+ register short *tbl;
+ register int i;
+ register int j;
+ int tlen, rlen;
+ int squash;
+ int delete;
+ int complement;
+
+ New(803,tbl,256,short);
+ arg[2].arg_type = A_NULL;
+ arg[2].arg_ptr.arg_cval = (char*) tbl;
+ s = scanstr(s);
+ if (s >= bufend) {
+ yyerror("Translation pattern not terminated");
+ yylval.arg = Nullarg;
+ return s;
+ }
+ t = expand_charset(yylval.arg[1].arg_ptr.arg_str->str_ptr,
+ yylval.arg[1].arg_ptr.arg_str->str_cur,&tlen);
+ arg_free(yylval.arg);
+ s = scanstr(s-1);
+ if (s >= bufend) {
+ yyerror("Translation replacement not terminated");
+ yylval.arg = Nullarg;
+ return s;
+ }
+ complement = delete = squash = 0;
+ while (*s == 'c' || *s == 'd' || *s == 's') {
+ if (*s == 'c')
+ complement = 1;
+ else if (*s == 'd')
+ delete = 2;
+ else
+ squash = 1;
+ s++;
+ }
+ r = expand_charset(yylval.arg[1].arg_ptr.arg_str->str_ptr,
+ yylval.arg[1].arg_ptr.arg_str->str_cur,&rlen);
+ arg_free(yylval.arg);
+ arg[2].arg_len = delete|squash;
+ yylval.arg = arg;
+ if (!rlen && !delete) {
+ Safefree(r);
+ r = t; rlen = tlen;
+ }
+ if (complement) {
+ Zero(tbl, 256, short);
+ for (i = 0; i < tlen; i++)
+ tbl[t[i] & 0377] = -1;
+ for (i = 0, j = 0; i < 256; i++) {
+ if (!tbl[i]) {
+ if (j >= rlen) {
+ if (delete)
+ tbl[i] = -2;
+ else
+ tbl[i] = r[j-1];
+ }
+ else
+ tbl[i] = r[j++];
+ }
+ }
+ }
+ else {
+ for (i = 0; i < 256; i++)
+ tbl[i] = -1;
+ for (i = 0, j = 0; i < tlen; i++,j++) {
+ if (j >= rlen) {
+ if (delete) {
+ if (tbl[t[i] & 0377] == -1)
+ tbl[t[i] & 0377] = -2;
+ continue;
+ }
+ --j;
+ }
+ if (tbl[t[i] & 0377] == -1)
+ tbl[t[i] & 0377] = r[j] & 0377;
+ }
+ }
+ if (r != t)
+ Safefree(r);
+ Safefree(t);
+ return s;
+}
+
+char *
+scanstr(s)
+register char *s;
+{
+ register char term;
+ register char *d;
+ register ARG *arg;
+ register char *send;
+ register bool makesingle = FALSE;
+ register STAB *stab;
+ bool alwaysdollar = FALSE;
+ bool hereis = FALSE;
+ STR *herewas;
+ STR *str;
+ char *leave = "\\$@nrtfbeacx0123456789[{]}lLuUE"; /* which backslash sequences to keep */
+ int len;
+
+ arg = op_new(1);
+ yylval.arg = arg;
+ arg->arg_type = O_ITEM;
+
+ switch (*s) {
+ default: /* a substitution replacement */
+ arg[1].arg_type = A_DOUBLE;
+ makesingle = TRUE; /* maybe disable runtime scanning */
+ term = *s;
+ if (term == '\'')
+ leave = Nullch;
+ goto snarf_it;
+ case '0':
+ {
+ unsigned long i;
+ int shift;
+
+ arg[1].arg_type = A_SINGLE;
+ if (s[1] == 'x') {
+ shift = 4;
+ s += 2;
+ }
+ else if (s[1] == '.')
+ goto decimal;
+ else
+ shift = 3;
+ i = 0;
+ for (;;) {
+ switch (*s) {
+ default:
+ goto out;
+ case '8': case '9':
+ if (shift != 4)
+ yyerror("Illegal octal digit");
+ /* FALL THROUGH */
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7':
+ i <<= shift;
+ i += *s++ & 15;
+ break;
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+ if (shift != 4)
+ goto out;
+ i <<= 4;
+ i += (*s++ & 7) + 9;
+ break;
+ }
+ }
+ out:
+ str = Str_new(92,0);
+ str_numset(str,(double)i);
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_ptr = Nullch;
+ str->str_len = str->str_cur = 0;
+ }
+ arg[1].arg_ptr.arg_str = str;
+ }
+ break;
+ case '1': case '2': case '3': case '4': case '5':
+ case '6': case '7': case '8': case '9': case '.':
+ decimal:
+ arg[1].arg_type = A_SINGLE;
+ d = tokenbuf;
+ while (isdigit(*s) || *s == '_') {
+ if (*s == '_')
+ s++;
+ else
+ *d++ = *s++;
+ }
+ if (*s == '.' && s[1] && index("0123456789eE ;",s[1])) {
+ *d++ = *s++;
+ while (isdigit(*s) || *s == '_') {
+ if (*s == '_')
+ s++;
+ else
+ *d++ = *s++;
+ }
+ }
+ if (*s && index("eE",*s) && index("+-0123456789",s[1])) {
+ *d++ = *s++;
+ if (*s == '+' || *s == '-')
+ *d++ = *s++;
+ while (isdigit(*s))
+ *d++ = *s++;
+ }
+ *d = '\0';
+ str = Str_new(92,0);
+ str_numset(str,atof(tokenbuf));
+ if (str->str_ptr) {
+ Safefree(str->str_ptr);
+ str->str_ptr = Nullch;
+ str->str_len = str->str_cur = 0;
+ }
+ arg[1].arg_ptr.arg_str = str;
+ break;
+ case '<':
+ if (*++s == '<') {
+ hereis = TRUE;
+ d = tokenbuf;
+ if (!rsfp)
+ *d++ = '\n';
+ if (*++s && index("`'\"",*s)) {
+ term = *s++;
+ s = cpytill(d,s,bufend,term,&len);
+ if (s < bufend)
+ s++;
+ d += len;
+ }
+ else {
+ if (*s == '\\')
+ s++, term = '\'';
+ else
+ term = '"';
+ while (isascii(*s) && (isalpha(*s) || isdigit(*s) || *s == '_'))
+ *d++ = *s++;
+ } /* assuming tokenbuf won't clobber */
+ *d++ = '\n';
+ *d = '\0';
+ len = d - tokenbuf;
+ d = "\n";
+ if (rsfp || !(d=ninstr(s,bufend,d,d+1)))
+ herewas = str_make(s,bufend-s);
+ else
+ s--, herewas = str_make(s,d-s);
+ s += herewas->str_cur;
+ if (term == '\'')
+ goto do_single;
+ if (term == '`')
+ goto do_back;
+ goto do_double;
+ }
+ d = tokenbuf;
+ s = cpytill(d,s,bufend,'>',&len);
+ if (s < bufend)
+ s++;
+ if (*d == '$') d++;
+ while (*d &&
+ (isalpha(*d) || isdigit(*d) || *d == '_' || *d == '\''))
+ d++;
+ if (d - tokenbuf != len) {
+ d = tokenbuf;
+ arg[1].arg_type = A_GLOB;
+ d = nsavestr(d,len);
+ arg[1].arg_ptr.arg_stab = stab = genstab();
+ stab_io(stab) = stio_new();
+ stab_val(stab) = str_make(d,len);
+ Safefree(d);
+ set_csh();
+ }
+ else {
+ d = tokenbuf;
+ if (!len)
+ (void)strcpy(d,"ARGV");
+ if (*d == '$') {
+ arg[1].arg_type = A_INDREAD;
+ arg[1].arg_ptr.arg_stab = stabent(d+1,TRUE);
+ }
+ else {
+ arg[1].arg_type = A_READ;
+ arg[1].arg_ptr.arg_stab = stabent(d,TRUE);
+ if (!stab_io(arg[1].arg_ptr.arg_stab))
+ stab_io(arg[1].arg_ptr.arg_stab) = stio_new();
+ if (strEQ(d,"ARGV")) {
+ (void)aadd(arg[1].arg_ptr.arg_stab);
+ stab_io(arg[1].arg_ptr.arg_stab)->flags |=
+ IOF_ARGV|IOF_START;
+ }
+ }
+ }
+ break;
+
+ case 'q':
+ s++;
+ if (*s == 'q') {
+ s++;
+ goto do_double;
+ }
+ if (*s == 'x') {
+ s++;
+ goto do_back;
+ }
+ /* FALL THROUGH */
+ case '\'':
+ do_single:
+ term = *s;
+ arg[1].arg_type = A_SINGLE;
+ leave = Nullch;
+ goto snarf_it;
+
+ case '"':
+ do_double:
+ term = *s;
+ arg[1].arg_type = A_DOUBLE;
+ makesingle = TRUE; /* maybe disable runtime scanning */
+ alwaysdollar = TRUE; /* treat $) and $| as variables */
+ goto snarf_it;
+ case '`':
+ do_back:
+ term = *s;
+ arg[1].arg_type = A_BACKTICK;
+ set_csh();
+ alwaysdollar = TRUE; /* treat $) and $| as variables */
+ snarf_it:
+ {
+ STR *tmpstr;
+ char *tmps;
+
+ multi_start = curcmd->c_line;
+ if (hereis)
+ multi_open = multi_close = '<';
+ else {
+ multi_open = term;
+ if (term && (tmps = index("([{< )]}> )]}>",term)))
+ term = tmps[5];
+ multi_close = term;
+ }
+ tmpstr = Str_new(87,80);
+ if (hereis) {
+ term = *tokenbuf;
+ if (!rsfp) {
+ d = s;
+ while (s < bufend &&
+ (*s != term || bcmp(s,tokenbuf,len) != 0) ) {
+ if (*s++ == '\n')
+ curcmd->c_line++;
+ }
+ if (s >= bufend) {
+ curcmd->c_line = multi_start;
+ fatal("EOF in string");
+ }
+ str_nset(tmpstr,d+1,s-d);
+ s += len - 1;
+ str_ncat(herewas,s,bufend-s);
+ str_replace(linestr,herewas);
+ oldoldbufptr = oldbufptr = bufptr = s = str_get(linestr);
+ bufend = linestr->str_ptr + linestr->str_cur;
+ hereis = FALSE;
+ }
+ else
+ str_nset(tmpstr,"",0); /* avoid "uninitialized" warning */
+ }
+ else
+ s = str_append_till(tmpstr,s+1,bufend,term,leave);
+ while (s >= bufend) { /* multiple line string? */
+ if (!rsfp ||
+ !(oldoldbufptr = oldbufptr = s = str_gets(linestr, rsfp, 0))) {
+ curcmd->c_line = multi_start;
+ fatal("EOF in string");
+ }
+ curcmd->c_line++;
+ if (perldb) {
+ STR *str = Str_new(88,0);
+
+ str_sset(str,linestr);
+ astore(stab_xarray(curcmd->c_filestab),
+ (int)curcmd->c_line,str);
+ }
+ bufend = linestr->str_ptr + linestr->str_cur;
+ if (hereis) {
+ if (*s == term && bcmp(s,tokenbuf,len) == 0) {
+ s = bufend - 1;
+ *s = ' ';
+ str_scat(linestr,herewas);
+ bufend = linestr->str_ptr + linestr->str_cur;
+ }
+ else {
+ s = bufend;
+ str_scat(tmpstr,linestr);
+ }
+ }
+ else
+ s = str_append_till(tmpstr,s,bufend,term,leave);
+ }
+ multi_end = curcmd->c_line;
+ s++;
+ if (tmpstr->str_cur + 5 < tmpstr->str_len) {
+ tmpstr->str_len = tmpstr->str_cur + 1;
+ Renew(tmpstr->str_ptr, tmpstr->str_len, char);
+ }
+ if ((arg[1].arg_type & A_MASK) == A_SINGLE) {
+ arg[1].arg_ptr.arg_str = tmpstr;
+ break;
+ }
+ tmps = s;
+ s = tmpstr->str_ptr;
+ send = s + tmpstr->str_cur;
+ while (s < send) { /* see if we can make SINGLE */
+ if (*s == '\\' && s[1] && isdigit(s[1]) && !isdigit(s[2]) &&
+ !alwaysdollar && s[1] != '0')
+ *s = '$'; /* grandfather \digit in subst */
+ if ((*s == '$' || *s == '@') && s+1 < send &&
+ (alwaysdollar || (s[1] != ')' && s[1] != '|'))) {
+ makesingle = FALSE; /* force interpretation */
+ }
+ else if (*s == '\\' && s+1 < send) {
+ if (index("lLuUE",s[1]))
+ makesingle = FALSE;
+ s++;
+ }
+ s++;
+ }
+ s = d = tmpstr->str_ptr; /* assuming shrinkage only */
+ while (s < send) {
+ if ((*s == '$' && s+1 < send &&
+ (alwaysdollar || /*(*/ (s[1] != ')' && s[1] != '|')) ) ||
+ (*s == '@' && s+1 < send) ) {
+ len = scanident(s,send,tokenbuf) - s;
+ if (*s == '$' || strEQ(tokenbuf,"ARGV")
+ || strEQ(tokenbuf,"ENV")
+ || strEQ(tokenbuf,"SIG")
+ || strEQ(tokenbuf,"INC") )
+ (void)stabent(tokenbuf,TRUE); /* make sure it exists */
+ while (len--)
+ *d++ = *s++;
+ continue;
+ }
+ else if (*s == '\\' && s+1 < send) {
+ s++;
+ switch (*s) {
+ default:
+ if (!makesingle && (!leave || (*s && index(leave,*s))))
+ *d++ = '\\';
+ *d++ = *s++;
+ continue;
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ *d++ = scanoct(s, 3, &len);
+ s += len;
+ continue;
+ case 'x':
+ *d++ = scanhex(++s, 2, &len);
+ s += len;
+ continue;
+ case 'c':
+ s++;
+ *d = *s++;
+ if (islower(*d))
+ *d = toupper(*d);
+ *d++ ^= 64;
+ continue;
+ case 'b':
+ *d++ = '\b';
+ break;
+ case 'n':
+ *d++ = '\n';
+ break;
+ case 'r':
+ *d++ = '\r';
+ break;
+ case 'f':
+ *d++ = '\f';
+ break;
+ case 't':
+ *d++ = '\t';
+ break;
+ case 'e':
+ *d++ = '\033';
+ break;
+ case 'a':
+ *d++ = '\007';
+ break;
+ }
+ s++;
+ continue;
+ }
+ *d++ = *s++;
+ }
+ *d = '\0';
+
+ if ((arg[1].arg_type & A_MASK) == A_DOUBLE && makesingle)
+ arg[1].arg_type = A_SINGLE; /* now we can optimize on it */
+
+ tmpstr->str_cur = d - tmpstr->str_ptr;
+ arg[1].arg_ptr.arg_str = tmpstr;
+ s = tmps;
+ break;
+ }
+ }
+ if (hereis)
+ str_free(herewas);
+ return s;
+}
+
+FCMD *
+load_format()
+{
+ FCMD froot;
+ FCMD *flinebeg;
+ char *eol;
+ register FCMD *fprev = &froot;
+ register FCMD *fcmd;
+ register char *s;
+ register char *t;
+ register STR *str;
+ bool noblank;
+ bool repeater;
+
+ Zero(&froot, 1, FCMD);
+ s = bufptr;
+ while (s < bufend || (rsfp && (s = str_gets(linestr,rsfp, 0)) != Nullch)) {
+ curcmd->c_line++;
+ if (in_eval && !rsfp) {
+ eol = index(s,'\n');
+ if (!eol++)
+ eol = bufend;
+ }
+ else
+ eol = bufend = linestr->str_ptr + linestr->str_cur;
+ if (perldb) {
+ STR *tmpstr = Str_new(89,0);
+
+ str_nset(tmpstr, s, eol-s);
+ astore(stab_xarray(curcmd->c_filestab), (int)curcmd->c_line,tmpstr);
+ }
+ if (*s == '.') {
+ for (t = s+1; *t == ' ' || *t == '\t'; t++) ;
+ if (*t == '\n') {
+ bufptr = s;
+ return froot.f_next;
+ }
+ }
+ if (*s == '#') {
+ s = eol;
+ continue;
+ }
+ flinebeg = Nullfcmd;
+ noblank = FALSE;
+ repeater = FALSE;
+ while (s < eol) {
+ Newz(804,fcmd,1,FCMD);
+ fprev->f_next = fcmd;
+ fprev = fcmd;
+ for (t=s; t < eol && *t != '@' && *t != '^'; t++) {
+ if (*t == '~') {
+ noblank = TRUE;
+ *t = ' ';
+ if (t[1] == '~') {
+ repeater = TRUE;
+ t[1] = ' ';
+ }
+ }
+ }
+ fcmd->f_pre = nsavestr(s, t-s);
+ fcmd->f_presize = t-s;
+ s = t;
+ if (s >= eol) {
+ if (noblank)
+ fcmd->f_flags |= FC_NOBLANK;
+ if (repeater)
+ fcmd->f_flags |= FC_REPEAT;
+ break;
+ }
+ if (!flinebeg)
+ flinebeg = fcmd; /* start values here */
+ if (*s++ == '^')
+ fcmd->f_flags |= FC_CHOP; /* for doing text filling */
+ switch (*s) {
+ case '*':
+ fcmd->f_type = F_LINES;
+ *s = '\0';
+ break;
+ case '<':
+ fcmd->f_type = F_LEFT;
+ while (*s == '<')
+ s++;
+ break;
+ case '>':
+ fcmd->f_type = F_RIGHT;
+ while (*s == '>')
+ s++;
+ break;
+ case '|':
+ fcmd->f_type = F_CENTER;
+ while (*s == '|')
+ s++;
+ break;
+ case '#':
+ case '.':
+ /* Catch the special case @... and handle it as a string
+ field. */
+ if (*s == '.' && s[1] == '.') {
+ goto default_format;
+ }
+ fcmd->f_type = F_DECIMAL;
+ {
+ char *p;
+
+ /* Read a format in the form @####.####, where either group
+ of ### may be empty, or the final .### may be missing. */
+ while (*s == '#')
+ s++;
+ if (*s == '.') {
+ s++;
+ p = s;
+ while (*s == '#')
+ s++;
+ fcmd->f_decimals = s-p;
+ fcmd->f_flags |= FC_DP;
+ } else {
+ fcmd->f_decimals = 0;
+ }
+ }
+ break;
+ default:
+ default_format:
+ fcmd->f_type = F_LEFT;
+ break;
+ }
+ if (fcmd->f_flags & FC_CHOP && *s == '.') {
+ fcmd->f_flags |= FC_MORE;
+ while (*s == '.')
+ s++;
+ }
+ fcmd->f_size = s-t;
+ }
+ if (flinebeg) {
+ again:
+ if (s >= bufend &&
+ (!rsfp || (s = str_gets(linestr, rsfp, 0)) == Nullch) )
+ goto badform;
+ curcmd->c_line++;
+ if (in_eval && !rsfp) {
+ eol = index(s,'\n');
+ if (!eol++)
+ eol = bufend;
+ }
+ else
+ eol = bufend = linestr->str_ptr + linestr->str_cur;
+ if (perldb) {
+ STR *tmpstr = Str_new(90,0);
+
+ str_nset(tmpstr, s, eol-s);
+ astore(stab_xarray(curcmd->c_filestab),
+ (int)curcmd->c_line,tmpstr);
+ }
+ if (strnEQ(s,".\n",2)) {
+ bufptr = s;
+ yyerror("Missing values line");
+ return froot.f_next;
+ }
+ if (*s == '#') {
+ s = eol;
+ goto again;
+ }
+ str = flinebeg->f_unparsed = Str_new(91,eol - s);
+ str->str_u.str_hash = curstash;
+ str_nset(str,"(",1);
+ flinebeg->f_line = curcmd->c_line;
+ eol[-1] = '\0';
+ if (!flinebeg->f_next->f_type || index(s, ',')) {
+ eol[-1] = '\n';
+ str_ncat(str, s, eol - s - 1);
+ str_ncat(str,",$$);",5);
+ s = eol;
+ }
+ else {
+ eol[-1] = '\n';
+ while (s < eol && isspace(*s))
+ s++;
+ t = s;
+ while (s < eol) {
+ switch (*s) {
+ case ' ': case '\t': case '\n': case ';':
+ str_ncat(str, t, s - t);
+ str_ncat(str, "," ,1);
+ while (s < eol && (isspace(*s) || *s == ';'))
+ s++;
+ t = s;
+ break;
+ case '$':
+ str_ncat(str, t, s - t);
+ t = s;
+ s = scanident(s,eol,tokenbuf);
+ str_ncat(str, t, s - t);
+ t = s;
+ if (s < eol && *s && index("$'\"",*s))
+ str_ncat(str, ",", 1);
+ break;
+ case '"': case '\'':
+ str_ncat(str, t, s - t);
+ t = s;
+ s++;
+ while (s < eol && (*s != *t || s[-1] == '\\'))
+ s++;
+ if (s < eol)
+ s++;
+ str_ncat(str, t, s - t);
+ t = s;
+ if (s < eol && *s && index("$'\"",*s))
+ str_ncat(str, ",", 1);
+ break;
+ default:
+ yyerror("Please use commas to separate fields");
+ }
+ }
+ str_ncat(str,"$$);",4);
+ }
+ }
+ }
+ badform:
+ bufptr = str_get(linestr);
+ yyerror("Format not terminated");
+ return froot.f_next;
+}
+
+set_csh()
+{
+#ifdef CSH
+ if (!cshlen)
+ cshlen = strlen(cshname);
+#endif
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/tperly.c b/MultiSource/Benchmarks/MallocBench/perl/tperly.c
new file mode 100644
index 00000000..f214b6c3
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/tperly.c
@@ -0,0 +1,2199 @@
+#ifdef BWGC
+extern char *gc_malloc(), *gc_realloc();
+#else
+extern char *malloc(), *realloc();
+#endif
+
+# line 15 "perly.y"
+#include "INTERN.h"
+#include "perl.h"
+
+STAB *scrstab;
+ARG *arg4; /* rarely used arguments to make_op() */
+ARG *arg5;
+
+
+# line 26 "perly.y"
+typedef union {
+ int ival;
+ char *cval;
+ ARG *arg;
+ CMD *cmdval;
+ struct compcmd compval;
+ STAB *stabval;
+ FCMD *formval;
+} YYSTYPE;
+# define WORD 257
+# define APPEND 258
+# define OPEN 259
+# define SSELECT 260
+# define LOOPEX 261
+# define USING 262
+# define FORMAT 263
+# define DO 264
+# define SHIFT 265
+# define PUSH 266
+# define POP 267
+# define LVALFUN 268
+# define WHILE 269
+# define UNTIL 270
+# define IF 271
+# define UNLESS 272
+# define ELSE 273
+# define ELSIF 274
+# define CONTINUE 275
+# define SPLIT 276
+# define FLIST 277
+# define FOR 278
+# define FILOP 279
+# define FILOP2 280
+# define FILOP3 281
+# define FILOP4 282
+# define FILOP22 283
+# define FILOP25 284
+# define FUNC0 285
+# define FUNC1 286
+# define FUNC2 287
+# define FUNC2x 288
+# define FUNC3 289
+# define FUNC4 290
+# define FUNC5 291
+# define HSHFUN 292
+# define HSHFUN3 293
+# define FLIST2 294
+# define SUB 295
+# define FILETEST 296
+# define LOCAL 297
+# define DELETE 298
+# define RELOP 299
+# define EQOP 300
+# define MULOP 301
+# define ADDOP 302
+# define PACKAGE 303
+# define AMPER 304
+# define FORMLIST 305
+# define REG 306
+# define ARYLEN 307
+# define ARY 308
+# define HSH 309
+# define STAR 310
+# define SUBST 311
+# define PATTERN 312
+# define RSTRING 313
+# define TRANS 314
+# define LISTOP 315
+# define DOTDOT 316
+# define OROR 317
+# define ANDAND 318
+# define UNIOP 319
+# define LS 320
+# define RS 321
+# define MATCH 322
+# define NMATCH 323
+# define UMINUS 324
+# define POW 325
+# define INC 326
+# define DEC 327
+#define yyclearin yychar = -1
+#define yyerrok yyerrflag = 0
+extern int yychar;
+extern int yyerrflag;
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 150
+#endif
+YYSTYPE yylval, yyval;
+# define YYERRCODE 256
+
+# line 792 "perly.y"
+ /* PROGRAM */
+int yyexca[] ={
+-1, 1,
+ 0, -1,
+ -2, 0,
+-1, 3,
+ 0, 2,
+ -2, 39,
+-1, 92,
+ 59, 35,
+ -2, 0,
+-1, 130,
+ 326, 0,
+ 327, 0,
+ -2, 84,
+-1, 131,
+ 326, 0,
+ 327, 0,
+ -2, 85,
+-1, 229,
+ 299, 0,
+ -2, 66,
+-1, 230,
+ 300, 0,
+ -2, 67,
+-1, 231,
+ 316, 0,
+ -2, 71,
+-1, 253,
+ 44, 175,
+ 41, 175,
+ -2, 181,
+-1, 254,
+ 44, 175,
+ -2, 181,
+-1, 382,
+ 41, 35,
+ -2, 0,
+ };
+# define YYNPROD 182
+# define YYLAST 3179
+int yyact[]={
+
+ 322, 26, 198, 27, 107, 115, 116, 108, 109, 124,
+ 125, 115, 164, 108, 109, 179, 121, 122, 319, 107,
+ 88, 90, 167, 163, 94, 96, 110, 111, 121, 122,
+ 181, 107, 110, 111, 121, 122, 108, 107, 112, 146,
+ 133, 138, 153, 137, 251, 108, 109, 145, 282, 11,
+ 188, 92, 112, 108, 109, 12, 149, 121, 122, 83,
+ 107, 152, 191, 165, 110, 111, 121, 122, 300, 107,
+ 148, 171, 85, 84, 121, 122, 286, 107, 180, 101,
+ 162, 28, 182, 104, 105, 102, 189, 13, 147, 101,
+ 101, 3, 243, 101, 95, 14, 143, 21, 141, 248,
+ 101, 93, 89, 101, 209, 208, 210, 303, 113, 101,
+ 212, 214, 216, 218, 220, 222, 224, 226, 228, 229,
+ 230, 231, 232, 233, 234, 235, 236, 87, 144, 241,
+ 142, 187, 382, 287, 190, 86, 81, 323, 114, 375,
+ 101, 320, 323, 141, 166, 372, 101, 360, 320, 384,
+ 101, 329, 355, 327, 252, 406, 256, 256, 311, 404,
+ 256, 256, 256, 256, 256, 101, 359, 402, 400, 101,
+ 358, 312, 267, 268, 310, 142, 398, 28, 273, 274,
+ 275, 276, 277, 32, 28, 28, 193, 397, 195, 309,
+ 38, 250, 201, 31, 203, 30, 357, 255, 257, 101,
+ 11, 259, 260, 261, 262, 263, 12, 395, 356, 16,
+ 28, 101, 392, 352, 391, 237, 101, 291, 390, 292,
+ 387, 293, 386, 294, 374, 295, 373, 296, 370, 297,
+ 347, 298, 181, 101, 337, 365, 363, 101, 13, 164,
+ 164, 343, 264, 208, 265, 332, 14, 336, 266, 301,
+ 101, 289, 101, 331, 101, 82, 32, 324, 278, 154,
+ 325, 288, 279, 38, 101, 330, 31, 284, 30, 335,
+ 101, 321, 240, 28, 338, 239, 33, 318, 151, 326,
+ 283, 328, 270, 249, 182, 242, 333, 211, 196, 183,
+ 165, 165, 112, 339, 340, 341, 342, 178, 344, 115,
+ 116, 108, 109, 353, 99, 100, 97, 98, 155, 177,
+ 176, 175, 174, 115, 116, 108, 109, 91, 173, 172,
+ 110, 111, 121, 122, 362, 107, 170, 366, 169, 168,
+ 161, 256, 118, 256, 110, 111, 121, 122, 361, 107,
+ 376, 377, 160, 159, 158, 380, 157, 368, 113, 33,
+ 349, 156, 371, 150, 134, 199, 32, 10, 9, 2,
+ 378, 379, 17, 38, 317, 6, 31, 77, 30, 388,
+ 78, 103, 367, 15, 369, 7, 4, 123, 114, 393,
+ 385, 345, 346, 8, 348, 396, 350, 351, 389, 5,
+ 99, 100, 97, 98, 1, 401, 0, 0, 394, 0,
+ 403, 0, 0, 0, 405, 0, 24, 79, 399, 54,
+ 53, 51, 112, 0, 39, 63, 61, 62, 67, 18,
+ 19, 22, 23, 0, 0, 0, 64, 66, 20, 55,
+ 56, 57, 59, 58, 60, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 65, 381, 36, 37, 44, 33,
+ 383, 0, 0, 0, 50, 0, 40, 45, 43, 42,
+ 41, 48, 47, 46, 49, 80, 0, 0, 113, 52,
+ 0, 0, 0, 0, 0, 0, 34, 35, 0, 24,
+ 79, 0, 54, 53, 51, 32, 0, 39, 63, 61,
+ 62, 67, 38, 315, 0, 31, 0, 30, 114, 64,
+ 66, 0, 55, 56, 57, 59, 58, 60, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 65, 0, 36,
+ 37, 44, 0, 0, 0, 0, 0, 50, 29, 40,
+ 45, 43, 42, 41, 48, 47, 46, 49, 80, 0,
+ 0, 0, 52, 0, 0, 0, 0, 0, 0, 34,
+ 35, 0, 0, 115, 116, 108, 109, 0, 32, 126,
+ 127, 128, 129, 130, 131, 38, 308, 0, 31, 0,
+ 30, 119, 118, 0, 110, 111, 121, 122, 33, 107,
+ 79, 0, 54, 53, 51, 0, 0, 39, 63, 61,
+ 62, 67, 0, 0, 0, 0, 0, 0, 0, 64,
+ 66, 0, 55, 56, 57, 59, 58, 60, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 65, 0, 36,
+ 37, 44, 0, 0, 0, 0, 0, 50, 0, 40,
+ 45, 43, 42, 41, 48, 47, 46, 49, 80, 0,
+ 0, 0, 52, 0, 0, 0, 0, 0, 0, 34,
+ 35, 33, 0, 0, 32, 0, 0, 0, 0, 0,
+ 0, 38, 306, 0, 31, 0, 30, 0, 0, 0,
+ 0, 0, 0, 115, 116, 108, 109, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 110, 111, 121, 122, 0, 107,
+ 0, 112, 0, 0, 334, 0, 0, 320, 0, 79,
+ 0, 54, 53, 51, 0, 0, 39, 63, 61, 62,
+ 67, 0, 0, 0, 106, 0, 120, 0, 64, 66,
+ 0, 55, 56, 57, 59, 58, 60, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 65, 33, 36, 37,
+ 44, 0, 0, 0, 0, 0, 50, 113, 40, 45,
+ 43, 42, 41, 48, 47, 46, 49, 80, 0, 112,
+ 0, 52, 0, 0, 0, 0, 0, 0, 34, 35,
+ 0, 0, 79, 0, 54, 53, 51, 114, 0, 39,
+ 63, 61, 62, 67, 120, 0, 0, 0, 0, 0,
+ 0, 64, 66, 0, 55, 56, 57, 59, 58, 60,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 65,
+ 0, 36, 37, 44, 0, 113, 0, 0, 0, 50,
+ 0, 40, 45, 43, 42, 41, 48, 47, 46, 49,
+ 80, 0, 0, 0, 52, 0, 32, 0, 0, 0,
+ 0, 34, 35, 38, 302, 114, 31, 0, 30, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 0,
+ 54, 53, 51, 0, 0, 39, 63, 61, 62, 67,
+ 0, 0, 0, 0, 0, 0, 0, 64, 66, 0,
+ 55, 56, 57, 59, 58, 60, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 65, 0, 36, 37, 44,
+ 0, 0, 0, 0, 0, 50, 0, 40, 45, 43,
+ 42, 41, 48, 47, 46, 49, 80, 0, 0, 33,
+ 52, 0, 32, 0, 0, 0, 0, 34, 35, 38,
+ 271, 0, 31, 0, 30, 0, 0, 0, 0, 0,
+ 0, 0, 115, 116, 108, 109, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 117,
+ 119, 118, 0, 110, 111, 121, 122, 0, 107, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
+ 0, 0, 38, 258, 0, 31, 0, 30, 0, 0,
+ 115, 116, 108, 109, 0, 33, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 117, 119, 118,
+ 0, 110, 111, 121, 122, 0, 107, 0, 0, 112,
+ 0, 0, 0, 0, 0, 320, 0, 0, 0, 0,
+ 79, 0, 54, 53, 51, 0, 0, 39, 63, 61,
+ 62, 67, 106, 0, 120, 0, 0, 0, 0, 64,
+ 66, 0, 55, 56, 57, 59, 58, 60, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 65, 33, 36,
+ 37, 44, 0, 0, 0, 113, 0, 50, 0, 40,
+ 45, 43, 42, 41, 48, 47, 46, 49, 80, 0,
+ 0, 0, 52, 0, 32, 0, 0, 0, 0, 34,
+ 35, 38, 0, 0, 31, 114, 30, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 227, 0, 0, 0, 79, 0, 54, 53,
+ 51, 0, 0, 39, 63, 61, 62, 67, 0, 0,
+ 0, 0, 0, 0, 0, 64, 66, 0, 55, 56,
+ 57, 59, 58, 60, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 65, 0, 36, 37, 44, 0, 0,
+ 0, 0, 0, 50, 0, 40, 45, 43, 42, 41,
+ 48, 47, 46, 49, 80, 0, 0, 33, 52, 0,
+ 0, 0, 0, 0, 0, 34, 35, 0, 0, 253,
+ 0, 54, 53, 51, 0, 0, 39, 63, 61, 62,
+ 67, 0, 0, 0, 0, 0, 0, 0, 64, 66,
+ 0, 55, 56, 57, 59, 58, 60, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 65, 0, 36, 37,
+ 44, 0, 0, 0, 0, 0, 50, 0, 40, 45,
+ 43, 42, 41, 48, 47, 46, 49, 80, 0, 0,
+ 0, 52, 0, 32, 0, 0, 0, 0, 34, 35,
+ 38, 0, 0, 31, 0, 30, 0, 0, 0, 0,
+ 115, 116, 108, 109, 0, 0, 0, 0, 0, 0,
+ 0, 225, 0, 0, 0, 0, 0, 117, 119, 118,
+ 0, 110, 111, 121, 122, 0, 107, 112, 0, 0,
+ 0, 0, 0, 323, 0, 0, 0, 0, 79, 0,
+ 54, 53, 51, 0, 0, 39, 63, 61, 62, 67,
+ 106, 0, 120, 0, 0, 0, 0, 64, 66, 0,
+ 55, 56, 57, 59, 58, 60, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 65, 33, 36, 37, 44,
+ 0, 0, 0, 113, 0, 50, 0, 40, 45, 43,
+ 42, 41, 48, 47, 46, 49, 80, 0, 0, 32,
+ 52, 0, 0, 0, 0, 0, 38, 34, 35, 31,
+ 0, 30, 0, 114, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 223, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
+ 38, 0, 0, 31, 0, 30, 0, 0, 0, 0,
+ 0, 0, 33, 0, 0, 0, 0, 0, 0, 0,
+ 0, 221, 0, 0, 0, 0, 0, 79, 0, 54,
+ 53, 51, 0, 0, 39, 63, 61, 62, 67, 0,
+ 0, 0, 0, 0, 0, 0, 64, 66, 0, 55,
+ 56, 57, 59, 58, 60, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 65, 0, 36, 37, 44, 0,
+ 0, 0, 0, 0, 50, 0, 40, 45, 43, 42,
+ 41, 48, 47, 46, 49, 80, 33, 0, 32, 52,
+ 0, 0, 0, 0, 0, 38, 34, 35, 31, 0,
+ 30, 0, 0, 0, 0, 0, 0, 0, 115, 116,
+ 108, 109, 0, 0, 0, 0, 219, 0, 0, 0,
+ 0, 0, 0, 0, 0, 117, 119, 118, 0, 110,
+ 111, 121, 122, 0, 107, 0, 0, 0, 0, 0,
+ 0, 0, 0, 79, 0, 54, 53, 51, 0, 0,
+ 39, 63, 61, 62, 67, 0, 0, 0, 0, 0,
+ 0, 0, 64, 66, 0, 55, 56, 57, 59, 58,
+ 60, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 65, 33, 36, 37, 44, 0, 0, 0, 0, 0,
+ 50, 0, 40, 45, 43, 42, 41, 48, 47, 46,
+ 49, 80, 0, 0, 32, 52, 0, 0, 0, 0,
+ 0, 38, 34, 35, 31, 0, 30, 79, 0, 54,
+ 53, 51, 0, 0, 39, 63, 61, 62, 67, 0,
+ 0, 0, 217, 0, 0, 0, 64, 66, 0, 55,
+ 56, 57, 59, 58, 60, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 65, 0, 36, 37, 44, 0,
+ 0, 0, 0, 0, 50, 0, 40, 45, 43, 42,
+ 41, 48, 47, 46, 49, 80, 0, 0, 32, 52,
+ 0, 0, 0, 0, 0, 38, 34, 35, 31, 0,
+ 30, 0, 0, 0, 0, 0, 0, 33, 0, 0,
+ 0, 0, 0, 0, 0, 0, 215, 0, 0, 0,
+ 0, 0, 79, 0, 54, 53, 51, 0, 0, 39,
+ 63, 61, 62, 67, 0, 0, 0, 0, 0, 0,
+ 0, 64, 66, 0, 55, 56, 57, 59, 58, 60,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 65,
+ 0, 36, 37, 44, 0, 0, 0, 0, 0, 50,
+ 0, 40, 45, 43, 42, 41, 48, 47, 46, 49,
+ 80, 33, 0, 32, 52, 0, 0, 0, 0, 0,
+ 38, 34, 35, 31, 0, 30, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 213, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 112, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 0,
+ 54, 53, 51, 0, 0, 39, 63, 61, 62, 67,
+ 106, 0, 120, 0, 0, 0, 0, 64, 66, 0,
+ 55, 56, 57, 59, 58, 60, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 65, 33, 36, 37, 44,
+ 0, 0, 0, 113, 0, 50, 0, 40, 45, 43,
+ 42, 41, 48, 47, 46, 49, 80, 0, 0, 32,
+ 52, 0, 0, 0, 0, 0, 38, 34, 35, 31,
+ 0, 30, 79, 114, 54, 53, 51, 0, 0, 39,
+ 63, 61, 62, 67, 0, 0, 0, 0, 0, 0,
+ 0, 64, 66, 0, 55, 56, 57, 59, 58, 60,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 65,
+ 0, 36, 37, 44, 0, 0, 0, 0, 0, 50,
+ 0, 40, 45, 43, 42, 41, 48, 47, 46, 49,
+ 80, 0, 0, 0, 52, 0, 0, 0, 32, 0,
+ 0, 34, 35, 0, 0, 38, 136, 0, 31, 28,
+ 30, 0, 33, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 79, 0, 54,
+ 53, 51, 0, 0, 39, 63, 61, 62, 67, 0,
+ 0, 0, 0, 0, 0, 0, 64, 66, 0, 55,
+ 56, 57, 59, 58, 60, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 65, 0, 36, 37, 44, 0,
+ 0, 0, 0, 0, 50, 0, 40, 45, 43, 42,
+ 41, 48, 47, 46, 49, 80, 0, 0, 32, 52,
+ 0, 33, 0, 0, 0, 38, 34, 35, 31, 0,
+ 30, 0, 0, 0, 0, 0, 0, 0, 115, 116,
+ 108, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 117, 119, 118, 0, 110,
+ 111, 121, 122, 0, 107, 112, 0, 0, 0, 0,
+ 0, 0, 0, 139, 0, 54, 53, 51, 0, 0,
+ 39, 63, 61, 62, 67, 299, 0, 0, 106, 0,
+ 120, 0, 64, 66, 0, 55, 56, 57, 59, 58,
+ 60, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 65, 33, 36, 37, 44, 0, 0, 0, 0, 0,
+ 50, 113, 140, 45, 43, 42, 41, 48, 47, 46,
+ 49, 80, 0, 0, 32, 52, 0, 0, 0, 0,
+ 0, 38, 34, 35, 31, 0, 30, 0, 0, 0,
+ 0, 114, 79, 0, 54, 53, 51, 0, 0, 39,
+ 63, 61, 62, 67, 0, 0, 0, 0, 0, 0,
+ 0, 64, 66, 0, 55, 56, 57, 59, 58, 60,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 65,
+ 0, 36, 37, 44, 0, 0, 0, 0, 0, 50,
+ 0, 40, 45, 43, 42, 41, 48, 47, 46, 49,
+ 80, 0, 0, 32, 52, 0, 0, 0, 0, 0,
+ 38, 34, 35, 31, 0, 30, 0, 33, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 253, 0, 54, 53, 51, 0, 0, 39,
+ 63, 61, 62, 67, 0, 0, 0, 0, 0, 0,
+ 0, 64, 66, 0, 55, 56, 57, 59, 58, 60,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 65,
+ 0, 36, 37, 44, 0, 0, 0, 0, 0, 50,
+ 0, 40, 45, 43, 42, 41, 48, 47, 46, 49,
+ 80, 0, 0, 32, 52, 0, 33, 0, 0, 0,
+ 38, 34, 35, 31, 0, 30, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 115, 116, 108, 109,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 117, 119, 118, 0, 110, 111, 121,
+ 122, 0, 107, 0, 0, 0, 0, 0, 79, 0,
+ 54, 53, 51, 0, 0, 39, 63, 61, 62, 67,
+ 0, 0, 0, 0, 0, 0, 0, 64, 66, 0,
+ 55, 56, 57, 59, 58, 60, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 65, 33, 36, 37, 44,
+ 0, 0, 0, 0, 0, 50, 0, 40, 45, 43,
+ 42, 41, 48, 47, 46, 49, 80, 0, 0, 32,
+ 52, 0, 0, 0, 0, 0, 38, 34, 35, 31,
+ 0, 30, 0, 0, 0, 0, 0, 254, 0, 54,
+ 53, 51, 0, 0, 39, 63, 61, 62, 67, 0,
+ 0, 0, 0, 0, 0, 0, 64, 66, 0, 55,
+ 56, 57, 59, 58, 60, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 65, 0, 36, 37, 44, 0,
+ 0, 0, 0, 0, 50, 0, 40, 45, 43, 42,
+ 41, 48, 47, 46, 49, 80, 0, 0, 0, 52,
+ 0, 0, 0, 0, 0, 0, 34, 35, 0, 0,
+ 0, 32, 33, 0, 0, 0, 0, 0, 38, 0,
+ 0, 31, 0, 30, 0, 0, 0, 185, 0, 54,
+ 53, 51, 0, 0, 39, 63, 61, 62, 67, 0,
+ 0, 0, 0, 0, 0, 0, 64, 66, 0, 55,
+ 56, 57, 59, 58, 60, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 65, 0, 36, 37, 44, 141,
+ 0, 0, 0, 0, 50, 0, 186, 45, 43, 42,
+ 41, 48, 47, 46, 49, 80, 0, 0, 0, 52,
+ 0, 0, 0, 0, 0, 0, 34, 35, 0, 0,
+ 0, 142, 0, 0, 33, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 132, 0, 54, 53, 51, 0, 0,
+ 39, 63, 61, 62, 67, 0, 0, 0, 0, 0,
+ 0, 0, 64, 66, 0, 55, 56, 57, 59, 58,
+ 60, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 65, 0, 36, 37, 44, 0, 0, 0, 0, 0,
+ 50, 0, 40, 45, 43, 42, 41, 48, 47, 46,
+ 49, 80, 0, 0, 0, 52, 0, 0, 0, 0,
+ 0, 0, 34, 35, 25, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 79, 0, 54, 53, 51,
+ 0, 0, 39, 63, 61, 62, 67, 0, 0, 0,
+ 0, 0, 0, 135, 64, 66, 0, 55, 56, 57,
+ 59, 58, 60, 68, 69, 70, 71, 72, 73, 74,
+ 75, 76, 65, 0, 36, 37, 44, 0, 0, 0,
+ 0, 0, 50, 0, 40, 45, 43, 42, 41, 48,
+ 47, 46, 49, 80, 0, 184, 0, 52, 0, 0,
+ 0, 0, 192, 0, 194, 0, 0, 197, 200, 0,
+ 202, 0, 204, 205, 206, 207, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
+ 0, 0, 0, 0, 0, 0, 244, 245, 246, 247,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 269, 0, 0, 272, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 280, 281, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 285, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 290, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 304, 305, 307, 0,
+ 0, 0, 0, 313, 314, 316, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 192, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 354, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 364 };
+int yypact[]={
+
+ -1000, -1000, -1000, -208, -1000, -1000, 150, -1000, -1000, -1000,
+ -1000, 78, -2, -184, -185, -1000, -1000, 76, 87, 62,
+ 11, -1000, 61, 54, -1000, 121, -190, 1879, -1000, -317,
+ 2241, 2241, 2241, 2241, 2241, 2241, 2526, 314, 2035, 1956,
+ 7, -1000, -1000, 5, -259, -1000, -1000, -1000, -1000, -1000,
+ -218, -187, 2241, 313, 21, 2, 311, 306, 304, 303,
+ 302, 290, -17, -18, 289, 288, 286, 2241, 279, 278,
+ 272, 271, 270, 269, 257, -25, 249, -1000, -1000, -1000,
+ 2410, -1000, 70, -255, -42, 75, -1000, 2241, -42, 2241,
+ -42, 248, 223, 2241, -42, 2241, -42, 2241, 2241, 2241,
+ 2241, 2241, -42, -1000, -42, 247, 2241, 1840, 1745, 1671,
+ 1555, 1460, 1386, 1270, 1101, 2241, 2241, 2241, 2241, 2241,
+ 2241, 2241, 2241, -1000, -1000, -1000, -317, -317, -317, -317,
+ -1000, -1000, -1000, -256, 2241, 231, 38, -256, -1000, 245,
+ 52, 2241, 2241, 2241, 2241, -24, 243, 151, -1000, -256,
+ 2125, -1000, 2320, 982, -1000, -1000, 2125, 2125, 2125, 2125,
+ 2125, -245, -1000, -245, -1000, -1000, -1000, -245, 2241, 2241,
+ 2241, -1000, 241, 909, 2241, 2241, 2241, 2241, 2241, -227,
+ -1000, -1000, -1000, -227, 102, 2241, 2618, -257, -1000, -1000,
+ -1000, 239, 102, -1000, 226, -1000, 2241, 35, 74, -1000,
+ 220, -1000, 210, -1000, 102, 102, 102, 102, 1879, -1000,
+ -1000, 2241, 1879, 2241, -321, 2241, -306, 2241, -265, 2241,
+ -248, 2241, -248, 2241, -294, 2241, 0, 2241, 0, -256,
+ -288, 254, 374, 14, 2167, -321, -321, -57, 208, 813,
+ 16, 2241, 621, 525, 96, 49, 65, 46, 2241, 452,
+ 323, 236, 1021, -1000, 230, 93, 1879, 216, -1000, 93,
+ 97, 109, 97, 107, 93, 212, 204, 663, 1309, 206,
+ -1000, -1000, 193, 1309, 1021, 1021, 1021, 1021, 200, 97,
+ 102, 102, -1000, -42, -42, 189, -42, 2241, -42, -42,
+ 172, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 2241,
+ -1000, -1000, -1000, 2241, 59, 167, -1000, 155, -1000, -1000,
+ -1000, -1000, -1000, 45, 125, -1000, 106, -1000, -1000, 97,
+ 2241, -1000, 195, 2241, -1000, 194, 93, 2125, 97, 2125,
+ 187, -1000, -1000, 104, -1000, 185, -1000, -1000, 183, 98,
+ 93, 97, 97, -1000, 93, -1000, -1000, -42, -1000, 73,
+ -1000, -1000, -42, 731, 56, -1000, -1000, -1000, -1000, -1000,
+ -1000, 97, 1879, -1000, 102, -1000, 181, 179, 93, 97,
+ -1000, 177, -1000, -1000, -1000, -1000, 173, 171, 93, 97,
+ 166, -1000, 223, -1000, -1000, 146, -1000, -1000, 135, 97,
+ -1000, -1000, -1000, 127, 93, -1000, 126, -1000, -1000, 93,
+ -1000, 118, -42, 114, -1000, -1000, -1000 };
+int yypgo[]={
+
+ 0, 394, 389, 383, 377, 1, 91, 376, 375, 373,
+ 355, 2, 371, 2854, 3, 0, 18, 528, 44, 80,
+ 78, 62, 370, 367, 365, 97, 359, 358, 357 };
+int yyr1[]={
+
+ 0, 26, 1, 25, 25, 12, 12, 12, 5, 4,
+ 6, 6, 7, 7, 7, 7, 7, 10, 10, 10,
+ 10, 10, 10, 9, 9, 9, 9, 8, 8, 8,
+ 8, 8, 8, 8, 8, 11, 11, 21, 21, 24,
+ 24, 2, 2, 2, 3, 3, 27, 28, 15, 13,
+ 13, 16, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 22, 22, 22, 22, 22, 18, 18, 19, 19, 20,
+ 20, 23 };
+int yyr2[]={
+
+ 0, 1, 5, 7, 5, 1, 5, 11, 9, 1,
+ 1, 5, 3, 5, 2, 5, 7, 3, 3, 7,
+ 7, 7, 7, 11, 11, 7, 7, 13, 13, 9,
+ 9, 15, 13, 21, 5, 1, 2, 1, 2, 1,
+ 4, 3, 3, 3, 9, 7, 7, 7, 5, 7,
+ 2, 5, 7, 9, 9, 9, 9, 9, 9, 9,
+ 9, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 11, 7, 7, 3, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 3, 9,
+ 9, 7, 5, 5, 5, 3, 3, 9, 3, 3,
+ 9, 13, 11, 9, 9, 11, 3, 3, 3, 3,
+ 3, 11, 11, 9, 9, 5, 11, 11, 9, 9,
+ 5, 3, 5, 3, 5, 3, 9, 15, 5, 9,
+ 11, 9, 5, 5, 7, 3, 11, 13, 13, 15,
+ 19, 11, 5, 9, 5, 9, 3, 3, 13, 11,
+ 9, 11, 9, 5, 3, 3, 7, 7, 9, 11,
+ 11, 13, 13, 15, 17, 9, 5, 13, 2, 2,
+ 3, 5, 5, 7, 7, 3, 2, 3, 3, 3,
+ 3, 3 };
+int yychk[]={
+
+ -1000, -1, -26, -6, -7, -2, -24, -8, -3, -27,
+ -28, 257, 263, 295, 303, -9, 59, -10, 269, 270,
+ 278, -25, 271, 272, 256, -13, -5, -14, 123, -17,
+ 45, 43, 33, 126, 326, 327, 296, 297, 40, 264,
+ 306, 310, 309, 308, 298, 307, 313, 312, 311, 314,
+ 304, 261, 319, 260, 259, 279, 280, 281, 283, 282,
+ 284, 266, 267, 265, 276, 294, 277, 268, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, -23, -22, 257,
+ 315, 58, 257, 61, 257, 257, 59, 40, -5, 40,
+ -5, 306, 40, 40, -5, 40, -5, 271, 272, 269,
+ 270, 44, 275, -12, 273, 274, 61, 325, 301, 302,
+ 320, 321, 38, 94, 124, 299, 300, 316, 318, 317,
+ 63, 322, 323, -4, 326, 327, -17, -17, -17, -17,
+ -17, -17, 257, -14, 40, -13, 41, -14, -5, 257,
+ 306, 91, 123, 91, 123, 306, 257, 306, 257, -14,
+ 40, 257, 40, 40, 257, 306, 40, 40, 40, 40,
+ 40, 40, -19, 40, 257, 308, -19, 40, 40, 40,
+ 40, -14, 40, 40, 40, 40, 40, 40, 40, 40,
+ -20, 257, 309, 40, -13, 257, 306, 61, 305, -5,
+ 59, -21, -13, -25, -13, -25, 40, -13, -11, -10,
+ -13, -25, -13, -25, -13, -13, -13, -13, -14, -5,
+ -5, 40, -14, 61, -14, 61, -14, 61, -14, 61,
+ -14, 61, -14, 61, -14, 61, -14, 61, -14, -14,
+ -14, -14, -14, -14, -14, -14, -14, -6, -13, 44,
+ 41, 91, 40, 40, -13, -13, -13, -13, 123, 40,
+ 40, -18, -14, 257, 257, -18, -14, -18, 41, -18,
+ -18, -18, -18, -18, -19, -19, -19, -14, -14, -13,
+ 41, 41, -13, -14, -14, -14, -14, -14, -20, -20,
+ -13, -13, 305, 41, 41, -13, 41, 59, 41, 41,
+ -13, -14, -14, -14, -14, -14, -14, -14, -14, 58,
+ 125, 41, 41, 91, -13, -13, 41, -13, 41, 93,
+ 125, 93, 125, -13, -13, 41, -13, 41, 41, -16,
+ 44, 41, -15, 44, 41, -15, -16, 44, -16, 44,
+ -15, 41, 41, -16, 41, -15, 41, 41, -15, -16,
+ -16, -16, -16, 41, -16, -25, -25, 41, -25, -21,
+ -25, -25, 41, -14, -13, 93, 41, 41, 125, 41,
+ 41, -16, -14, 41, -13, 41, -15, -18, -16, -18,
+ 41, -16, 41, 41, 41, 41, -15, -15, -16, -16,
+ -15, -25, 59, -25, 93, -16, 41, 41, -15, -16,
+ 41, 41, 41, -15, -16, 41, -11, 41, 41, -16,
+ 41, -15, 41, -15, 41, -5, 41 };
+int yydef[]={
+
+ 1, -2, 10, -2, 11, 12, 0, 14, 41, 42,
+ 43, 0, 0, 0, 0, 13, 15, 0, 0, 0,
+ 0, 34, 0, 0, 17, 18, 5, 50, 9, 77,
+ 0, 0, 0, 0, 0, 0, 88, 0, 0, 0,
+ 95, 96, 98, 99, 0, 106, 107, 108, 109, 110,
+ 0, 121, 123, 125, 0, 135, 0, 0, 0, 0,
+ 0, 0, 0, 146, 147, 0, 0, 154, 155, 0,
+ 0, 0, 0, 0, 0, 0, 0, 168, 169, 181,
+ 170, 40, 0, 0, 0, 0, 16, 37, 0, 0,
+ 0, 0, -2, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 10, 82, 83, 78, 79, 80, 81,
+ -2, -2, 86, 87, 0, 0, 92, 93, 94, 181,
+ 95, 0, 0, 0, 0, 0, 115, 120, 122, 124,
+ 0, 128, 0, 0, 132, 133, 0, 0, 0, 0,
+ 0, 0, 142, 0, 177, 178, 144, 0, 0, 0,
+ 0, 153, 0, 0, 0, 0, 0, 0, 0, 0,
+ 166, 179, 180, 0, 171, 172, 95, 0, 45, 46,
+ 47, 0, 38, 29, 0, 30, 0, 18, 0, 36,
+ 0, 25, 0, 26, 19, 20, 21, 22, 49, 3,
+ 6, 0, 52, 0, 61, 0, 62, 0, 63, 0,
+ 64, 0, 65, 0, 68, 0, 69, 0, 70, -2,
+ -2, -2, 72, 73, 0, 75, 76, 39, 0, 0,
+ 91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 176, -2, -2, 0, 176, 0, 134, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 156, 157, 0, 0, 0, 0, 0, 0, 0, 0,
+ 173, 174, 44, 0, 0, 0, 0, 37, 0, 0,
+ 0, 53, 54, 55, 56, 57, 58, 59, 60, 0,
+ 8, 89, 90, 0, 0, 0, 113, 0, 118, 97,
+ 100, 103, 104, 0, 0, 114, 0, 119, 126, 0,
+ 0, 129, 0, 0, 131, 0, 0, 0, 0, 0,
+ 0, 143, 145, 0, 150, 0, 152, 158, 0, 0,
+ 0, 0, 0, 165, 0, 27, 28, 0, 32, 0,
+ 23, 24, 0, 74, 0, 102, 111, 116, 105, 112,
+ 117, 0, 51, 130, 48, 136, 0, 0, 0, 0,
+ 141, 0, 149, 151, 159, 160, 0, 0, 0, 0,
+ 0, 31, -2, 7, 101, 0, 137, 138, 0, 0,
+ 148, 161, 162, 0, 0, 167, 0, 127, 139, 0,
+ 163, 0, 0, 0, 164, 33, 140 };
+typedef struct { char *t_name; int t_val; } yytoktype;
+#ifndef YYDEBUG
+# define YYDEBUG 0 /* don't allow debugging */
+#endif
+
+#if YYDEBUG
+
+yytoktype yytoks[] =
+{
+ "WORD", 257,
+ "APPEND", 258,
+ "OPEN", 259,
+ "SSELECT", 260,
+ "LOOPEX", 261,
+ "USING", 262,
+ "FORMAT", 263,
+ "DO", 264,
+ "SHIFT", 265,
+ "PUSH", 266,
+ "POP", 267,
+ "LVALFUN", 268,
+ "WHILE", 269,
+ "UNTIL", 270,
+ "IF", 271,
+ "UNLESS", 272,
+ "ELSE", 273,
+ "ELSIF", 274,
+ "CONTINUE", 275,
+ "SPLIT", 276,
+ "FLIST", 277,
+ "FOR", 278,
+ "FILOP", 279,
+ "FILOP2", 280,
+ "FILOP3", 281,
+ "FILOP4", 282,
+ "FILOP22", 283,
+ "FILOP25", 284,
+ "FUNC0", 285,
+ "FUNC1", 286,
+ "FUNC2", 287,
+ "FUNC2x", 288,
+ "FUNC3", 289,
+ "FUNC4", 290,
+ "FUNC5", 291,
+ "HSHFUN", 292,
+ "HSHFUN3", 293,
+ "FLIST2", 294,
+ "SUB", 295,
+ "FILETEST", 296,
+ "LOCAL", 297,
+ "DELETE", 298,
+ "RELOP", 299,
+ "EQOP", 300,
+ "MULOP", 301,
+ "ADDOP", 302,
+ "PACKAGE", 303,
+ "AMPER", 304,
+ "FORMLIST", 305,
+ "REG", 306,
+ "ARYLEN", 307,
+ "ARY", 308,
+ "HSH", 309,
+ "STAR", 310,
+ "SUBST", 311,
+ "PATTERN", 312,
+ "RSTRING", 313,
+ "TRANS", 314,
+ "LISTOP", 315,
+ ",", 44,
+ "=", 61,
+ "?", 63,
+ ":", 58,
+ "DOTDOT", 316,
+ "OROR", 317,
+ "ANDAND", 318,
+ "|", 124,
+ "^", 94,
+ "&", 38,
+ "UNIOP", 319,
+ "LS", 320,
+ "RS", 321,
+ "MATCH", 322,
+ "NMATCH", 323,
+ "!", 33,
+ "~", 126,
+ "UMINUS", 324,
+ "POW", 325,
+ "INC", 326,
+ "DEC", 327,
+ "(", 40,
+ "-unknown-", -1 /* ends search */
+};
+
+char * yyreds[] =
+{
+ "-no such reduction-",
+ "prog : /* empty */",
+ "prog : lineseq",
+ "compblock : block CONTINUE block",
+ "compblock : block else",
+ "else : /* empty */",
+ "else : ELSE block",
+ "else : ELSIF '(' expr ')' compblock",
+ "block : '{' remember lineseq '}'",
+ "remember : /* empty */",
+ "lineseq : /* empty */",
+ "lineseq : lineseq line",
+ "line : decl",
+ "line : label cond",
+ "line : loop",
+ "line : label ';'",
+ "line : label sideff ';'",
+ "sideff : error",
+ "sideff : expr",
+ "sideff : expr IF expr",
+ "sideff : expr UNLESS expr",
+ "sideff : expr WHILE expr",
+ "sideff : expr UNTIL expr",
+ "cond : IF '(' expr ')' compblock",
+ "cond : UNLESS '(' expr ')' compblock",
+ "cond : IF block compblock",
+ "cond : UNLESS block compblock",
+ "loop : label WHILE '(' texpr ')' compblock",
+ "loop : label UNTIL '(' expr ')' compblock",
+ "loop : label WHILE block compblock",
+ "loop : label UNTIL block compblock",
+ "loop : label FOR REG '(' expr ')' compblock",
+ "loop : label FOR '(' expr ')' compblock",
+ "loop : label FOR '(' nexpr ';' texpr ';' nexpr ')' block",
+ "loop : label compblock",
+ "nexpr : /* empty */",
+ "nexpr : sideff",
+ "texpr : /* empty */",
+ "texpr : expr",
+ "label : /* empty */",
+ "label : WORD ':'",
+ "decl : format",
+ "decl : subrout",
+ "decl : package",
+ "format : FORMAT WORD '=' FORMLIST",
+ "format : FORMAT '=' FORMLIST",
+ "subrout : SUB WORD block",
+ "package : PACKAGE WORD ';'",
+ "cexpr : ',' expr",
+ "expr : expr ',' sexpr",
+ "expr : sexpr",
+ "csexpr : ',' sexpr",
+ "sexpr : sexpr '=' sexpr",
+ "sexpr : sexpr POW '=' sexpr",
+ "sexpr : sexpr MULOP '=' sexpr",
+ "sexpr : sexpr ADDOP '=' sexpr",
+ "sexpr : sexpr LS '=' sexpr",
+ "sexpr : sexpr RS '=' sexpr",
+ "sexpr : sexpr '&' '=' sexpr",
+ "sexpr : sexpr '^' '=' sexpr",
+ "sexpr : sexpr '|' '=' sexpr",
+ "sexpr : sexpr POW sexpr",
+ "sexpr : sexpr MULOP sexpr",
+ "sexpr : sexpr ADDOP sexpr",
+ "sexpr : sexpr LS sexpr",
+ "sexpr : sexpr RS sexpr",
+ "sexpr : sexpr RELOP sexpr",
+ "sexpr : sexpr EQOP sexpr",
+ "sexpr : sexpr '&' sexpr",
+ "sexpr : sexpr '^' sexpr",
+ "sexpr : sexpr '|' sexpr",
+ "sexpr : sexpr DOTDOT sexpr",
+ "sexpr : sexpr ANDAND sexpr",
+ "sexpr : sexpr OROR sexpr",
+ "sexpr : sexpr '?' sexpr ':' sexpr",
+ "sexpr : sexpr MATCH sexpr",
+ "sexpr : sexpr NMATCH sexpr",
+ "sexpr : term",
+ "term : '-' term",
+ "term : '+' term",
+ "term : '!' term",
+ "term : '~' term",
+ "term : term INC",
+ "term : term DEC",
+ "term : INC term",
+ "term : DEC term",
+ "term : FILETEST WORD",
+ "term : FILETEST sexpr",
+ "term : FILETEST",
+ "term : LOCAL '(' expr ')'",
+ "term : '(' expr ',' ')'",
+ "term : '(' expr ')'",
+ "term : '(' ')'",
+ "term : DO sexpr",
+ "term : DO block",
+ "term : REG",
+ "term : STAR",
+ "term : REG '[' expr ']'",
+ "term : HSH",
+ "term : ARY",
+ "term : REG '{' expr '}'",
+ "term : '(' expr ')' '[' expr ']'",
+ "term : '(' ')' '[' expr ']'",
+ "term : ARY '[' expr ']'",
+ "term : ARY '{' expr '}'",
+ "term : DELETE REG '{' expr '}'",
+ "term : ARYLEN",
+ "term : RSTRING",
+ "term : PATTERN",
+ "term : SUBST",
+ "term : TRANS",
+ "term : DO WORD '(' expr ')'",
+ "term : AMPER WORD '(' expr ')'",
+ "term : DO WORD '(' ')'",
+ "term : AMPER WORD '(' ')'",
+ "term : AMPER WORD",
+ "term : DO REG '(' expr ')'",
+ "term : AMPER REG '(' expr ')'",
+ "term : DO REG '(' ')'",
+ "term : AMPER REG '(' ')'",
+ "term : AMPER REG",
+ "term : LOOPEX",
+ "term : LOOPEX WORD",
+ "term : UNIOP",
+ "term : UNIOP sexpr",
+ "term : SSELECT",
+ "term : SSELECT '(' handle ')'",
+ "term : SSELECT '(' sexpr csexpr csexpr csexpr ')'",
+ "term : OPEN WORD",
+ "term : OPEN '(' WORD ')'",
+ "term : OPEN '(' handle cexpr ')'",
+ "term : FILOP '(' handle ')'",
+ "term : FILOP WORD",
+ "term : FILOP REG",
+ "term : FILOP '(' ')'",
+ "term : FILOP",
+ "term : FILOP2 '(' handle cexpr ')'",
+ "term : FILOP3 '(' handle csexpr cexpr ')'",
+ "term : FILOP22 '(' handle ',' handle ')'",
+ "term : FILOP4 '(' handle csexpr csexpr cexpr ')'",
+ "term : FILOP25 '(' handle ',' handle csexpr csexpr cexpr ')'",
+ "term : PUSH '(' aryword cexpr ')'",
+ "term : POP aryword",
+ "term : POP '(' aryword ')'",
+ "term : SHIFT aryword",
+ "term : SHIFT '(' aryword ')'",
+ "term : SHIFT",
+ "term : SPLIT",
+ "term : SPLIT '(' sexpr csexpr csexpr ')'",
+ "term : SPLIT '(' sexpr csexpr ')'",
+ "term : SPLIT '(' sexpr ')'",
+ "term : FLIST2 '(' sexpr cexpr ')'",
+ "term : FLIST '(' expr ')'",
+ "term : LVALFUN sexpr",
+ "term : LVALFUN",
+ "term : FUNC0",
+ "term : FUNC0 '(' ')'",
+ "term : FUNC1 '(' ')'",
+ "term : FUNC1 '(' expr ')'",
+ "term : FUNC2 '(' sexpr cexpr ')'",
+ "term : FUNC2x '(' sexpr csexpr ')'",
+ "term : FUNC2x '(' sexpr csexpr cexpr ')'",
+ "term : FUNC3 '(' sexpr csexpr cexpr ')'",
+ "term : FUNC4 '(' sexpr csexpr csexpr cexpr ')'",
+ "term : FUNC5 '(' sexpr csexpr csexpr csexpr cexpr ')'",
+ "term : HSHFUN '(' hshword ')'",
+ "term : HSHFUN hshword",
+ "term : HSHFUN3 '(' hshword csexpr cexpr ')'",
+ "term : bareword",
+ "term : listop",
+ "listop : LISTOP",
+ "listop : LISTOP expr",
+ "listop : LISTOP WORD",
+ "listop : LISTOP WORD expr",
+ "listop : LISTOP REG expr",
+ "handle : WORD",
+ "handle : sexpr",
+ "aryword : WORD",
+ "aryword : ARY",
+ "hshword : WORD",
+ "hshword : HSH",
+ "bareword : WORD",
+};
+#endif /* YYDEBUG */
+#line 1 "/usr/lib/yaccpar"
+/* @(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10 */
+
+/*
+** Skeleton parser driver for yacc output
+*/
+
+/*
+** yacc user known macros and defines
+*/
+#define YYERROR goto yyerrlab
+#ifdef IGNOREFREE
+#define YYACCEPT { return(0); }
+#define YYABORT { return(1); }
+#else
+#define YYACCEPT { Safefree(yys); free(yyv); return(0); }
+#define YYABORT { Safefree(yys); free(yyv); return(1); }
+#endif
+#define YYBACKUP( newtoken, newvalue )\
+{\
+ if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
+ {\
+ yyerror( "syntax error - cannot backup" );\
+ goto yyerrlab;\
+ }\
+ yychar = newtoken;\
+ yystate = *yyps;\
+ yylval = newvalue;\
+ goto yynewstate;\
+}
+#define YYRECOVERING() (!!yyerrflag)
+#ifndef YYDEBUG
+# define YYDEBUG 1 /* make debugging available */
+#endif
+
+/*
+** user known globals
+*/
+int yydebug; /* set to 1 to get debugging */
+
+/*
+** driver internal defines
+*/
+#define YYFLAG (-1000)
+
+/*
+** static variables used by the parser
+*/
+static YYSTYPE *yyv; /* value stack */
+static int *yys; /* state stack */
+
+static YYSTYPE *yypv; /* top of value stack */
+static int *yyps; /* top of state stack */
+
+static int yystate; /* current state */
+static int yytmp; /* extra var (lasts between blocks) */
+
+int yynerrs; /* number of errors */
+
+int yyerrflag; /* error recovery flag */
+int yychar; /* current input token number */
+
+
+/*
+** yyparse - return 0 if worked, 1 if syntax error not recovered from
+*/
+int
+yyparse()
+{
+ register YYSTYPE *yypvt; /* top of value stack for $vars */
+ unsigned yymaxdepth = YYMAXDEPTH;
+
+ /*
+ ** Initialize externals - yyparse may be called more than once
+ */
+#ifdef BWGC
+ yyv = (YYSTYPE*)gc_malloc(yymaxdepth*sizeof(YYSTYPE));
+ yys = (int*)gc_malloc(yymaxdepth*sizeof(int));
+#else
+ yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE));
+ yys = (int*)malloc(yymaxdepth*sizeof(int));
+#endif
+ if (!yyv || !yys)
+ {
+ yyerror( "out of memory" );
+ return(1);
+ }
+ yypv = &yyv[-1];
+ yyps = &yys[-1];
+ yystate = 0;
+ yytmp = 0;
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = -1;
+
+ goto yystack;
+ {
+ register YYSTYPE *yy_pv; /* top of value stack */
+ register int *yy_ps; /* top of state stack */
+ register int yy_state; /* current state */
+ register int yy_n; /* internal state number info */
+
+ /*
+ ** get globals into registers.
+ ** branch to here only if YYBACKUP was called.
+ */
+ yynewstate:
+ yy_pv = yypv;
+ yy_ps = yyps;
+ yy_state = yystate;
+ goto yy_newstate;
+
+ /*
+ ** get globals into registers.
+ ** either we just started, or we just finished a reduction
+ */
+ yystack:
+ yy_pv = yypv;
+ yy_ps = yyps;
+ yy_state = yystate;
+
+ /*
+ ** top of for (;;) loop while no reductions done
+ */
+ yy_stack:
+ /*
+ ** put a state and value onto the stacks
+ */
+#if YYDEBUG
+ /*
+ ** if debugging, look up token value in list of value vs.
+ ** name pairs. 0 and negative (-1) are special values.
+ ** Note: linear search is used since time is not a real
+ ** consideration while debugging.
+ */
+ if ( yydebug )
+ {
+ register int yy_i;
+
+ (void)printf( "State %d, token ", yy_state );
+ if ( yychar == 0 )
+ (void)printf( "end-of-file\n" );
+ else if ( yychar < 0 )
+ (void)printf( "-none-\n" );
+ else
+ {
+ for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
+ yy_i++ )
+ {
+ if ( yytoks[yy_i].t_val == yychar )
+ break;
+ }
+ (void)printf( "%s\n", yytoks[yy_i].t_name );
+ }
+ }
+#endif /* YYDEBUG */
+ if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */
+ {
+ /*
+ ** reallocate and recover. Note that pointers
+ ** have to be reset, or bad things will happen
+ */
+ int yyps_index = (yy_ps - yys);
+ int yypv_index = (yy_pv - yyv);
+ int yypvt_index = (yypvt - yyv);
+ yymaxdepth += YYMAXDEPTH;
+#ifdef BWGC
+ yyv = (YYSTYPE*)gc_realloc((char*)yyv,
+ yymaxdepth * sizeof(YYSTYPE));
+ yys = (int*)gc_realloc((char*)yys,
+ yymaxdepth * sizeof(int));
+#else
+ yyv = (YYSTYPE*)realloc((char*)yyv,
+ yymaxdepth * sizeof(YYSTYPE));
+ yys = (int*)realloc((char*)yys,
+ yymaxdepth * sizeof(int));
+#endif
+ if (!yyv || !yys)
+ {
+ yyerror( "yacc stack overflow" );
+ return(1);
+ }
+ yy_ps = yys + yyps_index;
+ yy_pv = yyv + yypv_index;
+ yypvt = yyv + yypvt_index;
+ }
+ *yy_ps = yy_state;
+ *++yy_pv = yyval;
+
+ /*
+ ** we have a new state - find out what to do
+ */
+ yy_newstate:
+ if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
+ goto yydefault; /* simple state */
+#if YYDEBUG
+ /*
+ ** if debugging, need to mark whether new token grabbed
+ */
+ yytmp = yychar < 0;
+#endif
+ if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
+ yychar = 0; /* reached EOF */
+#if YYDEBUG
+ if ( yydebug && yytmp )
+ {
+ register int yy_i;
+
+ (void)printf( "Received token " );
+ if ( yychar == 0 )
+ (void)printf( "end-of-file\n" );
+ else if ( yychar < 0 )
+ (void)printf( "-none-\n" );
+ else
+ {
+ for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
+ yy_i++ )
+ {
+ if ( yytoks[yy_i].t_val == yychar )
+ break;
+ }
+ (void)printf( "%s\n", yytoks[yy_i].t_name );
+ }
+ }
+#endif /* YYDEBUG */
+ if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
+ goto yydefault;
+ if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/
+ {
+ yychar = -1;
+ yyval = yylval;
+ yy_state = yy_n;
+ if ( yyerrflag > 0 )
+ yyerrflag--;
+ goto yy_stack;
+ }
+
+ yydefault:
+ if ( ( yy_n = yydef[ yy_state ] ) == -2 )
+ {
+#if YYDEBUG
+ yytmp = yychar < 0;
+#endif
+ if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
+ yychar = 0; /* reached EOF */
+#if YYDEBUG
+ if ( yydebug && yytmp )
+ {
+ register int yy_i;
+
+ (void)printf( "Received token " );
+ if ( yychar == 0 )
+ (void)printf( "end-of-file\n" );
+ else if ( yychar < 0 )
+ (void)printf( "-none-\n" );
+ else
+ {
+ for ( yy_i = 0;
+ yytoks[yy_i].t_val >= 0;
+ yy_i++ )
+ {
+ if ( yytoks[yy_i].t_val
+ == yychar )
+ {
+ break;
+ }
+ }
+ (void)printf( "%s\n", yytoks[yy_i].t_name );
+ }
+ }
+#endif /* YYDEBUG */
+ /*
+ ** look through exception table
+ */
+ {
+ register int *yyxi = yyexca;
+
+ while ( ( *yyxi != -1 ) ||
+ ( yyxi[1] != yy_state ) )
+ {
+ yyxi += 2;
+ }
+ while ( ( *(yyxi += 2) >= 0 ) &&
+ ( *yyxi != yychar ) )
+ ;
+ if ( ( yy_n = yyxi[1] ) < 0 )
+ YYACCEPT;
+ }
+ }
+
+ /*
+ ** check for syntax error
+ */
+ if ( yy_n == 0 ) /* have an error */
+ {
+ /* no worry about speed here! */
+ switch ( yyerrflag )
+ {
+ case 0: /* new error */
+ yyerror( "syntax error" );
+ goto skip_init;
+ yyerrlab:
+ /*
+ ** get globals into registers.
+ ** we have a user generated syntax type error
+ */
+ yy_pv = yypv;
+ yy_ps = yyps;
+ yy_state = yystate;
+ yynerrs++;
+ skip_init:
+ case 1:
+ case 2: /* incompletely recovered error */
+ /* try again... */
+ yyerrflag = 3;
+ /*
+ ** find state where "error" is a legal
+ ** shift action
+ */
+ while ( yy_ps >= yys )
+ {
+ yy_n = yypact[ *yy_ps ] + YYERRCODE;
+ if ( yy_n >= 0 && yy_n < YYLAST &&
+ yychk[yyact[yy_n]] == YYERRCODE) {
+ /*
+ ** simulate shift of "error"
+ */
+ yy_state = yyact[ yy_n ];
+ goto yy_stack;
+ }
+ /*
+ ** current state has no shift on
+ ** "error", pop stack
+ */
+#if YYDEBUG
+# define _POP_ "Error recovery pops state %d, uncovers state %d\n"
+ if ( yydebug )
+ (void)printf( _POP_, *yy_ps,
+ yy_ps[-1] );
+# undef _POP_
+#endif
+ yy_ps--;
+ yy_pv--;
+ }
+ /*
+ ** there is no state on stack with "error" as
+ ** a valid shift. give up.
+ */
+ YYABORT;
+ case 3: /* no shift yet; eat a token */
+#if YYDEBUG
+ /*
+ ** if debugging, look up token in list of
+ ** pairs. 0 and negative shouldn't occur,
+ ** but since timing doesn't matter when
+ ** debugging, it doesn't hurt to leave the
+ ** tests here.
+ */
+ if ( yydebug )
+ {
+ register int yy_i;
+
+ (void)printf( "Error recovery discards " );
+ if ( yychar == 0 )
+ (void)printf( "token end-of-file\n" );
+ else if ( yychar < 0 )
+ (void)printf( "token -none-\n" );
+ else
+ {
+ for ( yy_i = 0;
+ yytoks[yy_i].t_val >= 0;
+ yy_i++ )
+ {
+ if ( yytoks[yy_i].t_val
+ == yychar )
+ {
+ break;
+ }
+ }
+ (void)printf( "token %s\n",
+ yytoks[yy_i].t_name );
+ }
+ }
+#endif /* YYDEBUG */
+ if ( yychar == 0 ) /* reached EOF. quit */
+ YYABORT;
+ yychar = -1;
+ goto yy_newstate;
+ }
+ }/* end if ( yy_n == 0 ) */
+ /*
+ ** reduction by production yy_n
+ ** put stack tops, etc. so things right after switch
+ */
+#if YYDEBUG
+ /*
+ ** if debugging, print the string that is the user's
+ ** specification of the reduction which is just about
+ ** to be done.
+ */
+ if ( yydebug )
+ (void)printf( "Reduce by (%d) \"%s\"\n",
+ yy_n, yyreds[ yy_n ] );
+#endif
+ yytmp = yy_n; /* value to switch over */
+ yypvt = yy_pv; /* $vars top of value stack */
+ /*
+ ** Look in goto table for next state
+ ** Sorry about using yy_state here as temporary
+ ** register variable, but why not, if it works...
+ ** If yyr2[ yy_n ] doesn't have the low order bit
+ ** set, then there is no action to be done for
+ ** this reduction. So, no saving & unsaving of
+ ** registers done. The only difference between the
+ ** code just after the if and the body of the if is
+ ** the goto yy_stack in the body. This way the test
+ ** can be made before the choice of what to do is needed.
+ */
+ {
+ /* length of production doubled with extra bit */
+ register int yy_len = yyr2[ yy_n ];
+
+ if ( !( yy_len & 01 ) )
+ {
+ yy_len >>= 1;
+ yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
+ yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
+ *( yy_ps -= yy_len ) + 1;
+ if ( yy_state >= YYLAST ||
+ yychk[ yy_state =
+ yyact[ yy_state ] ] != -yy_n )
+ {
+ yy_state = yyact[ yypgo[ yy_n ] ];
+ }
+ goto yy_stack;
+ }
+ yy_len >>= 1;
+ yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
+ yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
+ *( yy_ps -= yy_len ) + 1;
+ if ( yy_state >= YYLAST ||
+ yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
+ {
+ yy_state = yyact[ yypgo[ yy_n ] ];
+ }
+ }
+ /* save until reenter driver code */
+ yystate = yy_state;
+ yyps = yy_ps;
+ yypv = yy_pv;
+ }
+ /*
+ ** code supplied by user is placed in this switch
+ */
+ switch( yytmp )
+ {
+
+case 1:
+# line 81 "perly.y"
+{
+#if defined(YYDEBUG) && defined(DEBUGGING)
+ yydebug = (debug & 1);
+#endif
+ } break;
+case 2:
+# line 87 "perly.y"
+{ if (in_eval)
+ eval_root = block_head(yypvt[-0].cmdval);
+ else
+ main_root = block_head(yypvt[-0].cmdval); } break;
+case 3:
+# line 94 "perly.y"
+{ yyval.compval.comp_true = yypvt[-2].cmdval; yyval.compval.comp_alt = yypvt[-0].cmdval; } break;
+case 4:
+# line 96 "perly.y"
+{ yyval.compval.comp_true = yypvt[-1].cmdval; yyval.compval.comp_alt = yypvt[-0].cmdval; } break;
+case 5:
+# line 100 "perly.y"
+{ yyval.cmdval = Nullcmd; } break;
+case 6:
+# line 102 "perly.y"
+{ yyval.cmdval = yypvt[-0].cmdval; } break;
+case 7:
+# line 104 "perly.y"
+{ cmdline = yypvt[-4].ival;
+ yyval.cmdval = make_ccmd(C_ELSIF,yypvt[-2].arg,yypvt[-0].compval); } break;
+case 8:
+# line 109 "perly.y"
+{ yyval.cmdval = block_head(yypvt[-1].cmdval);
+ if (savestack->ary_fill > yypvt[-2].ival)
+ restorelist(yypvt[-2].ival); } break;
+case 9:
+# line 115 "perly.y"
+{ yyval.ival = savestack->ary_fill; } break;
+case 10:
+# line 119 "perly.y"
+{ yyval.cmdval = Nullcmd; } break;
+case 11:
+# line 121 "perly.y"
+{ yyval.cmdval = append_line(yypvt[-1].cmdval,yypvt[-0].cmdval); } break;
+case 12:
+# line 125 "perly.y"
+{ yyval.cmdval = Nullcmd; } break;
+case 13:
+# line 127 "perly.y"
+{ yyval.cmdval = add_label(yypvt[-1].cval,yypvt[-0].cmdval); } break;
+case 15:
+# line 130 "perly.y"
+{ if (yypvt[-1].cval != Nullch) {
+ yyval.cmdval = add_label(yypvt[-1].cval, make_acmd(C_EXPR, Nullstab,
+ Nullarg, Nullarg) );
+ }
+ else {
+ yyval.cmdval = Nullcmd;
+ cmdline = NOLINE;
+ } } break;
+case 16:
+# line 139 "perly.y"
+{ yyval.cmdval = add_label(yypvt[-2].cval,yypvt[-1].cmdval); } break;
+case 17:
+# line 143 "perly.y"
+{ yyval.cmdval = Nullcmd; } break;
+case 18:
+# line 145 "perly.y"
+{ yyval.cmdval = make_acmd(C_EXPR, Nullstab, yypvt[-0].arg, Nullarg); } break;
+case 19:
+# line 147 "perly.y"
+{ yyval.cmdval = addcond(
+ make_acmd(C_EXPR, Nullstab, Nullarg, yypvt[-2].arg), yypvt[-0].arg); } break;
+case 20:
+# line 150 "perly.y"
+{ yyval.cmdval = addcond(invert(
+ make_acmd(C_EXPR, Nullstab, Nullarg, yypvt[-2].arg)), yypvt[-0].arg); } break;
+case 21:
+# line 153 "perly.y"
+{ yyval.cmdval = addloop(
+ make_acmd(C_EXPR, Nullstab, Nullarg, yypvt[-2].arg), yypvt[-0].arg); } break;
+case 22:
+# line 156 "perly.y"
+{ yyval.cmdval = addloop(invert(
+ make_acmd(C_EXPR, Nullstab, Nullarg, yypvt[-2].arg)), yypvt[-0].arg); } break;
+case 23:
+# line 161 "perly.y"
+{ cmdline = yypvt[-4].ival;
+ yyval.cmdval = make_icmd(C_IF,yypvt[-2].arg,yypvt[-0].compval); } break;
+case 24:
+# line 164 "perly.y"
+{ cmdline = yypvt[-4].ival;
+ yyval.cmdval = invert(make_icmd(C_IF,yypvt[-2].arg,yypvt[-0].compval)); } break;
+case 25:
+# line 167 "perly.y"
+{ cmdline = yypvt[-2].ival;
+ yyval.cmdval = make_ccmd(C_IF,cmd_to_arg(yypvt[-1].cmdval),yypvt[-0].compval); } break;
+case 26:
+# line 170 "perly.y"
+{ cmdline = yypvt[-2].ival;
+ yyval.cmdval = invert(make_ccmd(C_IF,cmd_to_arg(yypvt[-1].cmdval),yypvt[-0].compval)); } break;
+case 27:
+# line 175 "perly.y"
+{ cmdline = yypvt[-4].ival;
+ yyval.cmdval = wopt(add_label(yypvt[-5].cval,
+ make_ccmd(C_WHILE,yypvt[-2].arg,yypvt[-0].compval) )); } break;
+case 28:
+# line 179 "perly.y"
+{ cmdline = yypvt[-4].ival;
+ yyval.cmdval = wopt(add_label(yypvt[-5].cval,
+ invert(make_ccmd(C_WHILE,yypvt[-2].arg,yypvt[-0].compval)) )); } break;
+case 29:
+# line 183 "perly.y"
+{ cmdline = yypvt[-2].ival;
+ yyval.cmdval = wopt(add_label(yypvt[-3].cval,
+ make_ccmd(C_WHILE, cmd_to_arg(yypvt[-1].cmdval),yypvt[-0].compval) )); } break;
+case 30:
+# line 187 "perly.y"
+{ cmdline = yypvt[-2].ival;
+ yyval.cmdval = wopt(add_label(yypvt[-3].cval,
+ invert(make_ccmd(C_WHILE, cmd_to_arg(yypvt[-1].cmdval),yypvt[-0].compval)) )); } break;
+case 31:
+# line 191 "perly.y"
+{ cmdline = yypvt[-5].ival;
+ /*
+ * The following gobbledygook catches EXPRs that
+ * aren't explicit array refs and translates
+ * foreach VAR (EXPR) {
+ * into
+ * @ary = EXPR;
+ * foreach VAR (@ary) {
+ * where @ary is a hidden array made by genstab().
+ * (Note that @ary may become a local array if
+ * it is determined that it might be called
+ * recursively. See cmd_tosave().)
+ */
+ if (yypvt[-2].arg->arg_type != O_ARRAY) {
+ scrstab = aadd(genstab());
+ yyval.cmdval = append_line(
+ make_acmd(C_EXPR, Nullstab,
+ l(make_op(O_ASSIGN,2,
+ listish(make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,scrstab),
+ Nullarg,Nullarg )),
+ listish(make_list(yypvt[-2].arg)),
+ Nullarg)),
+ Nullarg),
+ wopt(over(yypvt[-4].stabval,add_label(yypvt[-6].cval,
+ make_ccmd(C_WHILE,
+ make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,scrstab),
+ Nullarg,Nullarg ),
+ yypvt[-0].compval)))));
+ yyval.cmdval->c_line = yypvt[-5].ival;
+ yyval.cmdval->c_head->c_line = yypvt[-5].ival;
+ }
+ else {
+ yyval.cmdval = wopt(over(yypvt[-4].stabval,add_label(yypvt[-6].cval,
+ make_ccmd(C_WHILE,yypvt[-2].arg,yypvt[-0].compval) )));
+ }
+ } break;
+case 32:
+# line 230 "perly.y"
+{ cmdline = yypvt[-4].ival;
+ if (yypvt[-2].arg->arg_type != O_ARRAY) {
+ scrstab = aadd(genstab());
+ yyval.cmdval = append_line(
+ make_acmd(C_EXPR, Nullstab,
+ l(make_op(O_ASSIGN,2,
+ listish(make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,scrstab),
+ Nullarg,Nullarg )),
+ listish(make_list(yypvt[-2].arg)),
+ Nullarg)),
+ Nullarg),
+ wopt(over(defstab,add_label(yypvt[-5].cval,
+ make_ccmd(C_WHILE,
+ make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,scrstab),
+ Nullarg,Nullarg ),
+ yypvt[-0].compval)))));
+ yyval.cmdval->c_line = yypvt[-4].ival;
+ yyval.cmdval->c_head->c_line = yypvt[-4].ival;
+ }
+ else { /* lisp, anyone? */
+ yyval.cmdval = wopt(over(defstab,add_label(yypvt[-5].cval,
+ make_ccmd(C_WHILE,yypvt[-2].arg,yypvt[-0].compval) )));
+ }
+ } break;
+case 33:
+# line 258 "perly.y"
+{ yyval.compval.comp_true = yypvt[-0].cmdval;
+ yyval.compval.comp_alt = yypvt[-2].cmdval;
+ cmdline = yypvt[-8].ival;
+ yyval.cmdval = append_line(yypvt[-6].cmdval,wopt(add_label(yypvt[-9].cval,
+ make_ccmd(C_WHILE,yypvt[-4].arg,yyval.compval) ))); } break;
+case 34:
+# line 264 "perly.y"
+{ yyval.cmdval = add_label(yypvt[-1].cval,make_ccmd(C_BLOCK,Nullarg,yypvt[-0].compval)); } break;
+case 35:
+# line 268 "perly.y"
+{ yyval.cmdval = Nullcmd; } break;
+case 37:
+# line 273 "perly.y"
+{ (void)scanstr("1"); yyval.arg = yylval.arg; } break;
+case 39:
+# line 278 "perly.y"
+{ yyval.cval = Nullch; } break;
+case 41:
+# line 283 "perly.y"
+{ yyval.ival = 0; } break;
+case 42:
+# line 285 "perly.y"
+{ yyval.ival = 0; } break;
+case 43:
+# line 287 "perly.y"
+{ yyval.ival = 0; } break;
+case 44:
+# line 291 "perly.y"
+{ if (strEQ(yypvt[-2].cval,"stdout"))
+ make_form(stabent("STDOUT",TRUE),yypvt[-0].formval);
+ else if (strEQ(yypvt[-2].cval,"stderr"))
+ make_form(stabent("STDERR",TRUE),yypvt[-0].formval);
+ else
+ make_form(stabent(yypvt[-2].cval,TRUE),yypvt[-0].formval);
+ Safefree(yypvt[-2].cval); yypvt[-2].cval = Nullch; } break;
+case 45:
+# line 299 "perly.y"
+{ make_form(stabent("STDOUT",TRUE),yypvt[-0].formval); } break;
+case 46:
+# line 303 "perly.y"
+{ make_sub(yypvt[-1].cval,yypvt[-0].cmdval); } break;
+case 47:
+# line 307 "perly.y"
+{ char tmpbuf[256];
+ STAB *tmpstab;
+
+ savehptr(&curstash);
+ saveitem(curstname);
+ str_set(curstname,yypvt[-1].cval);
+ sprintf(tmpbuf,"'_%s",yypvt[-1].cval);
+ tmpstab = stabent(tmpbuf,TRUE);
+ if (!stab_xhash(tmpstab))
+ stab_xhash(tmpstab) = hnew(0);
+ curstash = stab_xhash(tmpstab);
+ if (!curstash->tbl_name)
+ curstash->tbl_name = savestr(yypvt[-1].cval);
+ curstash->tbl_coeffsize = 0;
+ Safefree(yypvt[-1].cval); yypvt[-1].cval = Nullch;
+ cmdline = NOLINE;
+ } break;
+case 48:
+# line 327 "perly.y"
+{ yyval.arg = yypvt[-0].arg; } break;
+case 49:
+# line 331 "perly.y"
+{ yyval.arg = make_op(O_COMMA, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 51:
+# line 336 "perly.y"
+{ yyval.arg = yypvt[-0].arg; } break;
+case 52:
+# line 340 "perly.y"
+{ yypvt[-2].arg = listish(yypvt[-2].arg);
+ if (yypvt[-2].arg->arg_type == O_ASSIGN && yypvt[-2].arg->arg_len == 1)
+ yypvt[-2].arg->arg_type = O_ITEM; /* a local() */
+ if (yypvt[-2].arg->arg_type == O_LIST)
+ yypvt[-0].arg = listish(yypvt[-0].arg);
+ yyval.arg = l(make_op(O_ASSIGN, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg)); } break;
+case 53:
+# line 347 "perly.y"
+{ yyval.arg = l(make_op(O_POW, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break;
+case 54:
+# line 349 "perly.y"
+{ yyval.arg = l(make_op(yypvt[-2].ival, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break;
+case 55:
+# line 351 "perly.y"
+{ yyval.arg = rcatmaybe(l(make_op(yypvt[-2].ival, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)));} break;
+case 56:
+# line 353 "perly.y"
+{ yyval.arg = l(make_op(O_LEFT_SHIFT, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break;
+case 57:
+# line 355 "perly.y"
+{ yyval.arg = l(make_op(O_RIGHT_SHIFT, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break;
+case 58:
+# line 357 "perly.y"
+{ yyval.arg = l(make_op(O_BIT_AND, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break;
+case 59:
+# line 359 "perly.y"
+{ yyval.arg = l(make_op(O_XOR, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break;
+case 60:
+# line 361 "perly.y"
+{ yyval.arg = l(make_op(O_BIT_OR, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break;
+case 61:
+# line 365 "perly.y"
+{ yyval.arg = make_op(O_POW, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 62:
+# line 367 "perly.y"
+{ if (yypvt[-1].ival == O_REPEAT)
+ yypvt[-2].arg = listish(yypvt[-2].arg);
+ yyval.arg = make_op(yypvt[-1].ival, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg);
+ if (yypvt[-1].ival == O_REPEAT) {
+ if (yyval.arg[1].arg_type != A_EXPR ||
+ yyval.arg[1].arg_ptr.arg_arg->arg_type != O_LIST)
+ yyval.arg[1].arg_flags &= ~AF_ARYOK;
+ } } break;
+case 63:
+# line 376 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 64:
+# line 378 "perly.y"
+{ yyval.arg = make_op(O_LEFT_SHIFT, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 65:
+# line 380 "perly.y"
+{ yyval.arg = make_op(O_RIGHT_SHIFT, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 66:
+# line 382 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 67:
+# line 384 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 68:
+# line 386 "perly.y"
+{ yyval.arg = make_op(O_BIT_AND, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 69:
+# line 388 "perly.y"
+{ yyval.arg = make_op(O_XOR, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 70:
+# line 390 "perly.y"
+{ yyval.arg = make_op(O_BIT_OR, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 71:
+# line 392 "perly.y"
+{ arg4 = Nullarg;
+ yyval.arg = make_op(O_F_OR_R, 4, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 72:
+# line 395 "perly.y"
+{ yyval.arg = make_op(O_AND, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 73:
+# line 397 "perly.y"
+{ yyval.arg = make_op(O_OR, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break;
+case 74:
+# line 399 "perly.y"
+{ yyval.arg = make_op(O_COND_EXPR, 3, yypvt[-4].arg, yypvt[-2].arg, yypvt[-0].arg); } break;
+case 75:
+# line 401 "perly.y"
+{ yyval.arg = mod_match(O_MATCH, yypvt[-2].arg, yypvt[-0].arg); } break;
+case 76:
+# line 403 "perly.y"
+{ yyval.arg = mod_match(O_NMATCH, yypvt[-2].arg, yypvt[-0].arg); } break;
+case 77:
+# line 405 "perly.y"
+{ yyval.arg = yypvt[-0].arg; } break;
+case 78:
+# line 409 "perly.y"
+{ yyval.arg = make_op(O_NEGATE, 1, yypvt[-0].arg, Nullarg, Nullarg); } break;
+case 79:
+# line 411 "perly.y"
+{ yyval.arg = yypvt[-0].arg; } break;
+case 80:
+# line 413 "perly.y"
+{ yyval.arg = make_op(O_NOT, 1, yypvt[-0].arg, Nullarg, Nullarg); } break;
+case 81:
+# line 415 "perly.y"
+{ yyval.arg = make_op(O_COMPLEMENT, 1, yypvt[-0].arg, Nullarg, Nullarg);} break;
+case 82:
+# line 417 "perly.y"
+{ yyval.arg = addflags(1, AF_POST|AF_UP,
+ l(make_op(O_ITEM,1,yypvt[-1].arg,Nullarg,Nullarg))); } break;
+case 83:
+# line 420 "perly.y"
+{ yyval.arg = addflags(1, AF_POST,
+ l(make_op(O_ITEM,1,yypvt[-1].arg,Nullarg,Nullarg))); } break;
+case 84:
+# line 423 "perly.y"
+{ yyval.arg = addflags(1, AF_PRE|AF_UP,
+ l(make_op(O_ITEM,1,yypvt[-0].arg,Nullarg,Nullarg))); } break;
+case 85:
+# line 426 "perly.y"
+{ yyval.arg = addflags(1, AF_PRE,
+ l(make_op(O_ITEM,1,yypvt[-0].arg,Nullarg,Nullarg))); } break;
+case 86:
+# line 429 "perly.y"
+{ opargs[yypvt[-1].ival] = 0; /* force it special */
+ yyval.arg = make_op(yypvt[-1].ival, 1,
+ stab2arg(A_STAB,stabent(yypvt[-0].cval,TRUE)),
+ Nullarg, Nullarg);
+ } break;
+case 87:
+# line 435 "perly.y"
+{ opargs[yypvt[-1].ival] = 1;
+ yyval.arg = make_op(yypvt[-1].ival, 1, yypvt[-0].arg, Nullarg, Nullarg); } break;
+case 88:
+# line 438 "perly.y"
+{ opargs[yypvt[-0].ival] = (yypvt[-0].ival != O_FTTTY);
+ yyval.arg = make_op(yypvt[-0].ival, 1,
+ stab2arg(A_STAB,
+ yypvt[-0].ival == O_FTTTY?stabent("STDIN",TRUE):defstab),
+ Nullarg, Nullarg); } break;
+case 89:
+# line 444 "perly.y"
+{ yyval.arg = l(localize(make_op(O_ASSIGN, 1,
+ localize(listish(make_list(yypvt[-1].arg))),
+ Nullarg,Nullarg))); } break;
+case 90:
+# line 448 "perly.y"
+{ yyval.arg = make_list(yypvt[-2].arg); } break;
+case 91:
+# line 450 "perly.y"
+{ yyval.arg = make_list(yypvt[-1].arg); } break;
+case 92:
+# line 452 "perly.y"
+{ yyval.arg = make_list(Nullarg); } break;
+case 93:
+# line 454 "perly.y"
+{ yyval.arg = make_op(O_DOFILE,2,yypvt[-0].arg,Nullarg,Nullarg);
+ allstabs = TRUE;} break;
+case 94:
+# line 457 "perly.y"
+{ yyval.arg = cmd_to_arg(yypvt[-0].cmdval); } break;
+case 95:
+# line 459 "perly.y"
+{ yyval.arg = stab2arg(A_STAB,yypvt[-0].stabval); } break;
+case 96:
+# line 461 "perly.y"
+{ yyval.arg = stab2arg(A_STAR,yypvt[-0].stabval); } break;
+case 97:
+# line 463 "perly.y"
+{ yyval.arg = make_op(O_AELEM, 2,
+ stab2arg(A_STAB,aadd(yypvt[-3].stabval)), yypvt[-1].arg, Nullarg); } break;
+case 98:
+# line 466 "perly.y"
+{ yyval.arg = make_op(O_HASH, 1,
+ stab2arg(A_STAB,yypvt[-0].stabval),
+ Nullarg, Nullarg); } break;
+case 99:
+# line 470 "perly.y"
+{ yyval.arg = make_op(O_ARRAY, 1,
+ stab2arg(A_STAB,yypvt[-0].stabval),
+ Nullarg, Nullarg); } break;
+case 100:
+# line 474 "perly.y"
+{ yyval.arg = make_op(O_HELEM, 2,
+ stab2arg(A_STAB,hadd(yypvt[-3].stabval)),
+ jmaybe(yypvt[-1].arg),
+ Nullarg); } break;
+case 101:
+# line 479 "perly.y"
+{ yyval.arg = make_op(O_LSLICE, 3,
+ Nullarg,
+ listish(make_list(yypvt[-1].arg)),
+ listish(make_list(yypvt[-4].arg))); } break;
+case 102:
+# line 484 "perly.y"
+{ yyval.arg = make_op(O_LSLICE, 3,
+ Nullarg,
+ listish(make_list(yypvt[-1].arg)),
+ Nullarg); } break;
+case 103:
+# line 489 "perly.y"
+{ yyval.arg = make_op(O_ASLICE, 2,
+ stab2arg(A_STAB,aadd(yypvt[-3].stabval)),
+ listish(make_list(yypvt[-1].arg)),
+ Nullarg); } break;
+case 104:
+# line 494 "perly.y"
+{ yyval.arg = make_op(O_HSLICE, 2,
+ stab2arg(A_STAB,hadd(yypvt[-3].stabval)),
+ listish(make_list(yypvt[-1].arg)),
+ Nullarg); } break;
+case 105:
+# line 499 "perly.y"
+{ yyval.arg = make_op(O_DELETE, 2,
+ stab2arg(A_STAB,hadd(yypvt[-3].stabval)),
+ jmaybe(yypvt[-1].arg),
+ Nullarg); } break;
+case 106:
+# line 504 "perly.y"
+{ yyval.arg = stab2arg(A_ARYLEN,yypvt[-0].stabval); } break;
+case 107:
+# line 506 "perly.y"
+{ yyval.arg = yypvt[-0].arg; } break;
+case 108:
+# line 508 "perly.y"
+{ yyval.arg = yypvt[-0].arg; } break;
+case 109:
+# line 510 "perly.y"
+{ yyval.arg = yypvt[-0].arg; } break;
+case 110:
+# line 512 "perly.y"
+{ yyval.arg = yypvt[-0].arg; } break;
+case 111:
+# line 514 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yypvt[-3].cval,TRUE)),
+ make_list(yypvt[-1].arg),
+ Nullarg); Safefree(yypvt[-3].cval); yypvt[-3].cval = Nullch;
+ yyval.arg->arg_flags |= AF_DEPR; } break;
+case 112:
+# line 520 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yypvt[-3].cval,TRUE)),
+ make_list(yypvt[-1].arg),
+ Nullarg); Safefree(yypvt[-3].cval); yypvt[-3].cval = Nullch; } break;
+case 113:
+# line 525 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yypvt[-2].cval,TRUE)),
+ make_list(Nullarg),
+ Nullarg);
+ yyval.arg->arg_flags |= AF_DEPR; } break;
+case 114:
+# line 531 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yypvt[-2].cval,TRUE)),
+ make_list(Nullarg),
+ Nullarg); } break;
+case 115:
+# line 536 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)),
+ Nullarg,
+ Nullarg); } break;
+case 116:
+# line 541 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yypvt[-3].stabval),
+ make_list(yypvt[-1].arg),
+ Nullarg);
+ yyval.arg->arg_flags |= AF_DEPR; } break;
+case 117:
+# line 547 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yypvt[-3].stabval),
+ make_list(yypvt[-1].arg),
+ Nullarg); } break;
+case 118:
+# line 552 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yypvt[-2].stabval),
+ make_list(Nullarg),
+ Nullarg);
+ yyval.arg->arg_flags |= AF_DEPR; } break;
+case 119:
+# line 558 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yypvt[-2].stabval),
+ make_list(Nullarg),
+ Nullarg); } break;
+case 120:
+# line 563 "perly.y"
+{ yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2,
+ stab2arg(A_STAB,yypvt[-0].stabval),
+ Nullarg,
+ Nullarg); } break;
+case 121:
+# line 568 "perly.y"
+{ yyval.arg = make_op(yypvt[-0].ival,0,Nullarg,Nullarg,Nullarg); } break;
+case 122:
+# line 570 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival,1,cval_to_arg(yypvt[-0].cval),
+ Nullarg,Nullarg); } break;
+case 123:
+# line 573 "perly.y"
+{ yyval.arg = make_op(yypvt[-0].ival,0,Nullarg,Nullarg,Nullarg); } break;
+case 124:
+# line 575 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival,1,yypvt[-0].arg,Nullarg,Nullarg); } break;
+case 125:
+# line 577 "perly.y"
+{ yyval.arg = make_op(O_SELECT, 0, Nullarg, Nullarg, Nullarg);} break;
+case 126:
+# line 579 "perly.y"
+{ yyval.arg = make_op(O_SELECT, 1, yypvt[-1].arg, Nullarg, Nullarg); } break;
+case 127:
+# line 581 "perly.y"
+{ arg4 = yypvt[-1].arg;
+ yyval.arg = make_op(O_SSELECT, 4, yypvt[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } break;
+case 128:
+# line 584 "perly.y"
+{ yyval.arg = make_op(O_OPEN, 2,
+ stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)),
+ stab2arg(A_STAB,stabent(yypvt[-0].cval,TRUE)),
+ Nullarg); } break;
+case 129:
+# line 589 "perly.y"
+{ yyval.arg = make_op(O_OPEN, 2,
+ stab2arg(A_WORD,stabent(yypvt[-1].cval,TRUE)),
+ stab2arg(A_STAB,stabent(yypvt[-1].cval,TRUE)),
+ Nullarg); } break;
+case 130:
+# line 594 "perly.y"
+{ yyval.arg = make_op(O_OPEN, 2,
+ yypvt[-2].arg,
+ yypvt[-1].arg, Nullarg); } break;
+case 131:
+# line 598 "perly.y"
+{ yyval.arg = make_op(yypvt[-3].ival, 1,
+ yypvt[-1].arg,
+ Nullarg, Nullarg); } break;
+case 132:
+# line 602 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival, 1,
+ stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)),
+ Nullarg, Nullarg);
+ Safefree(yypvt[-0].cval); yypvt[-0].cval = Nullch; } break;
+case 133:
+# line 607 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival, 1,
+ stab2arg(A_STAB,yypvt[-0].stabval),
+ Nullarg, Nullarg); } break;
+case 134:
+# line 611 "perly.y"
+{ yyval.arg = make_op(yypvt[-2].ival, 1,
+ stab2arg(A_WORD,Nullstab),
+ Nullarg, Nullarg); } break;
+case 135:
+# line 615 "perly.y"
+{ yyval.arg = make_op(yypvt[-0].ival, 0,
+ Nullarg, Nullarg, Nullarg); } break;
+case 136:
+# line 618 "perly.y"
+{ yyval.arg = make_op(yypvt[-4].ival, 2, yypvt[-2].arg, yypvt[-1].arg, Nullarg); } break;
+case 137:
+# line 620 "perly.y"
+{ yyval.arg = make_op(yypvt[-5].ival, 3, yypvt[-3].arg, yypvt[-2].arg, make_list(yypvt[-1].arg)); } break;
+case 138:
+# line 622 "perly.y"
+{ yyval.arg = make_op(yypvt[-5].ival, 2, yypvt[-3].arg, yypvt[-1].arg, Nullarg); } break;
+case 139:
+# line 624 "perly.y"
+{ arg4 = yypvt[-1].arg; yyval.arg = make_op(yypvt[-6].ival, 4, yypvt[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } break;
+case 140:
+# line 626 "perly.y"
+{ arg4 = yypvt[-2].arg; arg5 = yypvt[-1].arg;
+ yyval.arg = make_op(yypvt[-8].ival, 5, yypvt[-6].arg, yypvt[-4].arg, yypvt[-3].arg); } break;
+case 141:
+# line 629 "perly.y"
+{ yyval.arg = make_op(yypvt[-4].ival, 2,
+ yypvt[-2].arg,
+ make_list(yypvt[-1].arg),
+ Nullarg); } break;
+case 142:
+# line 634 "perly.y"
+{ yyval.arg = make_op(O_POP, 1, yypvt[-0].arg, Nullarg, Nullarg); } break;
+case 143:
+# line 636 "perly.y"
+{ yyval.arg = make_op(O_POP, 1, yypvt[-1].arg, Nullarg, Nullarg); } break;
+case 144:
+# line 638 "perly.y"
+{ yyval.arg = make_op(O_SHIFT, 1, yypvt[-0].arg, Nullarg, Nullarg); } break;
+case 145:
+# line 640 "perly.y"
+{ yyval.arg = make_op(O_SHIFT, 1, yypvt[-1].arg, Nullarg, Nullarg); } break;
+case 146:
+# line 642 "perly.y"
+{ yyval.arg = make_op(O_SHIFT, 1,
+ stab2arg(A_STAB,
+ aadd(stabent(subline ? "_" : "ARGV", TRUE))),
+ Nullarg, Nullarg); } break;
+case 147:
+# line 647 "perly.y"
+{ static char p[]="/\\s+/";
+ char *oldend = bufend;
+ ARG *oldarg = yylval.arg;
+
+ bufend=p+5;
+ (void)scanpat(p);
+ bufend=oldend;
+ yyval.arg = make_split(defstab,yylval.arg,Nullarg);
+ yylval.arg = oldarg; } break;
+case 148:
+# line 657 "perly.y"
+{ yyval.arg = mod_match(O_MATCH, yypvt[-2].arg,
+ make_split(defstab,yypvt[-3].arg,yypvt[-1].arg));} break;
+case 149:
+# line 660 "perly.y"
+{ yyval.arg = mod_match(O_MATCH, yypvt[-1].arg,
+ make_split(defstab,yypvt[-2].arg,Nullarg) ); } break;
+case 150:
+# line 663 "perly.y"
+{ yyval.arg = mod_match(O_MATCH,
+ stab2arg(A_STAB,defstab),
+ make_split(defstab,yypvt[-1].arg,Nullarg) ); } break;
+case 151:
+# line 667 "perly.y"
+{ yyval.arg = make_op(yypvt[-4].ival, 2,
+ yypvt[-2].arg,
+ listish(make_list(yypvt[-1].arg)),
+ Nullarg); } break;
+case 152:
+# line 672 "perly.y"
+{ yyval.arg = make_op(yypvt[-3].ival, 1,
+ make_list(yypvt[-1].arg),
+ Nullarg,
+ Nullarg); } break;
+case 153:
+# line 677 "perly.y"
+{ yyval.arg = l(make_op(yypvt[-1].ival, 1, fixl(yypvt[-1].ival,yypvt[-0].arg),
+ Nullarg, Nullarg)); } break;
+case 154:
+# line 680 "perly.y"
+{ yyval.arg = l(make_op(yypvt[-0].ival, 1,
+ stab2arg(A_STAB,defstab),
+ Nullarg, Nullarg)); } break;
+case 155:
+# line 684 "perly.y"
+{ yyval.arg = make_op(yypvt[-0].ival, 0, Nullarg, Nullarg, Nullarg); } break;
+case 156:
+# line 686 "perly.y"
+{ yyval.arg = make_op(yypvt[-2].ival, 0, Nullarg, Nullarg, Nullarg); } break;
+case 157:
+# line 688 "perly.y"
+{ yyval.arg = make_op(yypvt[-2].ival, 0, Nullarg, Nullarg, Nullarg); } break;
+case 158:
+# line 690 "perly.y"
+{ yyval.arg = make_op(yypvt[-3].ival, 1, yypvt[-1].arg, Nullarg, Nullarg); } break;
+case 159:
+# line 692 "perly.y"
+{ yyval.arg = make_op(yypvt[-4].ival, 2, yypvt[-2].arg, yypvt[-1].arg, Nullarg);
+ if (yypvt[-4].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE)
+ fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); } break;
+case 160:
+# line 696 "perly.y"
+{ yyval.arg = make_op(yypvt[-4].ival, 2, yypvt[-2].arg, yypvt[-1].arg, Nullarg);
+ if (yypvt[-4].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE)
+ fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); } break;
+case 161:
+# line 700 "perly.y"
+{ yyval.arg = make_op(yypvt[-5].ival, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg);
+ if (yypvt[-5].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE)
+ fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); } break;
+case 162:
+# line 704 "perly.y"
+{ yyval.arg = make_op(yypvt[-5].ival, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg); } break;
+case 163:
+# line 706 "perly.y"
+{ arg4 = yypvt[-1].arg;
+ yyval.arg = make_op(yypvt[-6].ival, 4, yypvt[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } break;
+case 164:
+# line 709 "perly.y"
+{ arg4 = yypvt[-2].arg; arg5 = yypvt[-1].arg;
+ yyval.arg = make_op(yypvt[-7].ival, 5, yypvt[-5].arg, yypvt[-4].arg, yypvt[-3].arg); } break;
+case 165:
+# line 712 "perly.y"
+{ yyval.arg = make_op(yypvt[-3].ival, 1,
+ yypvt[-1].arg,
+ Nullarg,
+ Nullarg); } break;
+case 166:
+# line 717 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival, 1,
+ yypvt[-0].arg,
+ Nullarg,
+ Nullarg); } break;
+case 167:
+# line 722 "perly.y"
+{ yyval.arg = make_op(yypvt[-5].ival, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg); } break;
+case 170:
+# line 728 "perly.y"
+{ yyval.arg = make_op(yypvt[-0].ival,2,
+ stab2arg(A_WORD,Nullstab),
+ stab2arg(A_STAB,defstab),
+ Nullarg); } break;
+case 171:
+# line 733 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival,2,
+ stab2arg(A_WORD,Nullstab),
+ maybelistish(yypvt[-1].ival,make_list(yypvt[-0].arg)),
+ Nullarg); } break;
+case 172:
+# line 738 "perly.y"
+{ yyval.arg = make_op(yypvt[-1].ival,2,
+ stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)),
+ stab2arg(A_STAB,defstab),
+ Nullarg); } break;
+case 173:
+# line 743 "perly.y"
+{ yyval.arg = make_op(yypvt[-2].ival,2,
+ stab2arg(A_WORD,stabent(yypvt[-1].cval,TRUE)),
+ maybelistish(yypvt[-2].ival,make_list(yypvt[-0].arg)),
+ Nullarg); Safefree(yypvt[-1].cval); yypvt[-1].cval = Nullch; } break;
+case 174:
+# line 748 "perly.y"
+{ yyval.arg = make_op(yypvt[-2].ival,2,
+ stab2arg(A_STAB,yypvt[-1].stabval),
+ maybelistish(yypvt[-2].ival,make_list(yypvt[-0].arg)),
+ Nullarg); } break;
+case 175:
+# line 755 "perly.y"
+{ yyval.arg = stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE));
+ Safefree(yypvt[-0].cval); yypvt[-0].cval = Nullch;} break;
+case 177:
+# line 761 "perly.y"
+{ yyval.arg = stab2arg(A_WORD,aadd(stabent(yypvt[-0].cval,TRUE)));
+ Safefree(yypvt[-0].cval); yypvt[-0].cval = Nullch; } break;
+case 178:
+# line 764 "perly.y"
+{ yyval.arg = stab2arg(A_STAB,yypvt[-0].stabval); } break;
+case 179:
+# line 768 "perly.y"
+{ yyval.arg = stab2arg(A_WORD,hadd(stabent(yypvt[-0].cval,TRUE)));
+ Safefree(yypvt[-0].cval); yypvt[-0].cval = Nullch; } break;
+case 180:
+# line 771 "perly.y"
+{ yyval.arg = stab2arg(A_STAB,yypvt[-0].stabval); } break;
+case 181:
+# line 780 "perly.y"
+{ char *s;
+ yyval.arg = op_new(1);
+ yyval.arg->arg_type = O_ITEM;
+ yyval.arg[1].arg_type = A_SINGLE;
+ yyval.arg[1].arg_ptr.arg_str = str_make(yypvt[-0].cval,0);
+ for (s = yypvt[-0].cval; *s && islower(*s); s++) ;
+ if (dowarn && !*s)
+ warn(
+ "\"%s\" may clash with future reserved word",
+ yypvt[-0].cval );
+ } break;
+ }
+ goto yystack; /* reset registers in driver code */
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/usersub.c b/MultiSource/Benchmarks/MallocBench/perl/usersub.c
new file mode 100644
index 00000000..4185fe79
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/usersub.c
@@ -0,0 +1,188 @@
+/* $Header$
+ *
+ * This file contains stubs for routines that the user may define to
+ * set up glue routines for C libraries or to decrypt encrypted scripts
+ * for execution.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:17 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:55:56 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+userinit()
+{
+ return 0;
+}
+
+/*
+ * The following is supplied by John MacDonald as a means of decrypting
+ * and executing (presumably proprietary) scripts that have been encrypted
+ * by a (presumably secret) method. The idea is that you supply your own
+ * routine in place of cryptfilter (which is purposefully a very weak
+ * encryption). If an encrypted script is detected, a process is forked
+ * off to run the cryptfilter routine as input to perl.
+ */
+
+#ifdef CRYPTSCRIPT
+
+#include <signal.h>
+#ifdef I_VFORK
+#include <vfork.h>
+#endif
+
+#define CRYPT_MAGIC_1 0xfb
+#define CRYPT_MAGIC_2 0xf1
+
+cryptfilter( fil )
+FILE * fil;
+{
+ int ch;
+
+ while( (ch = getc( fil )) != EOF ) {
+ putchar( (ch ^ 0x80) );
+ }
+}
+
+#ifndef MSDOS
+static FILE *lastpipefile;
+static int pipepid;
+
+#ifdef VOIDSIG
+# define VOID void
+#else
+# define VOID int
+#endif
+
+FILE *
+mypfiopen(fil,func) /* open a pipe to function call for input */
+FILE *fil;
+VOID (*func)();
+{
+ int p[2];
+ STR *str;
+
+ if (pipe(p) < 0) {
+ fclose( fil );
+ fatal("Can't get pipe for decrypt");
+ }
+
+ /* make sure that the child doesn't get anything extra */
+ fflush(stdout);
+ fflush(stderr);
+
+ while ((pipepid = fork()) < 0) {
+ if (errno != EAGAIN) {
+ close(p[0]);
+ close(p[1]);
+ fclose( fil );
+ fatal("Can't fork for decrypt");
+ }
+ sleep(5);
+ }
+ if (pipepid == 0) {
+ close(p[0]);
+ if (p[1] != 1) {
+ dup2(p[1], 1);
+ close(p[1]);
+ }
+ (*func)(fil);
+ fflush(stdout);
+ fflush(stderr);
+ _exit(0);
+ }
+ close(p[1]);
+ fclose(fil);
+ str = afetch(fdpid,p[0],TRUE);
+ str->str_u.str_useful = pipepid;
+ return fdopen(p[0], "r");
+}
+
+cryptswitch()
+{
+ int ch;
+#ifdef STDSTDIO
+ /* cheat on stdio if possible */
+ if (rsfp->_cnt > 0 && (*rsfp->_ptr & 0xff) != CRYPT_MAGIC_1)
+ return;
+#endif
+ ch = getc(rsfp);
+ if (ch == CRYPT_MAGIC_1) {
+ if (getc(rsfp) == CRYPT_MAGIC_2) {
+ rsfp = mypfiopen( rsfp, cryptfilter );
+ preprocess = 1; /* force call to pclose when done */
+ }
+ else
+ fatal( "bad encryption format" );
+ }
+ else
+ ungetc(ch,rsfp);
+}
+
+FILE *
+cryptopen(cmd) /* open a (possibly encrypted) program for input */
+char *cmd;
+{
+ FILE *fil = fopen( cmd, "r" );
+
+ lastpipefile = Nullfp;
+ pipepid = 0;
+
+ if( fil ) {
+ int ch = getc( fil );
+ int lines = 0;
+ int chars = 0;
+
+ /* Search for the magic cookie that starts the encrypted script,
+ ** while still allowing a few lines of unencrypted text to let
+ ** '#!' and the nih hack both continue to work. (These lines
+ ** will end up being ignored.)
+ */
+ while( ch != CRYPT_MAGIC_1 && ch != EOF && lines < 5 && chars < 300 ) {
+ if( ch == '\n' )
+ ++lines;
+ ch = getc( fil );
+ ++chars;
+ }
+
+ if( ch == CRYPT_MAGIC_1 ) {
+ if( (ch = getc( fil ) ) == CRYPT_MAGIC_2 ) {
+ if( perldb ) fatal("can't debug an encrypted script");
+ /* we found it, decrypt the rest of the file */
+ fil = mypfiopen( fil, cryptfilter );
+ return( lastpipefile = fil );
+ } else
+ /* if its got MAGIC 1 without MAGIC 2, too bad */
+ fatal( "bad encryption format" );
+ }
+
+ /* this file is not encrypted - rewind and process it normally */
+ rewind( fil );
+ }
+
+ return( fil );
+}
+
+VOID
+cryptclose(fil)
+FILE *fil;
+{
+ if( fil == Nullfp )
+ return;
+
+ if( fil == lastpipefile )
+ mypclose( fil );
+ else
+ fclose( fil );
+}
+#endif /* !MSDOS */
+
+#endif /* CRYPTSCRIPT */
diff --git a/MultiSource/Benchmarks/MallocBench/perl/util.c b/MultiSource/Benchmarks/MallocBench/perl/util.c
new file mode 100644
index 00000000..2178ea45
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/util.c
@@ -0,0 +1,1547 @@
+/* $RCSfile$$Revision$$Date$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:17 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0.1.1 91/04/12 09:19:25 lwall
+ * patch1: random cleanup in cpp namespace
+ *
+ * Revision 4.0 91/03/20 01:56:39 lwall
+ * 4.0 baseline.
+ *
+ */
+
+#include "EXTERN.h"
+#include "perl.h"
+
+#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
+#include <signal.h>
+#endif
+
+#ifdef I_VFORK
+# include <vfork.h>
+#endif
+
+#ifdef I_VARARGS
+# include <varargs.h>
+#endif
+
+#ifdef I_FCNTL
+# include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+# include <sys/file.h>
+#endif
+
+#define FLUSH
+
+static char nomem[] = "Out of memory!\n";
+
+/* paranoid version of malloc */
+
+#ifdef DEBUGGING
+static int an = 0;
+#endif
+
+/* NOTE: Do not call the next three routines directly. Use the macros
+ * in handy.h, so that we can easily redefine everything to do tracking of
+ * allocated hunks back to the original New to track down any memory leaks.
+ */
+
+char *
+safemalloc(size)
+#ifdef MSDOS
+unsigned long size;
+#else
+MEM_SIZE size;
+#endif /* MSDOS */
+{
+ char *ptr;
+#ifndef __STDC__
+#ifdef BWGC
+ char *gc_malloc();
+#else
+ char *malloc();
+#endif
+#endif /* ! __STDC__ */
+
+#ifdef MSDOS
+ if (size > 0xffff) {
+ fprintf(stderr, "Allocation too large: %lx\n", size) FLUSH;
+ exit(1);
+ }
+#endif /* MSDOS */
+#ifdef DEBUGGING
+ if ((long)size < 0)
+ fatal("panic: malloc");
+#endif
+#ifdef BWGC
+ ptr = gc_malloc(size?size:1); /* malloc(0) is NASTY on our system */
+#else
+ ptr = malloc(size?size:1); /* malloc(0) is NASTY on our system */
+#endif
+#ifdef DEBUGGING
+# ifndef I286
+ if (debug & 128)
+ fprintf(stderr,"0x%x: (%05d) malloc %d bytes\n",ptr,an++,size);
+# else
+ if (debug & 128)
+ fprintf(stderr,"0x%lx: (%05d) malloc %d bytes\n",ptr,an++,size);
+# endif
+#endif
+ if (ptr != Nullch)
+ return ptr;
+ else {
+ fputs(nomem,stderr) FLUSH;
+ exit(1);
+ }
+ /*NOTREACHED*/
+#ifdef lint
+ return ptr;
+#endif
+}
+
+/* paranoid version of realloc */
+
+char *
+saferealloc(where,size)
+char *where;
+#ifndef MSDOS
+MEM_SIZE size;
+#else
+unsigned long size;
+#endif /* MSDOS */
+{
+ char *ptr;
+#ifndef __STDC__
+#ifdef BWGC
+ char *gc_realloc();
+#else
+ char *realloc();
+#endif
+#endif /* ! __STDC__ */
+
+#ifdef MSDOS
+ if (size > 0xffff) {
+ fprintf(stderr, "Reallocation too large: %lx\n", size) FLUSH;
+ exit(1);
+ }
+#endif /* MSDOS */
+ if (!where)
+ fatal("Null realloc");
+#ifdef DEBUGGING
+ if ((long)size < 0)
+ fatal("panic: realloc");
+#endif
+#ifdef BWGC
+ ptr = gc_realloc(where,size?size:1); /* realloc(0) is NASTY on our system */
+#else
+ ptr = realloc(where,size?size:1); /* realloc(0) is NASTY on our system */
+#endif
+#ifdef DEBUGGING
+# ifndef I286
+ if (debug & 128) {
+ fprintf(stderr,"0x%x: (%05d) rfree\n",where,an++);
+ fprintf(stderr,"0x%x: (%05d) realloc %d bytes\n",ptr,an++,size);
+ }
+# else
+ if (debug & 128) {
+ fprintf(stderr,"0x%lx: (%05d) rfree\n",where,an++);
+ fprintf(stderr,"0x%lx: (%05d) realloc %d bytes\n",ptr,an++,size);
+ }
+# endif
+#endif
+ if (ptr != Nullch)
+ return ptr;
+ else {
+ fputs(nomem,stderr) FLUSH;
+ exit(1);
+ }
+ /*NOTREACHED*/
+#ifdef lint
+ return ptr;
+#endif
+}
+
+/* safe version of free */
+
+void
+safefree(where)
+char *where;
+{
+#ifdef DEBUGGING
+# ifndef I286
+ if (debug & 128)
+ fprintf(stderr,"0x%x: (%05d) free\n",where,an++);
+# else
+ if (debug & 128)
+ fprintf(stderr,"0x%lx: (%05d) free\n",where,an++);
+# endif
+#endif
+#ifndef IGNOREFREE
+ if (where) {
+ free(where);
+ }
+#endif
+}
+
+#ifdef LEAKTEST
+
+#define ALIGN sizeof(long)
+
+char *
+safexmalloc(x,size)
+int x;
+MEM_SIZE size;
+{
+ register char *where;
+
+ where = safemalloc(size + ALIGN);
+ xcount[x]++;
+ where[0] = x % 100;
+ where[1] = x / 100;
+ return where + ALIGN;
+}
+
+char *
+safexrealloc(where,size)
+char *where;
+MEM_SIZE size;
+{
+ return saferealloc(where - ALIGN, size + ALIGN) + ALIGN;
+}
+
+void
+safexfree(where)
+char *where;
+{
+ int x;
+
+ if (!where)
+ return;
+ where -= ALIGN;
+ x = where[0] + 100 * where[1];
+ xcount[x]--;
+ safefree(where);
+}
+
+xstat()
+{
+ register int i;
+
+ for (i = 0; i < MAXXCOUNT; i++) {
+ if (xcount[i] != lastxcount[i]) {
+ fprintf(stderr,"%2d %2d\t%ld\n", i / 100, i % 100, xcount[i]);
+ lastxcount[i] = xcount[i];
+ }
+ }
+}
+
+#endif /* LEAKTEST */
+
+/* copy a string up to some (non-backslashed) delimiter, if any */
+
+char *
+cpytill(to,from,fromend,delim,retlen)
+register char *to;
+register char *from;
+register char *fromend;
+register int delim;
+int *retlen;
+{
+ char *origto = to;
+
+ for (; from < fromend; from++,to++) {
+ if (*from == '\\') {
+ if (from[1] == delim)
+ from++;
+ else if (from[1] == '\\')
+ *to++ = *from++;
+ }
+ else if (*from == delim)
+ break;
+ *to = *from;
+ }
+ *to = '\0';
+ *retlen = to - origto;
+ return from;
+}
+
+/* return ptr to little string in big string, NULL if not found */
+/* This routine was donated by Corey Satten. */
+
+char *
+instr(big, little)
+register char *big;
+register char *little;
+{
+ register char *s, *x;
+ register int first;
+
+ if (!little)
+ return big;
+ first = *little++;
+ if (!first)
+ return big;
+ while (*big) {
+ if (*big++ != first)
+ continue;
+ for (x=big,s=little; *s; /**/ ) {
+ if (!*x)
+ return Nullch;
+ if (*s++ != *x++) {
+ s--;
+ break;
+ }
+ }
+ if (!*s)
+ return big-1;
+ }
+ return Nullch;
+}
+
+/* same as instr but allow embedded nulls */
+
+char *
+ninstr(big, bigend, little, lend)
+register char *big;
+register char *bigend;
+char *little;
+char *lend;
+{
+ register char *s, *x;
+ register int first = *little;
+ register char *littleend = lend;
+
+ if (!first && little > littleend)
+ return big;
+ bigend -= littleend - little++;
+ while (big <= bigend) {
+ if (*big++ != first)
+ continue;
+ for (x=big,s=little; s < littleend; /**/ ) {
+ if (*s++ != *x++) {
+ s--;
+ break;
+ }
+ }
+ if (s >= littleend)
+ return big-1;
+ }
+ return Nullch;
+}
+
+/* reverse of the above--find last substring */
+
+char *
+rninstr(big, bigend, little, lend)
+register char *big;
+char *bigend;
+char *little;
+char *lend;
+{
+ register char *bigbeg;
+ register char *s, *x;
+ register int first = *little;
+ register char *littleend = lend;
+
+ if (!first && little > littleend)
+ return bigend;
+ bigbeg = big;
+ big = bigend - (littleend - little++);
+ while (big >= bigbeg) {
+ if (*big-- != first)
+ continue;
+ for (x=big+2,s=little; s < littleend; /**/ ) {
+ if (*s++ != *x++) {
+ s--;
+ break;
+ }
+ }
+ if (s >= littleend)
+ return big+1;
+ }
+ return Nullch;
+}
+
+unsigned char fold[] = {
+ 0, 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, 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
+ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
+ 'x', 'y', 'z', 91, 92, 93, 94, 95,
+ 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+ 'X', 'Y', 'Z', 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
+};
+
+static unsigned char freq[] = {
+ 1, 2, 84, 151, 154, 155, 156, 157,
+ 165, 246, 250, 3, 158, 7, 18, 29,
+ 40, 51, 62, 73, 85, 96, 107, 118,
+ 129, 140, 147, 148, 149, 150, 152, 153,
+ 255, 182, 224, 205, 174, 176, 180, 217,
+ 233, 232, 236, 187, 235, 228, 234, 226,
+ 222, 219, 211, 195, 188, 193, 185, 184,
+ 191, 183, 201, 229, 181, 220, 194, 162,
+ 163, 208, 186, 202, 200, 218, 198, 179,
+ 178, 214, 166, 170, 207, 199, 209, 206,
+ 204, 160, 212, 216, 215, 192, 175, 173,
+ 243, 172, 161, 190, 203, 189, 164, 230,
+ 167, 248, 227, 244, 242, 255, 241, 231,
+ 240, 253, 169, 210, 245, 237, 249, 247,
+ 239, 168, 252, 251, 254, 238, 223, 221,
+ 213, 225, 177, 197, 171, 196, 159, 4,
+ 5, 6, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39,
+ 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83,
+ 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128,
+ 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 141, 142, 143, 144, 145, 146
+};
+
+void
+fbmcompile(str, iflag)
+STR *str;
+int iflag;
+{
+ register unsigned char *s;
+ register unsigned char *table;
+ register int i;
+ register int len = str->str_cur;
+ int rarest = 0;
+ unsigned int frequency = 256;
+
+ Str_Grow(str,len+258);
+#ifndef lint
+ table = (unsigned char*)(str->str_ptr + len + 1);
+#else
+ table = Null(unsigned char*);
+#endif
+ s = table - 2;
+ for (i = 0; i < 256; i++) {
+ table[i] = len;
+ }
+ i = 0;
+#ifndef lint
+ while (s >= (unsigned char*)(str->str_ptr))
+#endif
+ {
+ if (table[*s] == len) {
+#ifndef pdp11
+ if (iflag)
+ table[*s] = table[fold[*s]] = i;
+#else
+ if (iflag) {
+ int j;
+ j = fold[*s];
+ table[j] = i;
+ table[*s] = i;
+ }
+#endif /* pdp11 */
+ else
+ table[*s] = i;
+ }
+ s--,i++;
+ }
+ str->str_pok |= SP_FBM; /* deep magic */
+
+#ifndef lint
+ s = (unsigned char*)(str->str_ptr); /* deeper magic */
+#else
+ s = Null(unsigned char*);
+#endif
+ if (iflag) {
+ register unsigned int tmp, foldtmp;
+ str->str_pok |= SP_CASEFOLD;
+ for (i = 0; i < len; i++) {
+ tmp=freq[s[i]];
+ foldtmp=freq[fold[s[i]]];
+ if (tmp < frequency && foldtmp < frequency) {
+ rarest = i;
+ /* choose most frequent among the two */
+ frequency = (tmp > foldtmp) ? tmp : foldtmp;
+ }
+ }
+ }
+ else {
+ for (i = 0; i < len; i++) {
+ if (freq[s[i]] < frequency) {
+ rarest = i;
+ frequency = freq[s[i]];
+ }
+ }
+ }
+ str->str_rare = s[rarest];
+ str->str_state = rarest;
+#ifdef DEBUGGING
+ if (debug & 512)
+ fprintf(stderr,"rarest char %c at %d\n",str->str_rare, str->str_state);
+#endif
+}
+
+char *
+fbminstr(big, bigend, littlestr)
+unsigned char *big;
+register unsigned char *bigend;
+STR *littlestr;
+{
+ register unsigned char *s;
+ register int tmp;
+ register int littlelen;
+ register unsigned char *little;
+ register unsigned char *table;
+ register unsigned char *olds;
+ register unsigned char *oldlittle;
+
+#ifndef lint
+ if (!(littlestr->str_pok & SP_FBM))
+ return ninstr((char*)big,(char*)bigend,
+ littlestr->str_ptr, littlestr->str_ptr + littlestr->str_cur);
+#endif
+
+ littlelen = littlestr->str_cur;
+#ifndef lint
+ if (littlestr->str_pok & SP_TAIL && !multiline) { /* tail anchored? */
+ if (littlelen > bigend - big)
+ return Nullch;
+ little = (unsigned char*)littlestr->str_ptr;
+ if (littlestr->str_pok & SP_CASEFOLD) { /* oops, fake it */
+ big = bigend - littlelen; /* just start near end */
+ if (bigend[-1] == '\n' && little[littlelen-1] != '\n')
+ big--;
+ }
+ else {
+ s = bigend - littlelen;
+ if (*s == *little && bcmp(s,little,littlelen)==0)
+ return (char*)s; /* how sweet it is */
+ else if (bigend[-1] == '\n' && little[littlelen-1] != '\n'
+ && s > big) {
+ s--;
+ if (*s == *little && bcmp(s,little,littlelen)==0)
+ return (char*)s;
+ }
+ return Nullch;
+ }
+ }
+ table = (unsigned char*)(littlestr->str_ptr + littlelen + 1);
+#else
+ table = Null(unsigned char*);
+#endif
+ if (--littlelen >= bigend - big)
+ return Nullch;
+ s = big + littlelen;
+ oldlittle = little = table - 2;
+ if (littlestr->str_pok & SP_CASEFOLD) { /* case insensitive? */
+ if (s < bigend) {
+ top1:
+ if (tmp = table[*s]) {
+#ifdef POINTERRIGOR
+ if (bigend - s > tmp) {
+ s += tmp;
+ goto top1;
+ }
+#else
+ if ((s += tmp) < bigend)
+ goto top1;
+#endif
+ return Nullch;
+ }
+ else {
+ tmp = littlelen; /* less expensive than calling strncmp() */
+ olds = s;
+ while (tmp--) {
+ if (*--s == *--little || fold[*s] == *little)
+ continue;
+ s = olds + 1; /* here we pay the price for failure */
+ little = oldlittle;
+ if (s < bigend) /* fake up continue to outer loop */
+ goto top1;
+ return Nullch;
+ }
+#ifndef lint
+ return (char *)s;
+#endif
+ }
+ }
+ }
+ else {
+ if (s < bigend) {
+ top2:
+ if (tmp = table[*s]) {
+#ifdef POINTERRIGOR
+ if (bigend - s > tmp) {
+ s += tmp;
+ goto top2;
+ }
+#else
+ if ((s += tmp) < bigend)
+ goto top2;
+#endif
+ return Nullch;
+ }
+ else {
+ tmp = littlelen; /* less expensive than calling strncmp() */
+ olds = s;
+ while (tmp--) {
+ if (*--s == *--little)
+ continue;
+ s = olds + 1; /* here we pay the price for failure */
+ little = oldlittle;
+ if (s < bigend) /* fake up continue to outer loop */
+ goto top2;
+ return Nullch;
+ }
+#ifndef lint
+ return (char *)s;
+#endif
+ }
+ }
+ }
+ return Nullch;
+}
+
+char *
+screaminstr(bigstr, littlestr)
+STR *bigstr;
+STR *littlestr;
+{
+ register unsigned char *s, *x;
+ register unsigned char *big;
+ register int pos;
+ register int previous;
+ register int first;
+ register unsigned char *little;
+ register unsigned char *bigend;
+ register unsigned char *littleend;
+
+ if ((pos = screamfirst[littlestr->str_rare]) < 0)
+ return Nullch;
+#ifndef lint
+ little = (unsigned char *)(littlestr->str_ptr);
+#else
+ little = Null(unsigned char *);
+#endif
+ littleend = little + littlestr->str_cur;
+ first = *little++;
+ previous = littlestr->str_state;
+#ifndef lint
+ big = (unsigned char *)(bigstr->str_ptr);
+#else
+ big = Null(unsigned char*);
+#endif
+ bigend = big + bigstr->str_cur;
+ big -= previous;
+ while (pos < previous) {
+#ifndef lint
+ if (!(pos += screamnext[pos]))
+#endif
+ return Nullch;
+ }
+ if (littlestr->str_pok & SP_CASEFOLD) { /* case insignificant? */
+ do {
+ if (big[pos] != first && big[pos] != fold[first])
+ continue;
+ for (x=big+pos+1,s=little; s < littleend; /**/ ) {
+ if (x >= bigend)
+ return Nullch;
+ if (*s++ != *x++ && fold[*(s-1)] != *(x-1)) {
+ s--;
+ break;
+ }
+ }
+ if (s == littleend)
+#ifndef lint
+ return (char *)(big+pos);
+#else
+ return Nullch;
+#endif
+ } while (
+#ifndef lint
+ pos += screamnext[pos] /* does this goof up anywhere? */
+#else
+ pos += screamnext[0]
+#endif
+ );
+ }
+ else {
+ do {
+ if (big[pos] != first)
+ continue;
+ for (x=big+pos+1,s=little; s < littleend; /**/ ) {
+ if (x >= bigend)
+ return Nullch;
+ if (*s++ != *x++) {
+ s--;
+ break;
+ }
+ }
+ if (s == littleend)
+#ifndef lint
+ return (char *)(big+pos);
+#else
+ return Nullch;
+#endif
+ } while (
+#ifndef lint
+ pos += screamnext[pos]
+#else
+ pos += screamnext[0]
+#endif
+ );
+ }
+ return Nullch;
+}
+
+/* copy a string to a safe spot */
+
+char *
+savestr(str)
+char *str;
+{
+ register char *newaddr;
+
+ New(902,newaddr,strlen(str)+1,char);
+ (void)strcpy(newaddr,str);
+ return newaddr;
+}
+
+/* same thing but with a known length */
+
+char *
+nsavestr(str, len)
+char *str;
+register int len;
+{
+ register char *newaddr;
+
+ New(903,newaddr,len+1,char);
+ (void)bcopy(str,newaddr,len); /* might not be null terminated */
+ newaddr[len] = '\0'; /* is now */
+ return newaddr;
+}
+
+/* grow a static string to at least a certain length */
+
+void
+growstr(strptr,curlen,newlen)
+char **strptr;
+int *curlen;
+int newlen;
+{
+ if (newlen > *curlen) { /* need more room? */
+ if (*curlen)
+ Renew(*strptr,newlen,char);
+ else
+ New(905,*strptr,newlen,char);
+ *curlen = newlen;
+ }
+}
+
+#ifndef I_VARARGS
+/*VARARGS1*/
+mess(pat,a1,a2,a3,a4)
+char *pat;
+long a1, a2, a3, a4;
+{
+ char *s;
+
+ s = buf;
+ (void)sprintf(s,pat,a1,a2,a3,a4);
+ s += strlen(s);
+ if (s[-1] != '\n') {
+ if (curcmd->c_line) {
+ (void)sprintf(s," at %s line %ld",
+ stab_val(curcmd->c_filestab)->str_ptr, (long)curcmd->c_line);
+ s += strlen(s);
+ }
+ if (last_in_stab &&
+ stab_io(last_in_stab) &&
+ stab_io(last_in_stab)->lines ) {
+ (void)sprintf(s,", <%s> line %ld",
+ last_in_stab == argvstab ? "" : stab_name(last_in_stab),
+ (long)stab_io(last_in_stab)->lines);
+ s += strlen(s);
+ }
+ (void)strcpy(s,".\n");
+ }
+}
+
+/*VARARGS1*/
+fatal(pat,a1,a2,a3,a4)
+char *pat;
+long a1, a2, a3, a4;
+{
+ extern FILE *e_fp;
+ extern char *e_tmpname;
+ char *tmps;
+
+ mess(pat,a1,a2,a3,a4);
+ if (in_eval) {
+ str_set(stab_val(stabent("@",TRUE)),buf);
+ tmps = "_EVAL_";
+ while (loop_ptr >= 0 && (!loop_stack[loop_ptr].loop_label ||
+ strNE(tmps,loop_stack[loop_ptr].loop_label) )) {
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Skipping label #%d %s)\n",loop_ptr,
+ loop_stack[loop_ptr].loop_label);
+ }
+#endif
+ loop_ptr--;
+ }
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Found label #%d %s)\n",loop_ptr,
+ loop_stack[loop_ptr].loop_label);
+ }
+#endif
+ if (loop_ptr < 0) {
+ in_eval = 0;
+ fatal("Bad label: %s", tmps);
+ }
+ longjmp(loop_stack[loop_ptr].loop_env, 1);
+ }
+ fputs(buf,stderr);
+ (void)fflush(stderr);
+ if (e_fp)
+ (void)UNLINK(e_tmpname);
+ statusvalue >>= 8;
+ exit((int)((errno&255)?errno:((statusvalue&255)?statusvalue:255)));
+}
+
+/*VARARGS1*/
+warn(pat,a1,a2,a3,a4)
+char *pat;
+long a1, a2, a3, a4;
+{
+ mess(pat,a1,a2,a3,a4);
+ fputs(buf,stderr);
+#ifdef LEAKTEST
+#ifdef DEBUGGING
+ if (debug & 4096)
+ xstat();
+#endif
+#endif
+ (void)fflush(stderr);
+}
+#else
+/*VARARGS0*/
+mess(args)
+va_list args;
+{
+ char *pat;
+ char *s;
+#ifdef CHARVSPRINTF
+ char *vsprintf();
+#else
+ int vsprintf();
+#endif
+
+ s = buf;
+#ifdef lint
+ pat = Nullch;
+#else
+ pat = va_arg(args, char *);
+#endif
+ (void) vsprintf(s,pat,args);
+
+ s += strlen(s);
+ if (s[-1] != '\n') {
+ if (curcmd->c_line) {
+ (void)sprintf(s," at %s line %ld",
+ stab_val(curcmd->c_filestab)->str_ptr, (long)curcmd->c_line);
+ s += strlen(s);
+ }
+ if (last_in_stab &&
+ stab_io(last_in_stab) &&
+ stab_io(last_in_stab)->lines ) {
+ (void)sprintf(s,", <%s> line %ld",
+ last_in_stab == argvstab ? "" : last_in_stab->str_magic->str_ptr,
+ (long)stab_io(last_in_stab)->lines);
+ s += strlen(s);
+ }
+ (void)strcpy(s,".\n");
+ }
+}
+
+/*VARARGS0*/
+fatal(va_alist)
+va_dcl
+{
+ va_list args;
+ extern FILE *e_fp;
+ extern char *e_tmpname;
+ char *tmps;
+
+#ifndef lint
+ va_start(args);
+#else
+ args = 0;
+#endif
+ mess(args);
+ va_end(args);
+ if (in_eval) {
+ str_set(stab_val(stabent("@",TRUE)),buf);
+ tmps = "_EVAL_";
+ while (loop_ptr >= 0 && (!loop_stack[loop_ptr].loop_label ||
+ strNE(tmps,loop_stack[loop_ptr].loop_label) )) {
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Skipping label #%d %s)\n",loop_ptr,
+ loop_stack[loop_ptr].loop_label);
+ }
+#endif
+ loop_ptr--;
+ }
+#ifdef DEBUGGING
+ if (debug & 4) {
+ deb("(Found label #%d %s)\n",loop_ptr,
+ loop_stack[loop_ptr].loop_label);
+ }
+#endif
+ if (loop_ptr < 0) {
+ in_eval = 0;
+ fatal("Bad label: %s", tmps);
+ }
+ longjmp(loop_stack[loop_ptr].loop_env, 1);
+ }
+ fputs(buf,stderr);
+ (void)fflush(stderr);
+ if (e_fp)
+ (void)UNLINK(e_tmpname);
+ statusvalue >>= 8;
+ exit((int)((errno&255)?errno:((statusvalue&255)?statusvalue:255)));
+}
+
+/*VARARGS0*/
+warn(va_alist)
+va_dcl
+{
+ va_list args;
+
+#ifndef lint
+ va_start(args);
+#else
+ args = 0;
+#endif
+ mess(args);
+ va_end(args);
+
+ fputs(buf,stderr);
+#ifdef LEAKTEST
+#ifdef DEBUGGING
+ if (debug & 4096)
+ xstat();
+#endif
+#endif
+ (void)fflush(stderr);
+}
+#endif
+
+void
+my_setenv(nam,val)
+char *nam, *val;
+{
+ register int i=envix(nam); /* where does it go? */
+
+ if (environ == origenviron) { /* need we copy environment? */
+ int j;
+ int max;
+ char **tmpenv;
+
+ for (max = i; environ[max]; max++) ;
+ New(901,tmpenv, max+2, char*);
+ for (j=0; j<max; j++) /* copy environment */
+ tmpenv[j] = savestr(environ[j]);
+ tmpenv[max] = Nullch;
+ environ = tmpenv; /* tell exec where it is now */
+ }
+ if (!val) {
+ while (environ[i]) {
+ environ[i] = environ[i+1];
+ i++;
+ }
+ return;
+ }
+ if (!environ[i]) { /* does not exist yet */
+ Renew(environ, i+2, char*); /* just expand it a bit */
+ environ[i+1] = Nullch; /* make sure it's null terminated */
+ }
+ else
+ Safefree(environ[i]);
+ New(904, environ[i], strlen(nam) + strlen(val) + 2, char);
+#ifndef MSDOS
+ (void)sprintf(environ[i],"%s=%s",nam,val);/* all that work just for this */
+#else
+ /* MS-DOS requires environment variable names to be in uppercase */
+ /* [Tom Dinger, 27 August 1990: Well, it doesn't _require_ it, but
+ * some utilities and applications may break because they only look
+ * for upper case strings. (Fixed strupr() bug here.)]
+ */
+ strcpy(environ[i],nam); strupr(environ[i]);
+ (void)sprintf(environ[i] + strlen(nam),"=%s",val);
+#endif /* MSDOS */
+}
+
+int
+envix(nam)
+char *nam;
+{
+ register int i, len = strlen(nam);
+
+ for (i = 0; environ[i]; i++) {
+ if (strnEQ(environ[i],nam,len) && environ[i][len] == '=')
+ break; /* strnEQ must come first to avoid */
+ } /* potential SEGV's */
+ return i;
+}
+
+#ifdef EUNICE
+unlnk(f) /* unlink all versions of a file */
+char *f;
+{
+ int i;
+
+ for (i = 0; unlink(f) >= 0; i++) ;
+ return i ? 0 : -1;
+}
+#endif
+
+#ifndef HAS_MEMCPY
+#ifndef HAS_BCOPY
+char *
+bcopy(from,to,len)
+register char *from;
+register char *to;
+register int len;
+{
+ char *retval = to;
+
+ while (len--)
+ *to++ = *from++;
+ return retval;
+}
+#endif
+
+#ifndef HAS_BZERO
+char *
+bzero(loc,len)
+register char *loc;
+register int len;
+{
+ char *retval = loc;
+
+ while (len--)
+ *loc++ = 0;
+ return retval;
+}
+#endif
+#endif
+
+#ifdef I_VARARGS
+#ifndef HAS_VPRINTF
+
+#ifdef CHARVSPRINTF
+char *
+#else
+int
+#endif
+vsprintf(dest, pat, args)
+char *dest, *pat, *args;
+{
+ FILE fakebuf;
+
+ fakebuf._ptr = dest;
+ fakebuf._cnt = 32767;
+#ifndef _IOSTRG
+#define _IOSTRG 0
+#endif
+ fakebuf._flag = _IOWRT|_IOSTRG;
+ _doprnt(pat, args, &fakebuf); /* what a kludge */
+ (void)putc('\0', &fakebuf);
+#ifdef CHARVSPRINTF
+ return(dest);
+#else
+ return 0; /* perl doesn't use return value */
+#endif
+}
+
+#ifdef DEBUGGING
+int
+vfprintf(fd, pat, args)
+FILE *fd;
+char *pat, *args;
+{
+ _doprnt(pat, args, fd);
+ return 0; /* wrong, but perl doesn't use the return value */
+}
+#endif
+#endif /* HAS_VPRINTF */
+#endif /* I_VARARGS */
+
+#ifdef MYSWAP
+#if BYTEORDER != 0x4321
+short
+my_swap(s)
+short s;
+{
+#if (BYTEORDER & 1) == 0
+ short result;
+
+ result = ((s & 255) << 8) + ((s >> 8) & 255);
+ return result;
+#else
+ return s;
+#endif
+}
+
+long
+htonl(l)
+register long l;
+{
+ union {
+ long result;
+ char c[sizeof(long)];
+ } u;
+
+#if BYTEORDER == 0x1234
+ u.c[0] = (l >> 24) & 255;
+ u.c[1] = (l >> 16) & 255;
+ u.c[2] = (l >> 8) & 255;
+ u.c[3] = l & 255;
+ return u.result;
+#else
+#if ((BYTEORDER - 0x1111) & 0x444) || !(BYTEORDER & 0xf)
+ fatal("Unknown BYTEORDER\n");
+#else
+ register int o;
+ register int s;
+
+ for (o = BYTEORDER - 0x1111, s = 0; s < (sizeof(long)*8); o >>= 4, s += 8) {
+ u.c[o & 0xf] = (l >> s) & 255;
+ }
+ return u.result;
+#endif
+#endif
+}
+
+long
+ntohl(l)
+register long l;
+{
+ union {
+ long l;
+ char c[sizeof(long)];
+ } u;
+
+#if BYTEORDER == 0x1234
+ u.c[0] = (l >> 24) & 255;
+ u.c[1] = (l >> 16) & 255;
+ u.c[2] = (l >> 8) & 255;
+ u.c[3] = l & 255;
+ return u.l;
+#else
+#if ((BYTEORDER - 0x1111) & 0x444) || !(BYTEORDER & 0xf)
+ fatal("Unknown BYTEORDER\n");
+#else
+ register int o;
+ register int s;
+
+ u.l = l;
+ l = 0;
+ for (o = BYTEORDER - 0x1111, s = 0; s < (sizeof(long)*8); o >>= 4, s += 8) {
+ l |= (u.c[o & 0xf] & 255) << s;
+ }
+ return l;
+#endif
+#endif
+}
+
+#endif /* BYTEORDER != 0x4321 */
+#endif /* HAS_HTONS */
+
+#ifndef MSDOS
+FILE *
+mypopen(cmd,mode)
+char *cmd;
+char *mode;
+{
+ int p[2];
+ register int this, that;
+ register int pid;
+ STR *str;
+ int doexec = strNE(cmd,"-");
+
+ if (pipe(p) < 0)
+ return Nullfp;
+ this = (*mode == 'w');
+ that = !this;
+ while ((pid = (doexec?vfork():fork())) < 0) {
+ if (errno != EAGAIN) {
+ close(p[this]);
+ if (!doexec)
+ fatal("Can't fork");
+ return Nullfp;
+ }
+ sleep(5);
+ }
+ if (pid == 0) {
+#define THIS that
+#define THAT this
+ close(p[THAT]);
+ if (p[THIS] != (*mode == 'r')) {
+ dup2(p[THIS], *mode == 'r');
+ close(p[THIS]);
+ }
+ if (doexec) {
+#if !defined(I_FCNTL) || !defined(F_SETFD)
+ int fd;
+
+#ifndef NOFILE
+#define NOFILE 20
+#endif
+ for (fd = 3; fd < NOFILE; fd++)
+ close(fd);
+#endif
+ do_exec(cmd); /* may or may not use the shell */
+ _exit(1);
+ }
+ if (tmpstab = stabent("$",allstabs))
+ str_numset(STAB_STR(tmpstab),(double)getpid());
+ forkprocess = 0;
+ hclear(pidstatus, FALSE); /* we have no children */
+ return Nullfp;
+#undef THIS
+#undef THAT
+ }
+ do_execfree(); /* free any memory malloced by child on vfork */
+ close(p[that]);
+ if (p[that] < p[this]) {
+ dup2(p[this], p[that]);
+ close(p[this]);
+ p[this] = p[that];
+ }
+ str = afetch(fdpid,p[this],TRUE);
+ str->str_u.str_useful = pid;
+ forkprocess = pid;
+ return fdopen(p[this], mode);
+}
+#endif /* !MSDOS */
+
+#ifdef NOTDEF
+dumpfds(s)
+char *s;
+{
+ int fd;
+ struct stat tmpstatbuf;
+
+ fprintf(stderr,"%s", s);
+ for (fd = 0; fd < 32; fd++) {
+ if (fstat(fd,&tmpstatbuf) >= 0)
+ fprintf(stderr," %d",fd);
+ }
+ fprintf(stderr,"\n");
+}
+#endif
+
+#ifndef HAS_DUP2
+dup2(oldfd,newfd)
+int oldfd;
+int newfd;
+{
+#if defined(HAS_FCNTL) && defined(F_DUPFD)
+ close(newfd);
+ fcntl(oldfd, F_DUPFD, newfd);
+#else
+ int fdtmp[20];
+ int fdx = 0;
+ int fd;
+
+ if (oldfd == newfd)
+ return 0;
+ close(newfd);
+ while ((fd = dup(oldfd)) != newfd) /* good enough for low fd's */
+ fdtmp[fdx++] = fd;
+ while (fdx > 0)
+ close(fdtmp[--fdx]);
+#endif
+}
+#endif
+
+#ifndef MSDOS
+int
+mypclose(ptr)
+FILE *ptr;
+{
+#ifdef VOIDSIG
+ void (*hstat)(), (*istat)(), (*qstat)();
+#else
+ int (*hstat)(), (*istat)(), (*qstat)();
+#endif
+ int status;
+ STR *str;
+ int pid;
+
+ str = afetch(fdpid,fileno(ptr),TRUE);
+ astore(fdpid,fileno(ptr),Nullstr);
+ fclose(ptr);
+ pid = (int)str->str_u.str_useful;
+ hstat = signal(SIGHUP, SIG_IGN);
+ istat = signal(SIGINT, SIG_IGN);
+ qstat = signal(SIGQUIT, SIG_IGN);
+ pid = wait4pid(pid, &status, 0);
+ signal(SIGHUP, hstat);
+ signal(SIGINT, istat);
+ signal(SIGQUIT, qstat);
+ return(pid < 0 ? pid : status);
+}
+
+int
+wait4pid(pid,statusp,flags)
+int pid;
+int *statusp;
+int flags;
+{
+ int result;
+ STR *str;
+ char spid[16];
+
+ if (!pid)
+ return -1;
+#ifdef HAS_WAIT4
+ return wait4((pid==-1)?0:pid,statusp,flags,Null(struct rusage *));
+#else
+#ifdef HAS_WAITPID
+ return waitpid(pid,statusp,flags);
+#else
+ if (pid > 0) {
+ sprintf(spid, "%d", pid);
+ str = hfetch(pidstatus,spid,strlen(spid),FALSE);
+ if (str != &str_undef) {
+ *statusp = (int)str->str_u.str_useful;
+ hdelete(pidstatus,spid,strlen(spid));
+ return pid;
+ }
+ }
+ else {
+ HENT *entry;
+
+ hiterinit(pidstatus);
+ if (entry = hiternext(pidstatus)) {
+ pid = atoi(hiterkey(entry,statusp));
+ str = hiterval(entry);
+ *statusp = (int)str->str_u.str_useful;
+ sprintf(spid, "%d", pid);
+ hdelete(pidstatus,spid,strlen(spid));
+ return pid;
+ }
+ }
+ if (flags)
+ fatal("Can't do waitpid with flags");
+ else {
+ while ((result = wait(statusp)) != pid && pid > 0 && result >= 0)
+ pidgone(result,*statusp);
+ if (result < 0)
+ *statusp = -1;
+ }
+ return result;
+#endif
+#endif
+}
+
+pidgone(pid,status)
+int pid;
+int status;
+{
+#if defined(HAS_WAIT4) || defined(HAS_WAITPID)
+#else
+ register STR *str;
+ char spid[16];
+
+ sprintf(spid, "%d", pid);
+ str = hfetch(pidstatus,spid,strlen(spid),TRUE);
+ str->str_u.str_useful = status;
+#endif
+ return;
+}
+#endif /* !MSDOS */
+
+#ifndef HAS_MEMCMP
+memcmp(s1,s2,len)
+register unsigned char *s1;
+register unsigned char *s2;
+register int len;
+{
+ register int tmp;
+
+ while (len--) {
+ if (tmp = *s1++ - *s2++)
+ return tmp;
+ }
+ return 0;
+}
+#endif /* HAS_MEMCMP */
+
+void
+repeatcpy(to,from,len,count)
+register char *to;
+register char *from;
+int len;
+register int count;
+{
+ register int todo;
+ register char *frombase = from;
+
+ if (len == 1) {
+ todo = *from;
+ while (count-- > 0)
+ *to++ = todo;
+ return;
+ }
+ while (count-- > 0) {
+ for (todo = len; todo > 0; todo--) {
+ *to++ = *from++;
+ }
+ from = frombase;
+ }
+}
+
+#ifndef CASTNEGFLOAT
+unsigned long
+castulong(f)
+double f;
+{
+ long along;
+
+#if CASTFLAGS & 2
+# define BIGDOUBLE 2147483648.0
+ if (f >= BIGDOUBLE)
+ return (unsigned long)(f-(long)(f/BIGDOUBLE)*BIGDOUBLE)|0x80000000;
+#endif
+ if (f >= 0.0)
+ return (unsigned long)f;
+ along = (long)f;
+ return (unsigned long)along;
+}
+#endif
+
+#ifndef HAS_RENAME
+int
+same_dirent(a,b)
+char *a;
+char *b;
+{
+ char *fa = rindex(a,'/');
+ char *fb = rindex(b,'/');
+ struct stat tmpstatbuf1;
+ struct stat tmpstatbuf2;
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+ char tmpbuf[MAXPATHLEN+1];
+
+ if (fa)
+ fa++;
+ else
+ fa = a;
+ if (fb)
+ fb++;
+ else
+ fb = b;
+ if (strNE(a,b))
+ return FALSE;
+ if (fa == a)
+ strcpy(tmpbuf,".");
+ else
+ strncpy(tmpbuf, a, fa - a);
+ if (stat(tmpbuf, &tmpstatbuf1) < 0)
+ return FALSE;
+ if (fb == b)
+ strcpy(tmpbuf,".");
+ else
+ strncpy(tmpbuf, b, fb - b);
+ if (stat(tmpbuf, &tmpstatbuf2) < 0)
+ return FALSE;
+ return tmpstatbuf1.st_dev == tmpstatbuf2.st_dev &&
+ tmpstatbuf1.st_ino == tmpstatbuf2.st_ino;
+}
+#endif /* !HAS_RENAME */
+
+unsigned long
+scanoct(start, len, retlen)
+char *start;
+int len;
+int *retlen;
+{
+ register char *s = start;
+ register unsigned long retval = 0;
+
+ while (len-- && *s >= '0' && *s <= '7') {
+ retval <<= 3;
+ retval |= *s++ - '0';
+ }
+ *retlen = s - start;
+ return retval;
+}
+
+unsigned long
+scanhex(start, len, retlen)
+char *start;
+int len;
+int *retlen;
+{
+ register char *s = start;
+ register unsigned long retval = 0;
+ char *tmp;
+
+ while (len-- && *s && (tmp = index(hexdigit, *s))) {
+ retval <<= 4;
+ retval |= (tmp - hexdigit) & 15;
+ s++;
+ }
+ *retlen = s - start;
+ return retval;
+}
diff --git a/MultiSource/Benchmarks/MallocBench/perl/util.h b/MultiSource/Benchmarks/MallocBench/perl/util.h
new file mode 100644
index 00000000..74cdf8dc
--- /dev/null
+++ b/MultiSource/Benchmarks/MallocBench/perl/util.h
@@ -0,0 +1,47 @@
+/* $Header$
+ *
+ * Copyright (c) 1989, 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.
+ *
+ * $Log$
+ * Revision 1.1 2004/02/17 22:21:17 criswell
+ * Initial commit of the perl Malloc Benchmark. I've cheated a little by
+ * generating the yacc output files and committing them directly, but it was
+ * easier than disabling the Bison Voodoo that gets executed by default.
+ *
+ * Revision 4.0 91/03/20 01:56:48 lwall
+ * 4.0 baseline.
+ *
+ */
+
+EXT int *screamfirst INIT(Null(int*));
+EXT int *screamnext INIT(Null(int*));
+
+char *safemalloc();
+char *saferealloc();
+char *cpytill();
+char *instr();
+char *fbminstr();
+char *screaminstr();
+void fbmcompile();
+char *savestr();
+void my_setenv(char *, char *);
+int envix();
+void growstr();
+char *ninstr();
+char *rninstr();
+char *nsavestr();
+FILE *mypopen();
+int mypclose();
+#ifndef HAS_MEMCPY
+#ifndef HAS_BCOPY
+char *bcopy();
+#endif
+#ifndef HAS_BZERO
+char *bzero();
+#endif
+#endif
+unsigned long scanoct();
+unsigned long scanhex();